2010-01-26 4 views
0

Juste pour être concis, je veux obtenir quelque chose comme ceci:Comment définir une séquence d'éléments avec le même nom mais différents types dans le schéma XML?

<root> 
    <field value="..." text="...">fixed_value1</field> 
    <field value="..." text="...">fixed_value2</field> 
    <field value="..." text="...">fixed_value3</field> 
    <!-- in some cases we can choose the «fixed_value» among different ones --> 
    ... 
    <field value="..." text="...">fixed_valueN</field> 
</root> 

J'ai essayé différentes façons, mais il semble impossible de achive que, parce que le schéma XML ne permet pas de définir une liste d'éléments avec le même nom , mais différents types (simple ou complexe n'a pas d'importance ...). Est ce bien? Il n'y a pas d'autre moyen de définir une structure comme ci-dessus?

EDIT: peut-être que je dois expliquer un peu mieux. Entre les balises open et close de l'élément «field», il doit y avoir une valeur définie par le schéma XML (en d'autres termes, pour l'utilisateur, il n'est pas possible d'écrire quelque chose de différent de fixed_value). Un autre exemple:

<root> 
    <field value="Ferrari" text="company">Car</field> 
    <!-- but it could be Van or Motorcycle or Plane --> 
    <field value="12300000" text="euro">Cost</field> 
    <!-- here instead it's only possible to choose «Cost» --> 
    <field value="Red" text="">Color</field> 
    <!-- same as above --> 
</root> 

Est-ce possible? Merci d'avance!

Répondre

1

Essayez le XSD suivant:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema id="root" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="root"> 
    <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="field" nillable="true"> 
      <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:string"> 
       <xs:attribute name="value" type="xs:string" /> 
       <xs:attribute name="text" type="xs:string" /> 
       </xs:extension> 
      </xs:simpleContent> 
      </xs:complexType> 
     </xs:element> 
     </xs:choice> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
Questions connexes