Ceci est une restriction du schéma XSD. Je vais citer: http://www.w3.org/TR/2001/REC-xmlschema-0-20010502/ puis commentaire:
Il existe une troisième option pour les éléments contraignants dans un groupe: Tous les éléments du groupe peuvent apparaître une fois ou pas du tout, et ils peuvent apparaître dans un ordre quelconque . Le groupe Tous (qui fournit une version simplifiée du connecteur SGML &) est limité au niveau supérieur de tout modèle de contenu. De plus, les enfants du groupe doivent tous être des éléments individuels (aucun groupe) et aucun élément du modèle de contenu ne peut apparaître plus d'une fois, c.-à-d. Que les valeurs autorisées de minOccurs et maxOccurs sont 0 et 1. Par exemple, purchaseOrder à apparaître dans un ordre quelconque, on pourrait redéfinir PurchaseOrderType comme: un « All » Groupe
<xsd:complexType name="PurchaseOrderType">
<xsd:all>
<xsd:element name="shipTo" type="USAddress"/>
<xsd:element name="billTo" type="USAddress"/>
<xsd:element ref="comment" minOccurs="0"/>
<xsd:element name="items" type="Items"/>
</xsd:all>
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
Par cette définition, un élément de commentaire peut apparaître en option dans les purchaseOrder, et il peut apparaître avant ou après tout shipTo, billTo et éléments éléments, mais il ne peut apparaître qu'une seule fois. De plus, les stipulations d'un groupe tous ne nous permettent pas de déclarer un élément tel qu'un commentaire en dehors du groupe comme un moyen de le faire apparaître plus d'une fois. Le schéma XML stipule qu'un groupe doit apparaître en tant que seul enfant en haut d'un modèle de contenu. En d'autres termes, ce qui suit est illégale: Exemple illégal avec un « All » Groupe
<xsd:complexType name="PurchaseOrderType">
<xsd:sequence>
<xsd:all>
<xsd:element name="shipTo" type="USAddress"/>
<xsd:element name="billTo" type="USAddress"/>
<xsd:element name="items" type="Items"/>
</xsd:all>
<xsd:sequence>
<xsd:element ref="comment" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
je me souviens des discussions étaient à l'époque que xsd:all
allait être trop compliqué pour modéliser si elle était moins restreint que cela. Il s'étend bientôt aux modèles d'analyse non déterministes. Donc, la restriction était de 0 ou 1 et pour aucun frère et soeur.
SGML avait un modèle plus puissant utilisant le connecteur &
mais tous les systèmes ne l'ont pas implémenté.
EDIT Si vous souhaitez valider votre XML à ce niveau, vous pouvez utiliser Schematron comme second validateur après le schéma. Il est basé sur XSLT et ce type de contrainte est plus facile à exprimer.
Correct. Ce modèle de contenu peut être rendu plus court en factorisant l'élément 'FILM', de sorte que vous avez une séquence externe composée d'un choix suivi de la référence' FILM'. –