Имеется следующая схема XML (XSD 1.0):
<xs:element name="Fruits">
<xs:complexType>
<xs:sequence>
<xs:element name="Fruit_id" type="xs:int" minOccurs="1" maxOccurs="1"/>
<xs:choice minOccurs="1" maxOccurs="1">
<xs:element ref="Apple" minOccurs="1" maxOccurs="1"/>
<xs:element ref="Banana" minOccurs="1" maxOccurs="1"/>
<xs:sequence>
<xs:element ref="Cherry" minOccurs="0" maxOccurs="1"/>
<xs:element ref="Durian" minOccurs="0" maxOccurs="1"/>
<xs:element ref="Elderberry" minOccurs="0" maxOccurs="1"/>
<xs:element ref="Fig" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
Проблема, с которой я столкнулся, заключается в том, что эта схема позволяет Fruits
состоять только из Fruit_id
, и я хотел бы, чтобы хотя бы один плод (то есть Apple
или Banana
или Cherry
или Durian
или Elderberry
или Fig
) присутствовал в Fruits
. Я попытался изменить приведенное выше на следующее (короче говоря, замените sequence
на choice
и измените соответствующий minOccurs
на 1
):
<xs:element name="Fruits">
<xs:complexType>
<xs:sequence>
<xs:element name="Fruit_id" type="xs:int" minOccurs="1" maxOccurs="1"/>
<xs:choice minOccurs="1" maxOccurs="1">
<xs:element ref="Apple" minOccurs="1" maxOccurs="1"/>
<xs:element ref="Banana" minOccurs="1" maxOccurs="1"/>
<xs:choice minOccurs="1" maxOccurs="4">
<xs:element ref="Cherry" minOccurs="1" maxOccurs="1"/>
<xs:element ref="Durian" minOccurs="1" maxOccurs="1"/>
<xs:element ref="Elderberry" minOccurs="1" maxOccurs="1"/>
<xs:element ref="Fig" minOccurs="1" maxOccurs="1"/>
</xs:choice>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
что действительно заставляет по крайней мере один из вышеупомянутых фруктов существовать в Fruits
, но позволяет Cherry
, Durian
, Eldeberry
и Fig
соответственно появляться до четырех раз в Fruits
, в то время как мое намерение состоит в том, чтобы каждый из них из них, соответственно, должно быть разрешено существовать в Fruits
не более одного раза (поэтому я пробовал с maxOccurs="4"
в (вложенном) элементе choice
).