Zurück zu unserer Bibliothek

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

Sehen wir uns nun an, wie mit Hilfe dessen, was wir in diesem Abschnitt gelernt haben, das Schema verbessert werden kann, indem wir Einschränkungen für unsere Datentypen hinzufügen:

<xs:element name="name" type="xs:token"/>
<xs:element name="qualification" type="xs:token"/>
<xs:element name="born" type="xs:date"/>
<xs:element name="dead" type="xs:date"/>
<xs:element name="isbn" type="xs:NMTOKEN"/>
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="available" type="xs:boolean"/>
<xs:attribute name="lang" type="xs:language"/>

Zunächst wollen wir möglicherweise die Größe des Strings begrenzen – wenn sie beispielsweise in Spalten fester Länge in einem RDBMS gespeichert werden müssen. Hier ist zu berücksichtigen, daß der Name in einen String von 32 Zeichen Länge passen muß und daß Titel und Charakterisierung in Strings der Länge 255 passen müssen. Wir erzeugen daher zwei einfache Datentypen:

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

Dann sollten nun einige Einschränkungen für die ISBN hinzugefügt werden. Das beste, was wir ohne Verwendung von Mustern (wir werden unter Reguläre Ausdrücke zur Spezifikation einfacher Datentypen sehen, wie man damit arbeitet) erreichen können, besteht darin, die Zeichenzahl mit Hilfe von xs:length auf zehn zu beschränken. Diese Facette bezieht sich auf die Anzahl von Zeichen und operiert auf dem Werteraum. Dadurch werden also Instanzen wie etwa ABCDEFGHIJ nicht ausgeschlossen, aber das ist wahrscheinlich alles, was wir in diesem Augenblick erreichen können:

<xs:simpleType name="isbn">
  <xs:restriction base="xs:NMTOKEN">
    <xs:length value="10"/>
  </xs:restriction>
</xs:simpleType>

Auch die Sprachen, in denen die Titel angegeben werden können, sollen nun eingeschränkt werden. Wenn unsere Bibliothek nur Titel auf Englisch und auf Deutsch umfaßt, können wir die folgende Einschränkung hinzufügen:

<xs:simpleType name="supportedLanguages">
  <xs:restriction base="xs:language">
   <xs:enumeration value="en"/>
   <xs:enumeration value="de"/>
  </xs:restriction>
</xs:simpleType>

Unser neues Schema sieht dann so aus:

<?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: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:element name="name" type="string32"/>
   <xs:element name="qualification" type="string255"/>
   <xs:element name="born" type="xs:date"/>
   <xs:element name="dead" type="xs: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="author">
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="born"/>
            <xs:element ref="dead" minOccurs="0"/>
         </xs:sequence>
         <xs:attribute ref="id"/>
      </xs:complexType>
   </xs:element>
   <xs:element name="book">
      <xs:complexType>
         <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="id"/>
         <xs:attribute ref="available"/>
      </xs:complexType>
   </xs:element>
   <xs:element name="character">
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="born"/>
            <xs:element ref="qualification"/>
         </xs:sequence>
         <xs:attribute ref="id"/>
      </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