next up previous contents
Nächste Seite: 2.7 Techniken zur Wiederverwendung Aufwärts: 2 XML Schema Vorherige Seite: 2.5 Definition komplexer Datentypen   Inhalt


2.6 Namensräume

Um die Wiederverwendbarkeit und Kombinationsmöglichkeiten einmal geschriebener Schemata zu erhöhen, müssen diese über eindeutige Bezeichnungen verfügen. Erst dadurch wird gewährleistet, dass bei der Benutzung fremder Elemente nicht eigene Definitionen zerstört werden, weil beispielsweise Elemente gleichen Namens verwendet wurden. Um diese Bedingungen zu erfüllen, sind Namensräume eingefügt worden. Ein Namensraum ist vergleichbar mit dem Namen eines Java-Paketes, zu dem verschiedene Elemente bzw. Klassen gehören. Allerdings ist im Unterschied dazu der Namensraum eine reine Identifikationsbezeichnung, während der Paketname auch Informationen zu der Verzeichnisstruktur der Klassen liefert. Um die Eindeutigkeit zu gewährleisten, ist es aber üblich eine eigene URL anzugeben. Namensräume sind eine XML-weite Erfindung [W3CXMLNS] um verschiedene XML-Anwendungen voneinander zu unterscheiden. Gerade die Verwendung von Namensräumen innerhalb von XML Schema stellen einen großen Vorteil im Vergleich zu einer DTD dar, vgl. [Vli2002, S.153 ff.]. XML Schema benutzt für jedes Element einen Namensraum. Dieser kann entweder explizit angegeben oder durch einmalige Angabe als Standardnamensraum für alle Elemente festgesetzt werden. Nur durch die Vergabe von Namensräumen können die benutzten Elemente überhaupt identifiziert und damit ein Dokument als gültig validiert werden. Schon in der Vorlage für XML-Schema-Dokumente auf Seite [*] wurde durch den Namensraum die Schemadefinition vom W3C identifiziert. Es ist damit genau festgelegt um welche Elemente es sich handelt und das Dokument kann anhand dieses Namensraumes als gültige XML-Anwendung validiert werden. Der Namensraum eines Elementes oder auch Attributes wird durch das xmlns-Attribut (XML-NameSpace) festgelegt. Wird direkt in einem Element per xmlns-Attribut auf einen Namensraum verwiesen, so gilt dieser Namensraum für das Element und alle seine Kinderelemente. Nur wenn ein Kindelement auf einen neuen Namensraum referenziert, so wird diese Vererbungsachse unterbrochen. Mit dieser Regel spart man sich grundsätzlich eine Menge Schreibarbeit, allerdings wird es somit auch nötig sein immer wieder den Namensraum zu ändern. Um dies zu erleichtern, lassen sich Präfixe vergeben, die als abkürzende Schreibweise gedacht sind. Mittels dieses Zusatzes an dem xmlns-Attribut, getrennt durch einen Doppelpunkt, wird diese Abkürzung definiert.

Beispiel 2.6.1:
Mit xmlns:xs="http://www.w3.org/2001/XMLSchema" lässt sich der Namensraum für die Schemadefinition mit xs: abkürzen, wie das in den vorherigen Beispielen schon geschehen und auch allgemein üblich ist. Dennoch ist diese Abkürzung beliebig wählbar und statt xs könnte auch schema oder irgendeinwort benutzt werden.

Der aktuelle Namensraum, für den die Elemente eines Schemas geschrieben werden, kann durch die Verwendung des targetNamespace-Attributes in dem schema-Tag für alle Elemente gesetzt werden. Ob dieser aber auch der Namensraum ist, in dem die Elemente geschrieben werden, hängt von dem xmlns-Attribut ab. Ist dieses mit dem targetNamespace identisch, so brauchen für die Elemente keine Präfixe benutzt werden. Weichen die Namensräume voneinander ab, so sind sie mittels eines Präfixes voneinander abzugrenzen und darüber erreichbar. Beispiel 2.6.2:
Ein Schema, das den Namensraum http://www.aktuellerRaum.de beschreibt und in dem die drei Elemente Name, Stadt und Adresse definiert werden, muss sich aber nicht in dem aktuellen Namensraum befinden. Der beschreibende Namensraum ist hier mit dem Präfix akt versehen und die Elemente müssen somit auch bei Referenzierungen aufeinander dieses Präfix benutzen, um wiedergefunden zu werden. Der aktuelle Namensraum, der hier ohne Präfix angesprochen werden kann, ist der der Schemabeschreibung, nämlich http://www.w3.org/2001/XMLSchema. Deshalb konnten hier alle Elemente, die aus der Schemadefinition stammen, ohne ein Präfix, wie in den Beispielen zuvor geschehen, benutzt werden.
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://www.aktuellerRaum.de" 
           xmlns:akt="http://www.aktuellerRaum.de" 
           xmlns="http://www.w3.org/2001/XMLSchema">
  <element name="Name" type="string"/>  
  <element name="Stadt" type="string"/>
  <element name="Adresse">  
    <complexType>
      <all>
        <element ref="akt:Name"/>
        <element ref="akt:Stadt"/>
      </all>
    </complexType>
  </element>
</schema>
Es können beliebig viele Namensräume angegeben und deren Elemente benutzt werden. Es gibt aber auch die Möglichkeit auf einen Namensraum zu verzichten, um beim Zusammenfügen mehrerer Schemata einen einheitlichen Namensraum verwenden zu können. Dazu besteht die Möglichkeit Elemente und auch Attribute als unqualified zu deklarieren und sie damit keinem Namensraum zuzuordnen. Der für ein Schema zu benutzende Standard kann durch die elementFromDefault- und attributeFromDefault-Attribute des Schema-Tags auf qualified bzw. unqualified gesetzt werden. Dennoch lässt sich das für jedes Element oder Attribut in seiner Definition ändern. In den meisten Fällen ist es üblich Elemente als qualified festzulegen, um sie eindeutig einem Namensraum zuzuordnen. Attribute werden häufig als unqualified festgelegt, da sie stets in Zusammenhang mit einem Element auftreten. Da Elemente meistens einen Namensraum besitzen, ist für Attribute selber kein eigener Namensraum zwingend notwendig. Für globale Elemente und Attribute erübrigt sich diese Frage sowieso, da diese immer qualified sein müssen.
next up previous contents
Nächste Seite: 2.7 Techniken zur Wiederverwendung Aufwärts: 2 XML Schema Vorherige Seite: 2.5 Definition komplexer Datentypen   Inhalt
Tanja Schniederberend 2003-06-11