Namensräume (Namespaces)
Namensräume sind eine Neuerung der XML-Spezifikation. Die Benutzung von
Namensräumen ist in XML nicht notwendig, oftmals aber sehr nützlich.
Namensräume sind eingeführt worden, um die Eindeutigkeit unter XML-Elementen
sicherzustellen.
<?xml version="1.0" standalone="no"?> <!DOCTYPE Springer:Books SYSTEM "sample.dtd"> <!-- Hier beginnen die XML-Daten --> <Springer:Books xmlns:Springer='http://www.springer.com/'> <Springer:Product>XML in der Praxis</Springer:Product> <Springer:Price>299.90</Springer:Price> </Springer:Books> |
Quelltext im Browser
Man beachte, dass diese Elemente, infolge der Benutzung von Namensräumen,
ein wenig anders aussehen als solche XML-Elemente, die in den vorherigen Kapiteln
gezeigt wurden. Jedes Element-Tag kann in zwei Teile zerlegt werden: In den
Namensraum-Teil vor dem Doppelpunkt und den eigentlichen Namen des Tags nach
dem Doppelpunkt.
Nehmen wir zum Beispiel an, dass das Element <Springer:Books> nur einfach
<Books> genannt wird. Überlegt man nun weiter, so wäre es kaum
verwunderlich, wenn ein anderer Verleger ebenfalls sein eigenes <Books>-Element
in seinen eigenen Dokumenten erzeugt. Falls diese zwei Verleger sich aber nun
zusammenschließen und gemeinsame Dokumente herausgeben wollen, würde
eine einzige Definition für das <Books>-Tag unmöglich werden.
Falls zwei XML-Dokumente mit identischen Elementen unterschiedlicher Herkunft
zusammengeführt werden, so kommt es zu Störungen, weil diese Elemente
kollidieren. Namensräume helfen durch die Bereichserweiterung jedes Tags,
Element-Kollisionen zu vermeiden.
Im oben angeführten Beispiel ist jedes Tag mit dem Namensraum Springer
versehen. Namensräume werden mit dem Attribut
xmlns:Name=Zeichenkette
deklariert, wobei der Name die ID des Namensraums definiert. Der Attributwert
ist ein eindeutiger Identifier, der sich von allen anderen Namensräumen
unterscheidet; die Benutzung eines URI wird empfohlen. Im obigen Beispiel wird
der URI http://www.springer.com/ als Default-Namensraum benutzt, was Eindeutigkeit
garantieren sollte. Eine Namensraum-Deklaration kann als Attribut jedes Elements
auftauchen, solange die Benutzung dieses Namensraum innerhalb des Start- und
Ende-Tags dieses Elements beschränkt bleibt.