Einige Seltsamkeiten einfacher Typen

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

Auch wenn einfache Typen strukturell einfach sind, bringen sie doch einige Komplikationen mit sich, auf die zu achten sich lohnt.

Achtung bei der Reihenfolge

Es kommt wesentlich auf die Reihenfolge der verschiedenen Ableitungsmethoden (Einschränkung, Auflistung oder Vereinigung) an.

Wie bereits gesehen, gehen bei der Ableitung durch Auflistung und durch Vereinigung die semantische Bedeutung der Typen und ihre Facetten verloren, die durch einen gemeinsamen Satz von Facetten mit spezifischer Bedeutung ersetzt werden (xs:length, xs:maxLength, xs:minLength, xs:enumeration und xs:whitespace für die Ableitung durch Auflistung, xs:pattern und xs:enumeration für die Ableitung durch Vereinigung).

Das bedeutet, daß alle Einschränkungen für die atomaren oder Eintragstypen vor der Ableitung durch Auflistung oder durch Vereinigung angewendet werden müssen (wie in den entsprechenden Abschnitten für die Facetten gesehen) und daß danach eine weitere Einschränkung mit Hilfe des gemeinsamen Satzes von Facetten durchgeführt werden kann.

Die Reihenfolge von Ableitung durch Auflistung und Ableitung durch Vereinigung hängt von dem Ergebnis ab, das man erreichen möchte. Eine Auflistung von Vereinigungen ist, wie man schon vermuten kann, etwas anderes als eine Vereinigung von Listen:

<xs:simpleType name="listOfUnions">
   <xs:list>
      <xs:simpleType>
         <xs:union memberTypes="xs:date xs:integer"/>
      </xs:simpleType>
   </xs:list>
</xs:simpleType>
<xs:simpleType name="UnionOfLists">
   <xs:union>
      <xs:simpleType>
         <xs:list itemType="xs:date"/>
      </xs:simpleType>
      <xs:simpleType>
         <xs:list itemType="xs:integer"/>
      </xs:simpleType>
   </xs:union>
</xs:simpleType>

Diese beiden Datentypen passen zu den folgenden Fragmenten:

<UnionOfLists>
  2001-01-01 2001-01-02
</UnionOfLists>

<UnionOfLists>
  1 2 3
</UnionOfLists>

<ListOfUnions>
  2001-01-01 2001-01-02
</ListOfUnions>

<ListOfUnions>
  1 2 3
</ListOfUnions>

<ListOfUnions>
  2001-01-01 1 2
</ListOfUnions>

Das folgende paßt jedoch nicht:

<UnionOfLists>
  2001-01-01 1 2
</UnionOfLists>

Hierbei ist erforderlich, daß alle Einträge der Liste denselben Datentyp haben.

Die Reihenfolge, in der eine Folge von Ableitungen durch Einschränkung durchgeführt wird, ist auch relevant, wenn dieselben Facetten umdefiniert werden, denn wie wir gesehen haben, gibt es dabei, abhängig von der jeweils verwendeten Facette, einige Beschränkungen.

Listen ge- oder mißbrauchen, um das Verhalten längenbeschränkender Facetten zu verändern

Wir haben gesehen, daß eine Ableitung durch Auflistung nicht nur den Werteraum der der Eintragstypen, sondern auch ihre Bedeutung beeinflußt. Wir haben auch gesehen, daß ihr Satz von Facetten durch einen allgemeinen Satz ersetzt wird.

Im Falle längenbeschränkender Facetten ist die Längeneinheit normalerweise eine Anzahl von Zeichen (im allgemeinen Fall) oder Bytes (bei binären Typen), bevor eine Ableitung durch Auflistung stattfindet. Danach wird die Längeneinheit für jeden Listen-Datentyp zu einer Anzahl Whitespace-getrennter Werte.

Eine Einschränkung der Liste erlaubt es dann, die Anzahl Whitespace-getrennter »Wörter« eines jeden Datentyps zu beschränken. Wenn wir beispielsweise einen String-Datentyp definieren wollen, der zwischen 100 und 200 Wörtern enthält, die jeweils höchstens 15 Buchstaben haben und nur die elementaren lateinischen Zeichen enthalten, können wir das wie folgt schreiben:

<xs:simpleType name="word">
   <xs:list>
      <xs:simpleType>
         <xs:restriction base="xs:string">
            <xs:maxLength value="15"/>
            <xs:pattern value="\p{IsBasicLatin}*"/>
         </xs:restriction>
      </xs:simpleType>
   </xs:list>
</xs:simpleType>
<xs:simpleType name="story">
   <xs:restriction base="word">
      <xs:minLength value="100"/>
      <xs:maxLength value="200"/>
   </xs:restriction>
</xs:simpleType>

Die erste Definition legt die Einschränkung für die Wörter fest, die zweite fügt die Beschränkung für den gesamten String hinzu, der hier als Liste von Wörtern betrachtet wird. Jedoch sollte man beachten, daß wir in diesem Beispiel keine Möglichkeit haben, eine Beschränkung für die Gesamtzahl von Zeichen in der »story« zu formulieren. Das nächste Kapitel zeigt, wie diese beiden Einschränkungen festgelegt werden können, indem man eine Reihe von Mustern für den String selbst verwendet.

   

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