Проверить 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, даже если это неудобно.

Другие вопросы по тегам