Einschränkung von Attribut in Subtyp

19/10/2009 - 10:36 von Wanja Gayk | Report spam
Hallo.

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/
 

Lesen sie die antworten

#1 Wanja Gayk
19/10/2009 - 11:50 | Warnen spam
Am 19.10.2009, 10:36 Uhr, schrieb Wanja Gayk :

Hallo:

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>



[..]
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.

Gruß,
-Wanja-

Erstellt mit Operas revolutionàrem E-Mail-Modul: http://www.opera.com/mail/

Ähnliche fragen