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.