Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Einschränkung von Attribut in Subtyp

0 views
Skip to first unread message

Wanja Gayk

unread,
Oct 19, 2009, 4:36:38 AM10/19/09
to

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/

Wanja Gayk

unread,
Oct 19, 2009, 5:50:06 AM10/19/09
to
Am 19.10.2009, 10:36 Uhr, schrieb Wanja Gayk <brixo...@yahoo.com>:

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.

0 new messages