У меня возникли проблемы с пониманием поведения следующей XML-схемы:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="rootnode">
<xsd:complexType>
<xsd:sequence>
<xsd:choice minOccurs="1" maxOccurs="2">
<xsd:element name="e1" minOccurs="1" maxOccurs="2"/>
<xsd:element name="e2" minOccurs="0" maxOccurs="1"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Я ожидал, что в качестве дочернего элемента <rootnode> требуется хотя бы один экземпляр любого элемента <e1> или <e2>. Несмотря на мои ожидания, пустой <rootnode> будет проверять эту схему:
> xmllint --schema test.xsd empty.xml
<?xml version="1.0" encoding="UTF-8"?>
<rootnode>
</rootnode>
empty.xml validates
Если я изменяю атрибут minOccurs элемента e2 на нечто, отличное от "0", я получаю поведение, которое я изначально ожидал.
-
Кажется, что простое отсутствие элемента
<e2>считается как примерxsd:choiceв моем примере. -
Если это так, то как это бесконечное количество вхождений не нарушает предел
maxOccursв моемxsd:choice?