Folgendes Problem:
ich habe ein Basiselement B
zwei Subtypen X und Y
Das Basis-Element B definiert, dass es ein Attribut "align" geben soll.
Dieses "align"-Attribut ist von einem Typ, der eine Aufzählung ist.
Kurz skizziert:
<xs:complexType name="B" abstract="true">
<xs:complexContent>
<xs:attribute name="align" type="alignmentType" />
</xs:complexContent>
</xs:complexType>
<xs:complexType name="X">
<xs:complexContent>
<xs:extension base="B">
<xs:attribute name="foo" type="xs:integer"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Y">
<xs:complexContent>
<xs:extension base="B">
<xs:attribute name="bar" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:simpleType name="alignmentType">
<xs:restriction base="xs:string">
<xs:enumeration value="TOP"/>
<xs:enumeration value="RIGHT"/>
<xs:enumeration value="BOTTOM"/>
<xs:enumeration value="LEFT"/>
</xs:restriction>
</xs:simpleType>
Soweit so gut.
Nun möchte ich aber, dass nur bei Typ Y die Auswahl für "align" auf "LEFT"
und "RIGHT" begrenzt wird und stehe etwas auf dem Schlauch.
(Bitte keine Diskussion darum, ob man nun "align" in "hAlign" und "vAlign"
trennen sollte, ich wollte das Problem lediglich in ein lesbares Beispiel
bringen).
Gruß,
-Wanja-
--
Erstellt mit Operas revolutionärem E-Mail-Modul: http://www.opera.com/mail/
Hallo:
[..]
> Nun möchte ich aber, dass nur bei Typ Y die Auswahl für "align" auf
> "LEFT" und "RIGHT" begrenzt wird und stehe etwas auf dem Schlauch.
[..]
Ich habe übrigens eine Lösung gefunden, die ich aber nicht wirklich
zufriedenstellend finde:
<xs:complexType name="intermediateY" abstract="true">
<xs:complexContent>
<xs:extension base="B">
<xs:attribute name="bar" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Y">
<xs:complexContent>
<xs:restriction Base base="intermediateY">
<xs:attribute name="align"/>
<xs:simpleType>
<xs:restriction base="alignmentType">
<xs:enumeration value="LEFT" />
<xs:enumeration value="RIGHT" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
Aber einen Zwischentyp einzusetzen finde ich nicht wirklich gelungen,
zumal es die ganze Sache unnötig komplex macht.
Wenn also jemand eine bessere Lösung hat: immer her damit.