Ich möchte eine XSD definieren, die ein Element bestimmte Kinder in Bezug auf einen seiner Attributwert haben kann. Diese Attributwerte werden mit mehreren xsd:enumeration
definiert.XSD Restriction Tag Inhalt in Abhängigkeit von Attributwert
Hier ist, wie mein XML sein kann:
<root>
<Conversion type="Phys" />
<Conversion type="Fact">
<Factor>13</Factor>
<Offset>37</Offset>
</Conversion>
<Conversion type="List">
<Item>
<Key>0</Key>
<Value>KEY_0</Value>
</Item>
<Item>
<Key>1</Key>
<Value>KEY_1</Value>
</Item>
</Conversion>
</root>
Bisher habe ich es geschafft, die Conversion
Tag zu beschränken nur diese drei Attribute haben und nur diese drei Sequenzen als Kinder (Factor
/Offset
; Item
Liste ; nichts). Hier
ist ein bisschen meine XSD:
<xs:element name="Conversion">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element name="Item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Key" type="xs:decimal" />
<xs:element name="Value" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:sequence>
<xs:element name="Factor" type="xs:double" />
<xs:element name="Offset" type="xs:double" />
</xs:sequence>
<xs:sequence />
</xs:choice>
<xs:attribute name="Type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Fact" />
<xs:enumeration value="List" />
<xs:enumeration value="Phys" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
Was würde ich tun, um die Kinder zu beschränken entsprechend dem Wert meines Attribut zu vermeiden Mischen Attribute und Inhalte zu verbieten.
Danke für die schnelle Antwort! Ich verstehe was du meinst. Tatsächlich ist das 'Conversion'-Tag Teil eines 'Variable'-Typs mit anderen Geschwistern. Es beschreibt also die "Art der Konvertierung" ihrer Variablen. Ich werde es mit XSD 1.1 versuchen – PlikPlok