Ableitung durch Vereinigung

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

Ableitung durch Vereinigung erlaubt es, Datentypen zu definieren, indem die lexikalischen Räume mehrerer vordefinierter oder benutzerdefinierter Datentypen zusammengefaßt werden.

Wie wir bei der Ableitung durch Auflistung bereits gesehen haben, hat W3C XML Schema auch hier zwei Schreibweisen definiert, die beide das Element xs:union verwenden, das sowohl eine Definition durch Verweis auf existierende Typen als auch durch eine eingebettete Typdefinition erlaubt. In diesem Fall können die beiden Schreibweisen gemischt auftreten. Die Definition eines Vereinigungs-Datentyps durch Verweis auf existierende Typen geschieht durch das Attribut memberType, das eine Whitespace-getrennte Liste von Datentypen enthält:

<xs:simpleType name="integerOrData">
   <xs:union memberTypes="xs:integer xs:date"/>
</xs:simpleType>

Die Definition eines Vereinigungs-Datentyps kann auch erreicht werden, indem man ein oder mehrere <xs:simpleType>-Elemente einbettet:

<xs:simpleType name="myIntegerUnion">
  <xs:union>
    <xs:simpleType>
      <xs:restriction base="xs:integer"/>
    </xs:simpleType>
    <xs:simpleType>
      <xs:restriction base="xs:NMTOKEN">
         <xs:enumeration value="undefined"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:union>
</xs:simpleType>



Beide Stillvarianten können vermischt werden; daher kann das Beispiel von eben auch so geschrieben werden:

<xs:simpleType name="myIntegerUnion">
  <xs:union memberTypes="xs:integer">
    <xs:simpleType>
      <xs:restriction base="xs:NMTOKEN">
        <xs:enumeration value="undefined"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:union>
</xs:simpleType>

Der resultierende Datentyp ist eine Mischung, die – als Ganzes betrachtet – die semantische Bedeutung und die Facetten ihrer Eintragstypen verloren hat. In dem Beispiel von eben könnten wir den Typ myIntegerUnion nicht dergestalt einschränken, daß er nur Werte bis 100 oder den undefinierten Datenwert akzeptiert, außer indem wir ein Muster angeben. Hierzu können wir jedoch zunächst einen Typ durch Einschränkung von einem eingebauten Typ so ableiten, daß er nur Werte bis 100 aufnimmt, und die Vereinigung erst anschließend durchführen, damit auch der Wert »undefined« zugelassen wird. Die einzigen beiden Facetten, die auf einen Vereinigungs-Datentyp angewendet werden können, sind xs:pattern und xs:enumeration.

Diese beiden Facetten sind die beiden einzigen, die fast alle Datentypen gemeinsam kennen. Die einzige Ausnahme bildet die Tatsache, daß xs:enumeration für xs:boolean nicht zulässig ist. Die Definition einer »Dummy«-Vereinigung über einen xs:boolean könnte eine Umgehungsstrategie sein, um eine xs:enumeration-Facette über diesem Typ zu erlauben.

   

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