Alles über XML & Co. (XML Schema, XSLT, XPath, XQuery)

Sonntag, April 24, 2005

Inverse Vererbung

Folgendes Problem: Sie definieren in XML Schema einen einfachen Typen (simpleType) namens seqA, welcher als Inhalt beliebige Zeichenfolgen bestehend aus dem Buchstaben "A" bzw. "a" zulässt. Nun möchten Sie den Typen erweitern, so dass auch "B" bzw. "b" als Zeichen erlaubt ist. Sie möchten nun also einen Typen seqAB von seqA ableiten, z.B. wie folgt:


<xs:simpleType name="seqA">
<xs:restriction base="xs:string">
<xs:pattern value="[A|a]+"/>
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="seqAB">
<xs:restriction base="seqA">
<xs:pattern value="[A|a|B|b]+"/>
</xs:restriction>
</xs:simpleType>

Der Typ seqAB hat jedoch nicht den gewünschten Wertebereich. Da er von Typ seqA erbt, wird auch dessen restriction vererbt, so dass für Typ seqAB zwei Einschränkungen gelten: [Aa]+ und [AaBb]+, faktisch also [Aa]+. Eine Erweiterung mittels extension ist bei einfachen Typen leider nicht möglich. Die Lösung kann daher nur sein, die Vererbungshierarchie auf den Kopf zu stellen und Typ seqA von Typ seqAB abzuleiten:


<xs:simpleType name="seqA">
<xs:restriction base="seqAB">
<xs:pattern value="[A|a]+"/>
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="seqAB">
<xs:restriction base="xs:string">
<xs:pattern value="[A|a|B|b]+"/>
</xs:restriction>
</xs:simpleType>

1 Comments:

Blogger Martin Szugat said...

Dieser Post wurde von einem Blog-Administrator entfernt.

6:05 PM

 

Kommentar veröffentlichen

Links to this post:

Link erstellen

<< Home