Esquema XSD com tags obrigatórias, opcionais e arbitrárias não ordenadas

Estou tentando criar um esquema XSD 1.0 com as seguintes restrições:

Não há pedidosAlguns elementos devem aparecer exatamente uma vezAlguns elementos podem aparecer zero ou vezes sem limitesPermitir elementos não reconhecidos (não os valide)

O motivo do 3. é que eu gostaria de validar o tipo se o elemento estiver presente.

Por exemplo, uma pessoa deve ter exatamente um nome, uma idade opcional (no máximo uma), números de telefone opcionais (ilimitados) e qualquer outra etiqueta. Estes devem validar:

<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>

Considerando que essesnão Validar:

<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>

Este é um XSD inválido que captura de uma maneira compreensível o que estou tentando fazer:

<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>

Este XSD é inválido porque você não pode ter<any> sob um<all>e porque o XSD 1.0 não permite que você tenhamaxOccurs="unbounded" em um<all> elemento. Alguém sabe como isso pode ser feito?

questionAnswers(1)

yourAnswerToTheQuestion