Проверить XML по схеме XSD
У меня есть файл XML для проверки на соответствие схеме XSD. Вот так выглядит мой XML-файл.
<service>
<id>myid</id>
<name>myname</name>
<arg>arg1</arg>
<arg>arg2</arg>
</service>
Это правила проверки.
id
а такжеname
уникальны и востребованы. Из них не может быть более одного элемента.arg
можно повторить- Порядок не имеет значения. Элементы могут быть в любом порядке.
Это файл XSD, который я создал для этого.
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="service">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element type="xs:string" name="id" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:string" name="name" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:string" name="arg" minOccurs="1" maxOccurs="unbounded"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
Когда я пытаюсь проверить это (https://www.freeformatter.com/xml-validator-xsd.html) онлайн-валидатором, это работает. Но теперь он показывает любую ошибку, даже если есть дваid
элементы или нет id
элемент.
<service>
<id>myid</id>
<id>anotherid</id>
<name>myname</name>
<arg>arg1</arg>
<arg>arg2</arg>
</service>
Это должно быть неправильно, так как есть два id
элементы. Как иметь как повторяющиеся, так и неповторимые элементы вchoice
элементы. Sequence
здесь невозможно, так как порядок не имеет значения.
<service>
<name>myname</name>
<arg>arg1</arg>
<arg>arg2</arg>
</service>
Это не должно произойти, поскольку id
элемента нет.
1 ответ
Вы должны сделать выбор. Если вы разрешаете расположить элементы в любом порядке (с помощью UnorderedSet), то вам не разрешается устанавливать maxOccurs > 1. Если вы используете повторяющийся выбор, вы не можете проверить количество вхождений, потому что вы сопоставляете одно вхождение тега для каждого вхождения. выбора. Но если вы используете последовательность, вы должны согласиться с тем, что теги должны быть в правильном порядке. Практически все соглашаются с необходимостью упорядоченных тегов в XML, даже если это неудобно.