XML Namensräume

Die W3C Empfehlung für Namensräume hat reichlich Verwirrung ausgelöst: zum besseren Verständnis über dieses eigentlich nicht so komplizierte Thema, möchte ich hier einen kleinen Beitrag liefern.
Worum geht es also: XML-Daten bestehen aus Elementen, auch Tags genannt, sowie null oder mehreren Attributen und deren Werten.
Damit stellt sich aber ein Problem: wie soll ein Parser im Internet eine Unterscheidung treffen zwischen gleichen Namen, die zu verschiedenen logischen Zuordnungen gehören, und aus verschiedenen XML-Instanzen zusammengesetzt werden

Angenommen, die beiden folgenden Elementgruppen kämen aus zwei verschiedenen DTDs, nämlich books und owners:

Beispiel:

<BOOK>
   <TITLE>Tauben im Gras</TITLE>
   <AUTHOR>Wolfgang Koeppen</AUTHOR>
</BOOK>
<OWNER>
   <NAME>Hans Meier</NAME>
   <TITLE>Dr.</TITLE>
</OWNER>

Das Problem wird deutlich: beide Elemente haben eine semantisch logische Bedeutung, sind aber quasi Homonyme. Der erste Tag bezieht sich auf den Buchtitel, der zweite auf den akademischen Titel des Besitzers.
Seitens einer Modellierung in einer DTD, stellt das kein Problem dar, aber wenn man das nun unterscheiden muß, was dann ?!?

Genau hier setzt der Ansatz der XML-Namensräume an:
Wer schon einmal mit einer Technologie gearbeitet hat, die auf Namensräume aufsetzt - wie bspw. XSL, XSLT oder Schema, wird das Grundprinzip kennen: es wird ein Präfix definiert, welches es ermöglicht die Namensräume der verschiedenen Elementgruppen zu unterscheiden

<books:TITLE 
     xmlns:books "http://www.jcpohl.de/tr/books">

<owners:TITLE 
     xmlns:owners "http://www.jcpohl.de/tr/owners">

Im Beispiel sähe das dann so aus:
<books:BOOK>
   <books:TITLE>Tauben im Gras</books:TITLE>
   <books:AUTHOR>Wolfgang Koeppen</books:AUTHOR>
</books:BOOK>
<owners:OWNER>
   <owners:NAME>Hans Meier</owners:NAME>
   <owners:TITLE>Dr.</owners:TITLE>
</owners:OWNER>

Anders dargestellt, steht hier also nichts anderes als:
<(http://www.jcpohl.de/tr/books)BOOK>
...
<(http://www.jcpohl.de/tr/owners)OWNERS>


Namensräume sind vererbbar, d.h. folgende Konstruktion wäre möglich:

<books:BOOK xmlns="books">
   <books:TITLE>Tauben im Gras</books:TITLE>
   <AUTHOR xmlns="">Wolfgang Koeppen</AUTHOR>
</books:BOOK>


Hier ist also das Element TITLE als Kindelement von BOOK in die Namensraumvererbung mit eingezogen, das Element AUTHOR aber nicht.

Nun würde es sich natürlich anbieten, wenn ein Parser in der Lage wäre, die verschiedenen Tags ihren DTDs entsprechend zu parsen. Dies ist aber in der XML-Namensraum Definition bisher noch nicht vorgesehen. Derzeit handelt es sich hier bei den Präfixen um Bezeichner - und nicht mehr.
Hauptgrund dafür sind die Beschränkungen, welche uns in diesem Fall DTDs auferlegen. Um dies für die Zukunft zu ermöglichen, wird beim W3C an dem Konzept der XML-Schema gearbeitet.
Die Arbeit hier ist zwar schon fortgeschritten, trotzdem derweil noch im Stadium Zukunftsmusik. Über die erweiterten Möglichkeiten von XML-Schema im Vergleich zu DTDs, gibt es mehr im Kapitel über XML-Schema (to be written soon..:-)).

 

Copyright & Kontakt
jcpohl@gmx.de
© www.jcpohl.de 1999/2000