Zwei Namensraum-Herausforderungen für Schemasprachen

(Auszug aus "XML Schema" von Eric van der Vlist)

Namensraum- Präfixe sollten nur als abkürzende lokale Ersetzungen für die URI-Verweise betrachtet werden, die die Namensräume tatsächlich identifizieren. Die folgenden Dokumente sollten von Namensraum-fähigen Anwendungen als in strengem Sinne äquivalent betrachet werden:

<?xml version="1.0"?>
<library xmlns="http://dyomedea.com/ns/library">
  <book id="b3810518883">
     <title>
       Auf den Hund gekommen
     </title>
     <authors>
       <person id="CMS">
         <name>
           Charles M. Schulz
         </name>
       </person>
     </authors>
   </book>
</library>

In dem oben stehenden Dokument wird der Namensraum "http://dyomedea.com/ns/library" als Default- Namensraum definiert. Er gilt damit für alle Elemente innerhalb des Dokuments. Als nächstes zeigen wir ein namensraum-äquivalentes, aber deutlich anders aussehendes Dokument:

<?xml version="1.0"?>
<!-- Namensraum: http://dyomedea.com/ns/library -->
<lib:library xmlns:lib="http://dyomedea.com/ns/library">
  <lib:book id="b3810518883">
    <lib:title>
      Auf den Hund gekommen
    </lib:title
    <lib:authors>
      <lib:person id="CMS">
        <lib:name>
          Charles M. Schulz
        </lib:name>
      </lib:person>
    </lib:authors>
  </lib:book>
</lib:library>

Der Namensraum "http://dyomedea.com/ns/library" wird hier so definiert, daß er auf das Präfix lib abgebildet wird. Dieses wird als Präfix für alle Elemente innerhalb des Dokuments verwendet. Als nächstes erzeugen wir ein weiteres namensraum-äquivalentes Dokument unter Verwendung eines anderen Präfix.

<?xml version="1.0"?>
<!-- Namensraum: http://dyomedea.com/ns/library -->
<l:library xmlns:l="http://dyomedea.com/ns/library">
    <l:book id="b3810518883">
        <l:title>
            Auf den Hund gekommen
        </l:title>
        <l:authors>
            <l:person id="CMS">
                <l:name>
                    Charles M. Schulz
                </l:name>
            </l:person>
        </l:authors>
    </l:book>
</l:library>

Der Namensraum "http://dyomedea.com/ns/library" wird hier so definiert, daß er auf das Präfix l abgebildet wird. Dieses wird als Präfix für alle Elemente innerhalb des Dokuments verwendet. Zum Schluß mischen wir all diese Möglichkeiten in einem einzigen Dokument, das immer noch namensraum-äquivalent mit den anderen ist:

<?xml version="1.0"?>
<!-- Namensraum: http://dyomedea.com/ns/library -->
<l:library xmlns:l="http://dyomedea.com/ns/library">
    <l:book id="b3810518883">
        <l:title>
            Auf den Hund gekommen
        </l:title>
        <l:authors>
            <l:person id="CMS">
                <l:name>
                    Charles M. Schulz
                </l:name>
            </l:person>
        </l:authors>
    </l:book>
</l:library>

Derselbe Namensraum wird als l, als lib und sogar als Default-Namensraum definiert und verwendet, je nach der Stelle innerhalb des Dokuments. Dieses letzte Beispiel ist natürlich ein Extremfall, der nicht empfehlenswert ist. Das Dokument entspricht jedoch der Namensraum-Empfehlung, und die Spezifikation besagt, daß sie mit den vorigen im strengen Sinne äquivalent ist.

DTDs kennen keine Namensräume. Da der Doppelpunkt (:) in XML-Namen zulässig ist, sind lib:person, l:person und person für eine DTD drei verschiedene gültige Namen. Darüber hinaus betrachtet eine DTD Namensraum-Deklarationsattribute (xmlns, xmlns:l, xmlns:lib) als normale Attribute, die deklariert werden müssen.

Ein XML-Dokument, das Namensräume verwendet, ist ein wohlgeformtes XML 1.0-Dokument, und es ist ohne weiteres möglich, eine DTD zu entwerfen, die das Dokument beschreibt. Dennoch müssen Sie dabei die Präfixe, die verwendet werden können, und den Ort, an dem die Namensraum-Deklarationen eingefügt werden müssen, festlegen. Dies ist nur dann akzeptabel, wenn Sie das Schreiben der Dokumente selbst unter Kontrolle haben oder aber genau festlegen können.

Das zweite, größere Problem ist der Entwurf. Da XML oft als Bindeglied zwischen verschiedenen Anwendungen fungiert, wird es immer wichtiger, modulare Vokabulare definieren zu können, die in ein und demselben Element gut miteinander auskommen. Namensräume wurden erfunden, um dies zu ermöglichen. Um die Möglichkeiten nutzbringend einzusetzen, ist häufig die Definition offener Vokabulare notwendig, die Stellen definieren, an denen externe Elemente und Attribute aus externen Namensräumen eingebunden werden können, ohne daß die Anwendungen zu Bruch gehen.

Stellen Sie sich vor, eine Marketing-Abteilung möchte der Information über ein bestimmtes Buch die Art des Einbands und die Seitenzahl hinzufügen. Ein cleverer Weg, dies zu erreichen – wenn diese neue Information nur für Marketing-Bedürfnisse relevant ist und wir bestehende Anwendungen nicht stören wollen –, besteht darin, einen neuen Namensraum zu erzeugen:

<?xml version="1.0"?>
<!-- Namensraum: http://dyomedea.com/ns/library -->
<library xmlns="http://dyomedea.com/ns/library" xmlns:mkt="http://dyomedea.com/ns/library/mkt">
    <book id="b3810518883">
        <title>
            Auf den Hund gekommen
        </title>
        <authors>
            <person id="CMS">
                <name>
                    Charles M. Schulz
                </name>
            </person>
        </authors>
        <mkt:cover>
            Paperback
        </mkt:cover>
        <mkt:pages>
            128
        </mkt:pages>
    </book>
</library>

Wenn wir unser Schema jedoch von der Marketing-Anwendung unabhängig halten wollen, benötigen wir eine flexible Methode, es zu öffnen und zu sagen: »Akzeptiere beliebige Elemente aus dem Marketing-Namensraum am Ende unseres Elements book.« Wenn es auch noch andere Anwendungen gäbe, die mit unserem Vokabular arbeiten, können wir auch angeben, daß beliebige Elemente aus beliebigen anderen Namensräumen am Ende unseres Elements book akzeptiert werden sollen.

   

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XML Schema bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2003 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML Schema" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de