Je suis en train de créer un schéma pour un élément <property>
qui doit avoir un sous-élément <key>
, et l'un des <val>
, <shell>
ou <perl>
et un <os>
ou <condition>
en option, et l'ordre des sous-éléments n'a pas d'importance .Schéma XML: Pourquoi ne pas <xs:all> avoir <choice> enfants? et comment cela peut-il être contourné?
Voici quelques échantillons pour <property>
valides éléments:
<property>
<key>A</key>
<val>b</val>
</property>
<property>
<key>A</key>
<val>b</val>
<os>Windows</os>
</property>
<property>
<condition>a == 1</condition>
<key>A</key>
<perl>1+1</perl>
<os>unix</os>
</property>
Idéalement, je pensais à l'aide <xs:all>
pour cela:
<xs:element name="property">
<xs:complexType>
<xs:all>
<xs:element name="key" type="xs:string" />
<xs:choice>
<xs:element name="val" type="xs:string" />
<xs:element name="perl" type="xs:string" />
<xs:element name="shell" type="xs:string" />
</xs:choice>
<xs:element name="os" type="xs:string" minOccurs="0" />
<xs:element name="condition" type="xs:string" minOccurs="0" />
</xs:all>
</xs:complexType>
</xs:element>
Mais j'ai découvert que <xs:all>
ne peut contenir que <xs:element>
et non <xs:choice>
. Quelqu'un peut-il expliquer pourquoi est-ce?
Plus important encore, quelqu'un peut-il fournir un moyen de valider un tel élément <property>
?
je peux mettre les trois éléments - <val>
, <perl>
et <shell>
- comme éléments facultatifs dans le <xs:all>
, mais je veux le schéma pour valider que l'un et un seul des trois existe dans l'élément. Cela peut-il être fait?
@splintor: Avez-vous réellement regardé la fenêtre de prévisualisation lorsque vous avez écrit votre question? Je veux dire, la moitié était invisible ... – Tomalak
Voulez-vous dire que les deux os et la condition peuvent se produire dans le même élément de propriété ou que l'un ou l'autre ou aucun ne peut se produire? –
@Tomalak: Non - J'ai raté cette fenêtre d'aperçu. Merci beaucoup de l'avoir édité pour signifier ce que je voulais. – splintor