Я хочу определить схему xml, в которой элементы Connectors имеют дочерние элементы 0- *. Либо Последовательность, Связь или Сообщение в любом порядке и от 0 до многих раз. Т.е.
<Connectors>
<Sequence />
<Association />
<Message />
<Sequence />
<Sequence />
<Message />
<Message />
<Association />
</Connectors>
Я пытался определить следующую схему, но похоже, что порядок фиксирован.
<xs:element name="Connectors">
<xs:complexType>
<xs:sequence>
<xs:element ref="Association" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="Message" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="Sequence" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
Я решил эту проблему, установив choice и установив атрибуты minOccurs и maxOccurs.
<xs:element name="Connectors">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="Association" />
<xs:element ref="Message" />
<xs:element ref="Sequence" />
</xs:choice>
</xs:complexType>
</xs:element>
К сожалению, в XML-схеме нет практического способа определить «этот набор дочерних элементов в любом порядке, но каждый из них встречается хотя бы один раз».
Вы застряли либо с определенным порядком, либо с одним из набора (возможно, повторяющимся).
РЕДАКТИРОВАТЬ: Нет практического способа, ручное создание каждой возможной последовательности возможно и будет работать, но комбинаторный взрыв быстро выйдет из-под контроля.