Почти во всех обстоятельствах вы хотите поместить минимальное / максимальное количество событий в элемент в последовательности, а не в последовательность. Используя ваш пример:
<xsd:element name="books">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="book" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Это однозначно. Если у вас есть ряд элементов книги в строке, вы можете указать, какой именно элемент схемы создает их. Тем не менее:
<xsd:element name="books">
<xsd:complexType>
<xsd:sequence minOccurs="1" maxOccurs="unbounded"/>
<xsd:element ref="book" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Здесь, если у вас есть два элемента "book
" в строке, у вас есть два sequence
с подряд или один sequence
с двумя book
элементами? Это не соответствует требованию Уникальная атрибуция частиц .
Наконец, если вы добавите min / max Occurs в последовательность и позже добавите дополнительный элемент:
<xsd:element name="books">
<xsd:complexType>
<xsd:sequence minOccurs="1" maxOccurs="unbounded"/>
<xsd:element ref="book"/>
<xsd:element ref="ebook"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
тогда это может разрешить следующий XML, что, вероятно, не то, что вы намереваетесь:
<books>
<book/><ebook/><book/><ebook/><book/><ebook/><book/><ebook/>
</books>
тогда как если у вас есть:
<xsd:element name="books">
<xsd:complexType>
<xsd:sequence/>
<xsd:element ref="book" minOccurs="1" maxOccurs="unbounded"/>
<xsd:element ref="ebook" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
тогда ясно и недвусмысленно, что вы намереваетесь: последовательность из одного или нескольких book
элементов, за которой следует последовательность из одного или нескольких ebook
элементов.