У меня есть XML-документ как:
<Root>
<Bravo />
<Alpha />
<Charlie />
<Charlie />
<Delta />
<Foxtrot />
<Charlie />
</Root>
Порядок узлов не имеет значения. Каждый узел может появиться нуль или времена, за исключением Charlie. Charlie может появиться нуль, один, или произвольно много раз. Простой способ выразить это в XSD:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Root">
<xsd:complexType>
<xsd:all>
<xsd:element name="Alpha" minOccurs="0" maxOccurs="1" />
<xsd:element name="Bravo" minOccurs="0" maxOccurs="1" />
<xsd:element name="Charlie" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="Delta" minOccurs="0" maxOccurs="1" />
<xsd:element name="Echo" minOccurs="0" maxOccurs="1" />
<xsd:element name="Foxtrot" minOccurs="0" maxOccurs="1" />
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Но это не работает, потому что xsd:all не допускает maxOccurs больше, чем 1. Так как я не могу использовать xsd:all, что я должен использовать?
Можно использовать xsd:sequence, но тогда будет важен порядок, который, как вы указали в вопросе, не будет гарантирован.
Если посмотреть на: http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#element-group кажется, что нет группы моделей, которую можно использовать, хотя, возможно, вы могли бы просто определить их в complexType без использования группы содержимого?
Schematron. :)
Я не уверен на 100%, но думаю, что эта модель не может быть выражена в XML Schema.