Quantifizierung

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

Einer oberflächlichen Ähnlichkeit zum Trotz interpretiert die Facette xs:pattern ihr Wert-Attribut ganz anders, als xs:enumeration dies tut. xs:enumeration liest den Wert als lexikalische Darstellung und wandelt diese in den dem Basis-Datentyp gemäßen Wert um. xs:pattern liest den Wert hingegen als eine Menge von Bedingungen, die für die lexikalischen Werte gelten müssen. Wenn wir

<xs:pattern value="15"/>

schreiben, geben wir drei Bedingungen an (erstes Zeichen ist »1«, zweites Zeichen ist »5«, dann muß der String zu Ende sein). Jede der Bedingungen (also zum Beispiel: erstes Zeichen ist »1«, oder: zweites Zeichen ist »5«) wird »Stück« genannt. Dies ist nur die einfachste Form, mit der ein Stück angegeben werden kann.

Jedes Stück in einem Muster besteht aus einem Atom, das ein Zeichen identifiziert, oder einer Menge von Zeichen sowie aus einem optionalen Quantifier. Zeichen (außer Sonderzeichen, denen das Escape-Zeichen vorangestellt werden muß) sind die einfachste Form von Atomen. In unserem Beispiel haben wir die Quantifier ausgelassen. Quantifier können auf zwei verschiedene Weisen definiert werden: entweder mit einem Sonderzeichen ( * für 0 oder mehr, + für 1 oder mehr, ? für 0 oder 1) oder aber als Zahlbereich in geschweiften Klammern ( {n} steht für genau n -mal, {n,m} für n - bis m -mal (einschließlich) oder {n,} für n -mal oder mehr).

Mit Hilfe dieser Quantifier können wir unsere drei Muster als ein einziges darstellen:

<xs:simpleType name="myByte">
  <xs:restriction base="xs:byte">
    <xs:pattern value="1?5?"/>
  </xs:restriction>
</xs:simpleType>

Dieses neue Muster bedeutet, daß es null oder ein Zeichen »1« geben muß, gefolgt von null oder einem Zeichen »5«. Dies ist nicht gleichbedeutend zu unseren früheren drei Mustern, denn der leere String »« wird von dem neuen Muster akzeptiert. Da der leere String jedoch nicht zum lexikalischen Raum unseres Basistyps ( xs:byte ) gehört, hat der neue Datentyp denselben lexikalischen Raum wie der frühere.

Wir könnten auch Quantifier verwenden, um die Anzahl führender Nullen zu beschränken. Beispielsweise beschränkt das folgende Muster die Anzahl führender Nullen auf maximal zwei:

<xs:simpleType name="myByte">
  <xs:restriction base="xs:byte">
    <xs:pattern value="0{0,2}1?5?"/>
  </xs:restriction>
</xs:simpleType>

   

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