XSD-схема с неупорядоченными обязательными, необязательными и произвольными тегами

Я пытаюсь придумать схему XSD 1.0 со следующими ограничениями:

Там нет заказаНекоторые элементы должны появляться ровно один разНекоторые элементы могут появляться ноль или неограниченное времяРазрешить нераспознанные элементы (не проверять их)

Причина 3. заключается в том, что я хотел бы проверить тип, если элемент присутствует.

Например, человек должен иметь ровно одно имя, необязательный возраст (не более одного), необязательные телефонные номера (неограниченно) и любой другой тег. Это должно подтвердить:

<person>
  <name>Bob</name>
  <age>33</age>
  <phone>123456789</phone>
  <phone>123456788</phone>
</person>

<person>
  <name>Alice</name>
</person>

<person>
  <name>John</name>
  <!-- unrecognized, arbitrary tags: -->
  <location>city</location>
  <occupation>laywer</occupation>
</person>

Принимая во внимание, что они должныне проверки:

<person>
  <!-- I am missing a name -->
  <phone>123456789</phone>
</person>

<person>
  <!-- I should only have one name -->
  <name>Sally</name>
  <name>Mary</name>
</person>

<person>
  <name>Josh</name>
  <!-- Phone number is not an int -->
  <phone>not a number</phone>
</person>

Это недопустимый XSD, который в понятной для человека форме отражает то, что я пытаюсь сделать:

<xs:element name="person">
  <xs:complexType>
    <xs:all>
      <xs:element type="xs:string" name="name" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:int" name="age" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:int" name="phone" minOccurs="0" maxOccurs="unbounded"/>
      <xs:any />
    </xs:all>
  </xs:complexType>
</xs:element>

Этот XSD недействителен, потому что вы не можете иметь<any> под<all>и потому что XSD 1.0 не позволяет вам иметьmaxOccurs="unbounded" в<all> элемент. Кто-нибудь знает, как это можно сделать?

Ответы на вопрос(1)

Ваш ответ на вопрос