OK.Я думаю, я понимаю, вы знаете.Ваш XML выглядит так:
<?xml version="1.0"?>
<house>
<ownerName>aaa</ownerName>
<ownerLastName>bbb</ownerLastName>
<rooms>
<room1>kitchen</room1>
<room2>living room</room2>
<room3></room3>
<room4></room4>
<room5></room5>
</rooms>
</house>
Вы хотите, чтобы элементы ownerName
и ownerLastName
встречались в любом порядке, хотя они оба должны присутствовать.Из вашего описания не ясно, насколько важна позиция элемента rooms
.Я предположил, что это так.Импортируется, что дочерние элементы rooms
остаются в порядке.
Разбивая это, мы можем определить complexType
для комнат (поэтому модель завершена)
<xs:complexType name="RoomType">
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
<xs:element name="RoomsType">
<xs:complexType>
<xs:sequence>
<xs:element name="room1" type="RoomType"/>
<xs:element name="room2" type="RoomType"/>
<xs:element name="room3" type="RoomType"/>
<xs:element name="room4" type="RoomType"/>
<xs:element name="room5" type="RoomType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Этодает нам последовательность номеров по порядку.
Существует довольно много ограничений на использование xs:all
, поэтому я избежал этого здесь (вы не можете использовать в последовательности, например).Чтобы имена владельцев появлялись в любом порядке, я выбрал две последовательности.Выбор встроен в другую последовательность, чтобы гарантировать, что элемент rooms
будет последним.
<xs:complexType name="HouseType">
<xs:sequence>
<xs:choice>
<xs:sequence>
<xs:element ref="ownerName"/>
<xs:element ref="ownerLastName"/>
</xs:sequence>
<xs:sequence>
<xs:element ref="ownerLastName"/>
<xs:element ref="ownerName"/>
</xs:sequence>
</xs:choice>
<xs:element name="rooms" type="HouseType"/>
</xs:sequence>
</xs:complexType>
<xs:element name="house" type="HouseType"/>
Теперь, если вы на самом деле не заботитесь о заказе или ownerLastName
, ownerName
и house
, тогда вы можете без проблем использовать xs:all
:
<xs:complexType name="HouseType">
<xs:all>
<xs:element ref="ownerName"/>
<xs:element ref="ownerLastName"/>
<xs:element name="rooms" type="HouseType"/>
</xs:all>
</xs:complexType>
, что требует наличия всех трех элементов в любом порядке.