Thomas J.S.: Namensraumnamen, was sagt die URI oder URN?

Beitrag lesen

Hallo,

besten Dank für die Hinweise. Unter http://aktuell.de.selfhtml.org/artikel/xml/namensraeume/index.htm findet sich, dass "... das Präfix nur ein Stellvertreter (Abkürzung) der Namensraum-URI ist."

Vielleicht liegt mein Verständnisproblem in der Verwendung der Namensräume.

Gehen wir dann etwas mehr ins Detail:
--------------------------------------------------------------------
Nehmen wir das Beispiel mit dem Titel-Element:

  
<buch>  
   <titel>Ratgeber</titel>  
   <autor>  
      <titel>Dr.</titel>  
      <vorname>Peter</vorname>  
      <nachname>Klug</nachname>  
    </autor>  
</buch>  

Für den XML-Parser gibt es keinen Unterschied zwischen den zwei Titel-Elementen, obwohl beide unterschiedliche Bedeutung haben. Die beste Lösung wäre, wenn für jedes Element im Dokument ein eindeutiger Name gefunden werden könnte.
Namensräume in XML dienen dazu, solche Mehrdeutigkeiten in XML-Dokumenten zu
vermeiden und Element- und Attributnamen eindeutig zu benennen.

Wie können wir also unsere Elemente eindeutig benennen? Es wäre möglich, dies in der folgenden Form zu tun:

  
<buch:buch>  
   <buch:titel>Ratgeber</buch:titel>  
   <buch:autor>  
      <person:titel>Dr.</person:titel>  
      <person:vorname>Peter</person:vorname>  
      <person:nachname>Klug</person:nachname>  
   </buch:autor>  
</buch:buch>  

Hier haben wir Elementen, die sich auf eine Person beziehen, einen Präfix mit dem Namen »person« und Elementen die sich auf das Buch beziehen, einen Präfix mit dem Namen »buch« zugewiesen. Somit erhalten wir zwei Gruppen von Elementen und wir können sofort sagen, welche Elemente in die eine und welche in die andere Gruppe gehören. Jede diese Gruppen bildet einen Namensraum und das jeweilige Präfix ist das so genannte Namensraum-Präfix.
Damit haben wir zwar das Problem der Mehrdeutigkeit in diesem Beispiel behoben, aber wir haben noch immer nicht die Sicherheit, dass unsere Elemente eindeutig gekennzeichnet sind, denn andere Autoren könnten ebenso diese Präfixe für ihre Elemente benutzen.

Um auch dieses Problem zu lösen, können wir bestimmen, dass für diese Präfixe ein URI als Name genutzt werden soll. Da URIs eindeutig sind, würden wir also das Problem damit umgehen. Und so könnte dann eines unserer Elemente in einem XML-Dokument notiert werden:
http://www.meinedomain.de/person/:titelDr.</http://www.meinedomain.de/
person/:titel>
Aber in XML darf ein XML-Name das Zeichen »/«nicht enthalten, und dieses hätten wir in einer URI, womit unsere Dokumente nicht mehr wohlgeformt wären.
Was wir also benötigen, ist eine Kombination von beidem, einerseits die Möglichkeit der Verwendung von eindeutigen URIs, anderseits die Möglichkeit Präfixe zu verwenden. Und genau diese Kombination bietet das Namensraumkonzept von XML.

Alle Namensräume, die in einem XML-Dokument verwendet werden, müssen im Dokument deklariert werden. Dazu wird dem Namensraum-Präfix der URI des Namensraums zugewiesen. Ein Element oder Attribut aus dem Namensraum wird dann über das Namensraum-Präfix referenziert, das Namensraum-Präfix dient dabei als Abkürzung der URI.

Um Namensräume in einem XML-Dokument nutzen zu können, müssen so genannte
qualifizierte Namen als Element- oder Attributnamen verwendet werden. Ein qualifizierter Namen besteht aus dem Präfix und dem lokalen Teil. Das Präfix stellt den Namensraum-Präfix dar und der lokale Teil ist der ursprüngliche Elementname. Intern ersetzt der XML-Parser den Namensraum-Präfix durch den Namensraum selbst.
--------------------------------------------------------------------

DTD könnnen selbige nicht "erkennen", aber mit DOM, SAX und auch XSLT (? in http://www.rpbourret.com/xml/NamespacesFAQ.htm findet sich dazun nix, also vermutlich nicht?), kann ich entsprechend der Namensraumzugehörigkeit dann enstprechend filtern und die Ausgabe beeinflussen?

Ja, kannst du. DOM, SAX und auch XSL bieten möglichkeiten dafür mit Namensräumen zu arbeiten.
z.B.
http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#local_name
und
http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#namespace_uri

Oder in welcher Anwendung findet sich der wesentliche Nutzen, des auseinanderhaltens der Elemente?

Dort z.B. wo man fremdes XML in sein eigens integriert (Srichwort z.B. content-syndication) und wo man nicht sicher sein kann, welche Elemente in dem fremden XML vorkommen können.

»»Könnte ich mit XSLT dann die Namen der Server server:name rot ausgeben, die der Personen personen:name blau zB., oder mit PHP und DOM oder SAX eine Liste lediglich der Servernamen ausspucken lassen und das anhand der Namespace URI (also entweder "http://irgendwasmitserver" oder "urn:auswasmitserver") filtern?

Könntest du.
Ein Beispiel mit verschiedenen Namensräumen und XSL findest du z.B. unter http://forum.de.selfhtml.org/archiv/2006/1/t121479/#m781896

Grüße
Thomas