• +49-(0)721-402485-12
Ihre Experten für XML, XQuery und XML-Datenbanken

Namensräume

Wie bereits erläutert wurde, kann man mit XML verschiedenste Vokabulare definieren. Natürlich möchte man diese auch kombinieren können, um zum Beispiel in einem Vokabular zur Beschreibung von Verträgen auch XHTML-Formatierungen verwenden zu können. Falls nun in den zu kombinierenden Vokabularen dieselben Namen für Elemente oder Attribute verschiedener Bedeutung verwendet werden, könnte es zu Konflikten kommen.

Um dieser Problematik gerecht zu werden, hat das W3C schon bald nach der Verabschiedung der XML-Empfehlung unter dem Namen "Namespaces in XML" eine weitere Empfehlung herausgegeben, die beschreibt, wie man Definitionen verschiedener Vokabulare dadurch sicher voneinander trennen kann, dass man sie verschiedenen Namensräumen zuordnet.

Ein Namensraum ist zunächst einmal durch eine URI, also einen weltweit eindeutigen Schlüssel, gegeben. Insbesondere kann es sich hierbei auch um eine URL handeln. Es ist jedoch nicht definiert, dass eine solche URL auf irgendein bestimmtes Ziel zeigen muss.

Für einen Namensraum kann in einem Dokument ein Kürzel definiert werden. Alle Element- und Attributnamen, die dieses Kürzel als Präfix haben, gehören zu diesem Namensraum. In diesem Zusammenhang wird der Begriff qualifizierter Name definiert: Ein qualifizierter Name besteht aus einem (optionalen) Präfix und einem lokalen Namen. Wenn ein Präfix existiert, ist es vom lokalen Namen durch einen Doppelpunkt getrennt. Weder das Präfix noch der lokale Name dürfen einen Doppelpunkt enthalten. Die Definition erfolgt mit einem Attribut, dessen Name mit xmlns: beginnt und mit dem zu definierenden Präfix endet. Diese Bindung des Präfixes an einen Namensraum gilt in dem Element, in dem sie auftritt, und in allen Nachkommen dieses Elementes, sofern sie nicht überschrieben wird:

<klinik:Arzt xmlns:klinik="http://www.xquery-buch.de/klinik.xsd">
<klinik:Name>
<klinik:Vorname>Benjamin</klinik:Vorname>
<klinik:Nachname>Naumann</klinik:Nachname>
</klinik:Name>
</klinik:Arzt>

Wird in einem inneren Element eine neue Definition für dasselbe Präfix vorgenommen, gilt diese in diesem Element und seinen Nachfolgern. Nicht das gewählte Kürzel, sondern der entsprechende Namensraum ist relevant. Folgendes XML-Fragment ist daher völlig äquivalent:

<k:Arzt xmlns:k="http://www.xquery-buch.de/klinik.xsd">
<k:Name>
<k:Vorname>Benjamin</k:Vorname>
<k:Nachname>Naumann</k:Nachname>
</k:Name>
</k:Arzt>

Leider sind DTDs auf die Verwendung von Namensräumen nicht eingerichtet, so dass man in einer DTD ein Präfix auswählen muss, mit dem man die Namen bei der Definition versieht. Ein Dokument, das dann ein anderes Präfix verwendet, validiert gegen diese DTD leider nicht. Mit XML Schema werden wir eine Schemabeschreibungsmöglichkeit kennenlernen, die Namensräume kompetent behandelt.

Ein Namensraum kann auch als Vorbelegung definiert werden ("default namespace") und gilt dann für alle nicht mit einem Präfix versehenen Elementnamen in seinem Gültigkeitsbereich, nicht jedoch für Attributnamen. Dies geschieht durch ein xmlns-Attribut. Das folgende XML-Fragment ist daher äquivalent zu dem obigen: Auch hier gehören alle Elementnamen zu demselben Namensraum.

<Arzt xmlns="http://www.xquery-buch.de/klinik.xsd">
<Name>
<Vorname>Benjamin</Vorname>
<Nachname>Naumann</Nachname>
</Name>
</Arzt>

Die Eindeutigkeit von Attributen innerhalb eines Elementes muss unter Berücksichtigung der hinter den Kürzeln stehenden Namensräume gewahrt bleiben. Alle Elemente namens "falsch" im folgenden Beispieldokument verletzen daher die Eindeutigkeitsbedingung für Attribute und führen dazu, dass das Dokument nicht wohlgeformt ist.

<Beispiel xmlns="http://www.xquery-buch.de"
xmlns:b1="http://www.xquery-buch.de"
xmlns:b2="http://www.xquery-buch.de">
xmlns:b3="http://www.xquery-buch.de/klinik.xsd">
<falsch a="1" a="2"/>
<richtig a="1" b="2"/>
<richtig a="1" b1:a="1"/><!-- Vorbelegung des Namensraums gilt nicht für Attribute -->
<falsch b1:a="1" b2:a="2"/>
<richtig a="1" b3:a="1" b1:a="1"/>
</Beispiel>

 

Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)

<< zurückvor >>