Je le code XML suivant le schémaXML Schema: Étendre xsd: choix de sorte que l'union (non séquence) de choix est créé
<xsd:complexType name="SimpleThing">
<xsd:choice maxOccurs="unbounded">
<xsd:group ref="simpleContent" />
</xsd:choice>
</xsd:complexType>
<xsd:complexType name="ExtendedThing">
<xsd:complexContent>
<xsd:extension base="SimpleThing">
<xsd:choice maxOccurs="unbounded">
<xsd:element name="qux" />
</xsd:choice>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:group name="simpleContent">
<xsd:choice>
<xsd:element name="foo" />
<xsd:element name="bar" />
</xsd:choice>
</xsd:group>
<xsd:group name="extendedContent">
<xsd:choice>
<xsd:group ref="simpleContent" />
<xsd:element name="qux" />
</xsd:choice>
</xsd:group>
<xsd:element name="root" type="ExtendedThing" />
Je voudrais le type ExtendedThing
pour contenir foo
, bar
et qux
dans un ordre arbitraire . Mais avec ce schéma, qux
doit venir après foo
et bar
car une séquence, pas une union des choix est créée à partir du choix du supertype et du choix du sous-type.
L'alternative, en remplacement de la définition de type pour ExtendedThing
avec
<xsd:complexType name="ExtendedThing">
<xsd:complexContent>
<xsd:extension base="SimpleThing">
<xsd:group ref="extendedContent" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
ne fonctionne pas non plus, parce que la contrainte Unique Particle Attribution est violée. Y a-t-il une solution à ce problème ou est-il impossible de créer un type dans XML Schema qui est une extension d'un autre type tel que le contenu du nouveau type est un ensemble d'éléments (dans n'importe quel ordre) qui est un sur-ensemble du contenu du supertype?
voir: http://stackoverflow.com/questions/9008622/how-to-extend-a-choice-complextype-without-sequencing-the-choice – albciff