2010-11-18 29 views
2

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?

+0

voir: http://stackoverflow.com/questions/9008622/how-to-extend-a-choice-complextype-without-sequencing-the-choice – albciff

Répondre

2

Ceci n'est pas possible, pour des raisons pratiques. Le modèle de contenu d'un super-type doit toujours venir en entier avant le modèle de contenu du sous-type. Cela aide à garder la mise en œuvre des validateurs rapide.