Die einfachsten möglichen Muster

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

In ihrer einfachsten Form können Muster als Aufzählungen verwendet werden, die auf den lexikalischen statt auf den Werteraum angewendet werden.

Wenn wir beispielsweise einen Bytewert haben, der nur die Werte »1«, »5« oder »15« annehmen kann, besteht die klassische Methode zur Definition eines solchen Datentyps darin, die Facette xs:enumeration zu verwenden:

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

Dies ist die »normale« Methode, diesen Datentyp zu definieren, wenn er zum lexikalischen und zum Werteraum eines xs:byte paßt. Sie gibt die Flexibilität, Instanzdokumente mit Werten wie »1«, »5« und »15«, aber auch »01« oder »0000005« zu akzeptieren. Eine der Besonderheiten von xs:pattern besteht nun jedoch darin, daß keine weitere Facette den lexikalischen Raum einschränken darf. Bei einer Anwendung, die durch führende Nullen gestört wird, können wir Muster statt Aufzählungen verwenden, um unseren Datentyp zu definieren:

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

Dieser neue Datentyp leitet sich immer noch von xs:byte ab und hat die Semantik eines Byte, sein lexikalischer Raum ist nun jedoch so eingeschränkt, daß er nur noch »1«, »5« und »15« akzeptiert und alle Varianten ausschließt, die denselben Wert, aber eine unterschiedliche lexikalische Darstellung haben.

Hier liegt ein wichtiger Unterschied zu den regulären Ausdrücken von Perl vor, auf denen die Muster von W3C XML Schema aufbauen. Ein Perl-Ausdruck wie /15/ paßt auf jeden String, der »15« enthält, während das Muster im Rahmen von W3C XML Schema nur auf den String paßt, der genau »15« lautet. Der zu diesem Muster äquivalente Perl-Ausdruck ist /^15$/ .

Dieses Beispiel ist mit Bedacht so gewählt worden, daß keines der Metazeichen auftritt, die innerhalb von Mustern verwendet werden können, nämlich ».« »\« »?« »*« »+« »{« »}« »(« »)« »[« »]«. Die Bedeutung dieser Zeichen wird später in diesem Kapitel noch erläutert. Im Moment müssen wir nur wissen, daß jedem dieser Zeichen ein »\« als »Escape-Zeichen« vorangestellt werden muß, damit es buchstäblich verstanden wird. Um beispielsweise einen ähnlichen Datentyp wie eben zu definieren, wenn der lexikalische Raum einer Dezimalzahl auf »1« und »1.5« eingeschränkt werden soll, schreibt man:

<xs:simpleType name="myDecimal">
  <xs:restriction base="xs:decimal">
    <xs:pattern value="1"/>
    <xs:pattern value="1\.5"/>
  </xs:restriction>
</xs:simpleType>

Eine häufige Fehlerursache liegt darin, daß »normalen« Zeichen kein Escape-Zeichen vorangestellt wurde. Wir werden später sehen, daß ein vorangestelltes »\« die Bedeutung ändert. (Beispielsweise paßt »\P« auf alle Unicode-Interpunktionszeichen, nicht aber auf den Buchstaben »P«.)

   

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