Comment créer un schéma pour une liste non ordonnée de nœuds XML, avec des contraintes d'occurrence

Donné un XML de mise en page comme cela, je suis en train de créer un schéma XSD pour la valider.

<RootNode>
  <ChildA />
  <ChildC />
  <ChildB />
  <ChildB />
  <ChildA />
</RootNode>

Les exigences sont les suivantes:

  • Enfanta, ChildB et ChildC peut se produire dans n'importe quel ordre. (<xs:sequence> inadaptés)
  • Enfanta est obligatoire mais peut se produire plusieurs fois.
  • ChildB est facultatif et peut se produire à plusieurs reprises.
  • ChildC est facultatif et peut se produire une seule fois.

La technique que j'utilise habituellement pour créer une liste non ordonnée de nœuds est d'utiliser un <xs:choice maxOccurs="unbounded"> avec chaque nœud dans la liste, cependant, je suis incapable de créer le minOccurs="1" contrainte sur les Enfanta et la maxOccurs="1" contrainte sur ChildC. (Le # d'événements de la choix l'emporte sur ceux des éléments ici).

<xs:element name="RootNode">
  <xs:complexType>
    <xs:choice minOccurs="1" maxOccurs="unbounded">
      <xs:element name="ChildA" minOccurs="1"/>
      <xs:element name="ChildB" />
      <xs:element name="ChildC" maxOccurs="1"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

source d'informationauteur Mark H