Stefan: XML - wann sollte man Namspaces einführen?

Liebes Forum,

der Betreff stellt schon die Frage, als Hintergrund noch Folgendes:

ich arbeite an einem kleinen CMS, welches aber wachsen soll. Als Output des Systems möchte ich XML nutzen, welches dann über XSLT in das gewünschte Ausgangsformat transformiert werden kann.

Nun frage ich mich, ob ich für meine "proprietären" Daten-Tags direkt einen eigenen Namespace definieren soll, also anstatt <article>, <catalog> zB hd:article, hd:catalog, etc.

Das erscheint mir irgendwo "sauberer", aber ich bin nicht sicher, ob dieses Vorgehen dem Sinn eines Namespace entspricht und ob ich dabei vielleicht etwas übersehe.

Für Tipps bin ich dankbar,
Stefan

  1. Nun frage ich mich, ob ich für meine "proprietären" Daten-Tags direkt einen eigenen Namespace definieren soll, also anstatt <article>, <catalog> zB hd:article, hd:catalog, etc.

    Stefan,
    Du kannst auch einen Namensraum ohne Präfix vergeben:

    <myXML xmlns="http://example.net/myNamespace#">  
      <article>foo</article>  
      <catalog>bar</catalog>  
    </myXML>
    

    ist das Gleiche wie

    <hd:myXML xmlns:hd="http://example.net/myNamespace#">  
      <hd:article>foo</hd:article>  
      <hd:catalog>bar</hd:catalog>  
    </hd:myXML>
    

    (Wenn XHTML als XML verarbeitet wird, sollten Browser auch mit

    <!DOCTYPE html:html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
    <html:html xmlns:html="http://www.w3.org/1999/xhtml">  
      <html:head>  
        <html:title>foo</html:title>  
      </html:head>  
      <html:body>  
        <html:p>bar</html:p>  
      </html:body>  
    </html:html>
    

    klarkommen.)

    Das erscheint mir irgendwo "sauberer", aber ich bin nicht sicher, ob dieses Vorgehen dem Sinn eines Namespace entspricht und ob ich dabei vielleicht etwas übersehe.

    In Namensräume in XML (Deutsche Übersetzung) hast du schon reingeschaut?

    Live long and prosper,
    Gunnar

    --
    „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
    1. Hallo Gunnar,

      erstmal Danke für Deine Anmerkungen.

      In Namensräume in XML (Deutsche Übersetzung) hast du schon reingeschaut?

      Nein, das werde ich nun aber mal tun.

      Ich glaube, mein Problem ist, daß die Theorie oder Empfehlungen zu einer Verfahrensweise mir in der Regel wenig darüber sagen, _was_ ich denn nun konkret anwenden soll. Zum Beispiel:

      <zitier>
      In Dokumenten, die unterschiedliches Markup-Vokabular enthalten, können Probleme mit der Erkennung und Kollisionen auftreten. Software-Module müssen die Tags und Attribute erkennen, für deren Verarbeitung sie geschaffen wurden, auch im Fall einer Kollision, wenn Markup, das für eine andere Software geschrieben wurde, die gleichen Elementtypen und Attributnamen verwendet.
      </zitier>

      Was sagt mir das für meinen Anwendungsfall? Werde ich mir irgendwann die Haare raufen, weil die Tags meines CMSystems mit denen einer externen Datenquelle kollidieren (oder andersrum)? Oder plane ich da zum jetzigen Zeitpunkt zuviel (frei nach dem Extreme Programming-Motto YAGNI -> You Aren´t Gonna Need It ?

      Solche Fragen verunsichern mich immer etwas, da ich in meinem Bekanntenkreis diese Fragestellungen auch kaum erhellend diskutieren kann. :)

      Live long and prosper,

      Du auch! :)

      Danke,
      Stefan

      1. Hallo,

        Ich glaube, mein Problem ist, daß die Theorie oder Empfehlungen zu einer Verfahrensweise mir in der Regel wenig darüber sagen, _was_ ich denn nun konkret anwenden soll. Zum Beispiel:

        <zitier>
        In Dokumenten, die unterschiedliches Markup-Vokabular enthalten, können Probleme mit der Erkennung und Kollisionen auftreten. Software-Module müssen die Tags und Attribute erkennen, für deren Verarbeitung sie geschaffen wurden, auch im Fall einer Kollision, wenn Markup, das für eine andere Software geschrieben wurde, die gleichen Elementtypen und Attributnamen verwendet.
        </zitier>

        Was sagt mir das für meinen Anwendungsfall?

        Das du im Text nicht weitergelesen hast?! :)

        "Diese Überlegungen erfordern, dass Dokumentkonstrukte, deren Geltungsbereich über den des beinhaltenden Dokuments hinausgeht, einzigartige Namen haben sollten. Diese Spezifikation beschreibt einen Mechanismus, XML-Namensräume, der diese Anforderungen erfüllt."

        Alles klar? ;-)

        »»Werde ich mir irgendwann die Haare raufen, weil die Tags meines CMSystems mit denen einer externen Datenquelle kollidieren (oder andersrum)?

        Nur wenn du es schlecht Programmierst ;) Sonst ist es ziemlich unwahrscheinlich. Namensräume sind ja genau für solche Fälle geschafft, denn so kannst du zwei Elemente vom gleichen Typ unterscheiden.

        Du hast in deinem XML <name>Hakuna Matata</name> aus einer anderen Quelle bekommst du <name>YAGNI WYISWYNG</name>, jetzt könnte dein Programm durcheinander kommen. Wenn du aber Namesräume verwendest:
        my:nameHakuna Matata</my:name> und your:nameYAGNI WYISWYNG</your:name> kann das Programm (wenn es Namesräume versteht) unterscheiden und die Daten richtig verarbeiten.

        Solche Fragen verunsichern mich immer etwas, da ich in meinem Bekanntenkreis diese Fragestellungen auch kaum erhellend diskutieren kann. :)

        Dafür gibt's ja das Forum hier :)

        Grüße
        Thomas

  2. Hallo,

    Nun frage ich mich, ob ich für meine "proprietären" Daten-Tags direkt einen eigenen Namespace definieren soll, also anstatt <article>, <catalog> zB hd:article, hd:catalog, etc.

    Das erscheint mir irgendwo "sauberer", aber ich bin nicht sicher, ob dieses Vorgehen dem Sinn eines Namespace entspricht und ob ich dabei vielleicht etwas übersehe.

    Wenn du vorhast fremdes XML in deine Daten unterzubringen (z.B. Feeds, RDF, oder XML aus anderen Anwendungen), entspricht dein Vorgehen genau dem Sinn und Zweck von Namesräumen bzw. Namesräume sind genau für solche Fälle wie du es vorhast konzipiert.
    Die frage ist eher, ob dein CMS dann mit Namesräumen umgehen kann oder nicht.

    Grüße
    Thomas

    1. Hallo Thomas,

      Danke für Deine Antwort, dann bin ich ja wahrscheinlich auf dem richtigen Pfad.

      Die frage ist eher, ob dein CMS dann mit Namesräumen umgehen kann oder nicht.

      Das wird es dann wohl müssen... :)

      Danke,
      Stefan