Я пытаюсь определить схему XML с необязательным тегом sort_expression
. Если указан этот необязательный тег, то разрешается второй необязательный тег alternate_sort_expression
, но он зависит от наличия первого тега.
Например, я хочу, чтобы эти примеры подтвердили:
<indication>
<label>A label for the item</label>
<sort_expression>Some Value</sort_expression>
<!-- one sort expression was provided -->
</indication>
или
<indication>
<label>A label for the item</label>
<!-- no sort expression was provided -->
</indication>
или
<indication>
<label>A label for the item</label>
<sort_expression>Some Value</sort_expression>
<alternate_sort_expression>Some Value</alternate_sort_expression>
</indication>
но следующее не должно пройти проверку:
<indication>
<label>A label for the item</label>
<!-- no main sort expression was provided -->
<alternate_sort_expression>INVALID</alternate_sort_expression>
</indication>
Я думал, что следующая схема с использованием выбора из двух последовательностей будет работать. К сожалению, сама схема не проверяется; Altova XML Spy говорит мне, что «модель содержимого индикации сложного типа неоднозначна:
<xs:complexType name="indication">
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:choice>
<xs:sequence>
<xs:element name="sort_expression" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:sequence>
<xs:element name="sort_expression" type="xs:string"/>
<xs:element name="alternate_sort_expression" type="xs:string" maxOccurs="unbounded"/>
</xs:sequence>
</xs:choice>
</xs:sequence>