Import von Schemas ohne Namensräume

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

Wir haben gesehen, wie man Komponenten aus anderen Namensräumen referenzieren kann und wie die Elemente und Attribute, die in diesen Komponenten enthalten sind, ihren vollständigen Namen, ihre Namensräume und ihre Form beibehalten (siehe »Qualifizieren oder nicht – das ist hier die Frage«). Dieser Mechanismus hat jedoch eine Einschränkung: Man kann nur globale Elemente und Attribute referenzieren, und diese globalen Elemente und Attribute müssen stets qualifiziert sein.

Die einzige Lösung für den Import von Elementen und Attributen ohne Namensraum besteht daher darin, ein Schema ohne Ziel-Namensraum zu importieren. Nehmen wir an, wir wollten ein Dokument beschreiben, in dem das Vokabular zur Beschreibung von Personen keinen Namensraum hat:

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

Der Import des Schemas ohne Namensraum geschieht genau so, wie wir es früher bei Schemas mit Ziel-Namensräumen kennengelernt haben, außer daß nun das Attribut namespace weggelassen wird. Außerdem muß man beachten, daß der Default-Namensraum (präfixlos) zur Verfügung stehen muß, wenn man die Komponenten aus dem eingebundenen Schema referenzieren können will:

<?xml version="1.0"?>
<xs:schema targetNamespace="http://dyomedea.com/ns/library" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:lib="http://dyomedea.com/ns/library" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:import schemaLocation="very-simple-2-ns-ppl-nons.xsd"/>
   <xs:element name="library">
      <xs:complexType>
         <xs:sequence>
            <xs:element name="book" type="lib:bookType"/>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
   <xs:complexType name="bookType">
      <xs:sequence>
         <xs:element name="title" type="xs:string"/>
         <xs:element name="authors">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="person"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID" use="required"/>
   </xs:complexType>
</xs:schema>

Das eingebundene Schema lautet:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="person" type="personType"/>
   <xs:complexType name="personType">
      <xs:sequence>
         <xs:element name="name" type="xs:string"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID" use="required"/>
   </xs:complexType>
</xs:schema>

In diesem Fall werden alle Komponenten als unqualifiziert betrachtet. Das gesamte übrige Verhalten, einschließlich des Unterschieds bei Verweisen auf Elemente oder Attribute und der Verwendung von Datentypen, ist relevant.

Wir sehen also, daß wir uns bei der Definition unqualifizierter Elemente und Attribute in einem Schema mit Ziel-Namensraum entscheiden müssen, ob wir sie lokal in dem Schema definieren oder ob wir sie in einem eigenen Schema ohne importierten Ziel-Namensraum definieren.

   

<< 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