Pfefferkorn: Frage zu Namensräumen

Hallo!

Ich habe eine Frage zu Namensräumen, deren Konzept ich noch nicht ganz verstehe.

Gegeben sei folgendes Beispiel aus der SELFHTML-Doku (http://de.selfhtml.org/xml/regeln/namensraeume.htm):

<?xml version="1.0" encoding="ISO-8859-1" ?>  
<buch xmlns="http://www.meinserver.de/XML/buch">  
<kapitel nummer="1">  
  <html xmlns="http://www.w3.org/TR/REC-html-40">  
    <head><title>Einleitung</title></head>  
    <body>  
     <h1>Einleitung</h1>  
     <p>Das Buch beginnt mit diesem Text...</p>  
    </body>  
   </html>  
</kapitel>  
</buch>

Dort ist keine DTD angegeben, ist das so beabsichtigt? Ersetzt die Angabe xmlns="http://www.meinserver..." die Angabe der DTD? Eigentlich kann das ja nicht sein, da in dem Attribut ja etwas Beliebiges stehen darf, was so gar nicht existiert.

Wie geht es dann aber richtig? So?

<?xml version="1.0" encoding="ISO-8859-1" ?>  
<!DOCTYPE buch SYSTEM "http://www...">  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<buch xmlns="http://www.meinserver.de/XML/buch">  
<kapitel nummer="1">  
  <html xmlns="http://www.w3.org/TR/REC-html-40">  
    <head><title>Einleitung</title></head>  
    <body>  
     <h1>Einleitung</h1>  
     <p>Das Buch beginnt mit diesem Text...</p>  
    </body>  
   </html>  
</kapitel>  
</buch>

Aber wie verknüft man dann die Namensräume mit der passenden DTD-Deklaration?

Und dann noch eine Frage, in SELFHTML steht bzgl. des obigen Beispiels: "Das Beispiel zeigt ein XML-Dokument. Es enthält ein Dokument-Element namens buch. In dessen Einleitungs-Tag ist eine XML-Namensraumdeklaration enthalten. Dazu wird in dem einleitenden Tag das Attribut xmlns notiert. Dahinter folgt ein Seite URI, der angibt, auf welchen anderen Namensraum in diesem Element Bezug genommen wird."

Bedeutet das, dass das Element, in dem das Attribut xmlns notiert ist, selbst noch nicht zu dem dort angegebenen Namensraum gehört, sondern nur alles, was innerhalb des Elements steht? Oder gehört auch bereits das Element, in dem das xmlns-Attribut steht, schon zu diesem Namensraum?

Vielen Dank für jede Aufklärung!

  1. @@Pfefferkorn:

    nuqneH

    Dort ist keine DTD angegeben, ist das so beabsichtigt?

    Ja, warum auch nicht? Es ist nicht notwendig, dass bei jeder XML-Anwendung eine DTD (bzw. ein XML Schema) existiert. Bei manchen Anwendungen ist dies auch gar nicht möglich.

    Ersetzt die Angabe xmlns="http://www.meinserver..." die Angabe der DTD?

    Nein, das ist etwas völlig anderes.

    <!DOCTYPE buch SYSTEM "http://www...">
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    Nein, es kann nur eine DOCTYPE-Deklaration geben. Und wenn es für 'buch' eine DTD geben sollte, dann müsste sie auch alle HTML-Elemente und Attribute enthalten.

    Aber vermutlich will man das nicht. 'buch'-Dokumente sollen nicht valide, sondern nur wohlgeformt sein. ↗Unterschied ;-)

    Oder gehört auch bereits das Element, in dem das xmlns-Attribut steht, schon zu diesem Namensraum?

    Ja, das tut es.

    Vielen Dank für jede Aufklärung!

    Namensräume in XML gibt es auch in deutscher Übersetzung.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
  2. Hi!

    Vielleicht noch ergänzend zu Gunnars Antwort: Es ist nicht nur beabsichtigt, dass keine DTD angegeben ist, in der Praxis schließen sich die Verwendung von Namensräumen und DTD sogar gegenseitig aus.

    Wie würde eine DTD für ein Buch aussehen? Sie müsste in jedem Element, das eine (X)HTML-Seite enthalten kann, wieder ein <html>-Element als Kind erlauben. Das führt dazu, dass sämtliche HTML-Elemente in dieser DTD definiert sein müssten. Ein solche DTD zu erstellen, ist schon zu viel Arbeit. Außerdem muss das dann noch gewartet werden: Ändert sich die HTML-DTD, dann muss auch die Buch-DTD angepasst werden.

    Wenn jetzt in dem Buch noch ein weiterer Namensraum vorkommen dürfen soll (z.B. SVG), dann müsste man auch alle SVG-Element in der Buch-DTD definieren, und die DTD bei Änderungen an SVG wieder anpassen. Und das gleiche für jeden weiteren Namensraum. Das ist schlicht nicht praktikabel.

    Dadurch, dass man XML-Namensräume in ein und demselben Dokument ganz wild durcheinander verwenden darf, ist eine DTD einfach nicht mächtig genug, um so ein Dokument zu beschreiben. Um ein solches XML-Dokument trotzdem validieren zu können, verwendet man meistens XML-Schemata. Wenn du Englisch kannst, schau dir die ersten 2 Abschnitte hier an, damit du eine Vorstellung davon kriegst, wie sowas ungefähr funktioniert.

    Fazit: Wenn du XML-Dokumente, die mehrere Namensräume enthalten, validieren willst, kommst du mit DTD nicht weit, und musst stattdessen XML Schema einsetzen.

    Grüße
    Bernhard

    1. @@Bernhard:

      nuqneH

      in der Praxis schließen sich die Verwendung von Namensräumen und DTD sogar gegenseitig aus.

      Nein. Bspw. XHTML+MathML+SVG.

      Wenn jetzt in dem Buch noch ein weiterer Namensraum vorkommen dürfen soll (z.B. SVG), dann müsste man auch alle SVG-Element in der Buch-DTD definieren, und die DTD bei Änderungen an SVG wieder anpassen. Und das gleiche für jeden weiteren Namensraum. Das ist schlicht nicht praktikabel.

      Modularisierung macht’s möglich.

      Dadurch, dass man XML-Namensräume in ein und demselben Dokument ganz wild durcheinander verwenden darf,

      Von „wild durcheinander“ war hier nicht die Rede.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Hallo!

        Modularisierung macht’s möglich.

        Jo, so geht's: Die Möglichkeit der Modularisierung war mir nicht bekannt. Scheint vergleichsweise neu und nicht sehr weit verbreitet zu sein. Mir ist auch nicht ganz klar, warum man das erfunden hat: Was leistet das, was XML Schema nicht leistet?

        Dadurch, dass man XML-Namensräume in ein und demselben Dokument ganz wild durcheinander verwenden darf,
        Von „wild durcheinander“ war hier nicht die Rede.

        Kapier ich nicht: Worauf willst du damit hinaus?

        Bernhard

        1. @@Bernhard:

          nuqneH

          Jo, so geht's: Die Möglichkeit der Modularisierung war mir nicht bekannt. Scheint vergleichsweise neu und nicht sehr weit verbreitet zu sein.

          Modularisierung [XHTML-MODULARIZATION] und XHTML 1.1 [XHTML11] sind nun wirklich nicht neu.

          Die Verbreitung von XHTML 1.1 scheiterte am Verzicht auf Kompatibilität mit HTML 4, wie es sie für XHTML 1.0 gibt. [XHTML10 §C]

          Von „wild durcheinander“ war hier nicht die Rede.
          Kapier ich nicht: Worauf willst du damit hinaus?

          Dass es einen Unterschied macht, ob Elemente und Attribute aus verschiedenen Namensräumen „wild durcheinander“ im XML-Dokument vorkommen (wie es bei der Verwendung mehrerer Vokabularien in RDF/XML der Fall ist) oder ob ein Namensraum als Insel innerhalb eines anderen Namensraums vorkommt (wie im Beispiel "buch").

          In diesem Fall genügt es, dass in der DTD <!ELEMENT kapitel (html)> steht und die HTML-DTD in der buch-DTD enthalten ist (zweckmäßigerweise als Referenz eingebunden).

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. Hi!

            Jo, so geht's: Die Möglichkeit der Modularisierung war mir nicht bekannt. Scheint vergleichsweise neu und nicht sehr weit verbreitet zu sein.

            Modularisierung [XHTML-MODULARIZATION] und XHTML 1.1 [XHTML11] sind nun wirklich nicht neu.

            Ich habe nur von Modularisierung, nicht von XHTML gesprochen. Dass XHTML 1.1 mit Hilfe dieses Modularisierungskonzepts definiert wurde, habe ich nicht gewusst. Es erscheint mir für die Anwendung auch nicht unbedingt relevant.

            Und auch wenn Modularisierung schon seit 2003 existiert, ist es immer noch jünger als XML Schema (2001). Daher kam meine Frage: Was bietet XHTML-Modularisierung, was XML Schema nicht bietet?

            Von „wild durcheinander“ war hier nicht die Rede.
            Kapier ich nicht: Worauf willst du damit hinaus?

            Dass es einen Unterschied macht, ob Elemente und Attribute aus verschiedenen Namensräumen „wild durcheinander“ im XML-Dokument vorkommen (wie es bei der Verwendung mehrerer Vokabularien in RDF/XML der Fall ist) oder ob ein Namensraum als Insel innerhalb eines anderen Namensraums vorkommt (wie im Beispiel "buch").

            In diesem Fall genügt es, dass in der DTD <!ELEMENT kapitel (html)> steht und die HTML-DTD in der buch-DTD enthalten ist (zweckmäßigerweise als Referenz eingebunden).

            Aber eben nur in diesem Fall. Ich zumindest hatte den starken Eindruck, dass Pfefferkorn eine grundsätzliche bzw. allgemeine Verständnisfrage hatte, die mit einem Beispiel illustriert wurde. Würde ich genauso machen, wenn ich eine allgemeine Frage hätte.

            Grüße
            Bernhard

            1. @@Bernhard:

              nuqneH

              Aber eben nur in diesem Fall. Ich zumindest hatte den starken Eindruck, dass Pfefferkorn eine grundsätzliche bzw. allgemeine Verständnisfrage hatte, die mit einem Beispiel illustriert wurde.

              Zu dem allgemeinen Fall sagte ich ja schon, dass valides XML wenig sinnvoll oder gar nicht möglich ist.

              Qapla'

              --
              Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
              (Mark Twain)