Vereinfachung der Bibliothek

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

Unsere Bibliothek mit ihrem einen Instanzdokument (siehe Kapitel Unser erstes Schema) hat eine Redefinition nicht wirklich verdient, und daher werden wir nur Inklusion verwenden, um einfache und komplexe Typdefinitionen in eigene Schemas auszulagern, um die Schemas kürzer zu halten. Dazu können wir ein Teilschema erzeugen, das all unsere einfachen Typen definiert:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:simpleType name="string255">
      <xs:restriction base="xs:token">
         <xs:maxLength value="255"/>
      </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="string32">
      <xs:restriction base="xs:token">
         <xs:maxLength value="32"/>
      </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="isbn">
      <xs:restriction base="xs:NMTOKEN">
         <xs:length value="10"/>
         <xs:pattern value="[0-9]{9}[0-9X]"/>
      </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="bookID">
      <xs:restriction base="xs:ID">
         <xs:pattern value="b[0-9]{9}[0-9X]"/>
      </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="supportedLanguages">
      <xs:restriction base="xs:language">
         <xs:enumeration value="en"/>
         <xs:enumeration value="de"/>
      </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="date">
      <xs:restriction base="xs:date">
         <xs:pattern value="[^:Z]*"/>
      </xs:restriction>
   </xs:simpleType>
</xs:schema>

Wir können dann ein zweites Schema erzeugen, das alle komplexen Typdefinitionen enthält. Dieses zweite Schema braucht die einfachen Typdefinitionen nicht einzubinden, weil diese direkt in das Hauptschema eingebunden werden:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:complexType name="elementWithID">
      <xs:attribute ref="id"/>
   </xs:complexType>
   <xs:complexType name="bookTmp">
      <xs:complexContent>
         <xs:extension base="elementWithID">
            <xs:sequence>
               <xs:element ref="isbn"/>
               <xs:element ref="title"/>
               <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
               <xs:element ref="character" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute ref="available"/>
         </xs:extension>
      </xs:complexContent>
   </xs:complexType>
   <xs:complexType name="personType">
      <xs:complexContent>
         <xs:extension base="elementWithID">
            <xs:sequence>
               <xs:element ref="name"/>
               <xs:element ref="born"/>
               <xs:element ref="dead" minOccurs="0"/>
               <xs:element ref="qualification" minOccurs="0"/>
            </xs:sequence>
         </xs:extension>
      </xs:complexContent>
   </xs:complexType>
</xs:schema>

Alle übrigen Definitionen werden im Hauptschema belassen, das (unter Verwendung von xs:include) die Schemas einbindet, die die Definitionen der einfachen bzw. der komplexen Typen enthält:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:include schemaLocation="simpleTypes.xsd"/>
   <xs:include schemaLocation="complexTypes.xsd"/>
   <xs:element name="name" type="string32"/>
   <xs:element name="qualification" type="string255"/>
   <xs:element name="born" type="date"/>
   <xs:element name="dead" type="date"/>
   <xs:element name="isbn" type="isbn"/>
   <xs:attribute name="id" type="xs:ID"/>
   <xs:attribute name="available" type="xs:boolean"/>
   <xs:attribute name="lang" type="supportedLanguages"/>
   <xs:element name="title">
      <xs:complexType>
         <xs:simpleContent>
            <xs:extension base="string255">
               <xs:attribute ref="lang"/>
            </xs:extension>
         </xs:simpleContent>
      </xs:complexType>
   </xs:element>
   <xs:element name="library">
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="book" maxOccurs="unbounded"/>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
   <xs:element name="book">
      <xs:complexType>
         <xs:complexContent>
            <xs:restriction base="bookTmp">
               <xs:sequence>
                  <xs:element ref="isbn"/>
                  <xs:element ref="title"/>
                  <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
                  <xs:element ref="character" minOccurs="0" maxOccurs="unbounded"/>
               </xs:sequence>
               <xs:attribute name="id" type="bookID"/>
               <xs:attribute ref="available"/>
            </xs:restriction>
         </xs:complexContent>
      </xs:complexType>
   </xs:element>
   <xs:element name="author">
      <xs:complexType>
         <xs:complexContent>
            <xs:restriction base="personType">
               <xs:sequence>
                  <xs:element ref="name"/>
                  <xs:element ref="born"/>
                  <xs:element ref="dead" minOccurs="0"/>
               </xs:sequence>
               <xs:attribute ref="id"/>
            </xs:restriction>
         </xs:complexContent>
      </xs:complexType>
   </xs:element>
   <xs:element name="character">
      <xs:complexType>
         <xs:complexContent>
            <xs:restriction base="personType">
               <xs:sequence>
                  <xs:element ref="name"/>
                  <xs:element ref="born"/>
                  <xs:element ref="qualification"/>
               </xs:sequence>
               <xs:attribute ref="id"/>
            </xs:restriction>
         </xs:complexContent>
      </xs:complexType>
   </xs:element>
</xs:schema>

   

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