2010-06-17 7 views
1

J'ai besoin de définir un schéma XML. Le résultat devrait ressembler à ceci:Schéma XML - comment définir un élément qui contient une chaîne ou des éléments enfants

<option value="priority">4</option> 
<option value="values"> 
    <value name="x86-32" lang="en-GB" group="root">x86 32-Bit</value> 
    <value name="x86-64" lang="en-GB" group="root">x86 64-Bit</value> 
    <value name="ARM" lang="en-GB" group="root">ARM</value> 
    <value name="PowerPC" lang="en-GB" group="root">PowerPC</value> 
    <value name="SPARC" lang="en-GB" group="root">SPARC</value> 
    <value name="PA-RISC" lang="en-GB" group="root">PA-RISC</value> 
    <value name="DEC-Alpha" lang="en-GB" group="root">DEC Alpha</value> 
</option> 
<option value="editable">true</option> 

Ainsi, l'élément « option » contient une chaîne ou un ensemble d'éléments d'enfant avec des cordes. J'ai essayé quelque chose comme ceci:

<xs:element name="options" minOccurs="0" maxOccurs="1"> 
    <xs:complexType mixed="true"> 
     <xs:sequence> 
      <xs:element name="option" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string">        
          <xs:attribute name="value" use="required" type="xs:string" /> 
         </xs:extension> 
        </xs:simpleContent> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element>      

Mais le validateur ne permet pas à cette définition:

-cvc complexe type.2.2: 'option' élément doit avoir aucun élément [enfants ], et la valeur doit être valide.

Une idée de comment résoudre le problème?

Meilleures salutations, Radek

+0

Avez-vous spécifiquement besoin que les nœuds soient nommés "Option" et "Valeur"? – AllenG

+0

Pas nécessairement. –

Répondre

1

Ok, je pense que je l'ai trouvé acceptable (pour moi) solution:

<xs:element name="options" minOccurs="0" maxOccurs="1"> 
<xs:complexType> 
    <xs:choice maxOccurs="unbounded">                  
     <xs:element name="option" maxOccurs="unbounded"> 
       <xs:complexType> 
       <xs:simpleContent> 
        <xs:extension base="xs:string">        
         <xs:attribute name="attribute" use="required" type="xs:string" /> 
        </xs:extension> 
       </xs:simpleContent> 
       </xs:complexType> 
     </xs:element> 
     <xs:element name="values" maxOccurs="unbounded"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element name="value" maxOccurs="unbounded"> 
         <xs:complexType> 
          <xs:simpleContent> 
           <xs:extension base="xs:string"> 
            <xs:anyAttribute/> 
           </xs:extension> 
          </xs:simpleContent> 
         </xs:complexType> 
        </xs:element> 
       </xs:sequence> 
       <xs:attribute name="attribute" use="required" type="xs:string" /> 
       </xs:complexType> 
     </xs:element>                  
    </xs:choice> 
</xs:complexType> 

Cela me permet de créer un tel fichier XML:

<option attribute="priority">4</option> 
<values attribute="fieldOptions"> 
    <value name="x86-32" lang="en-GB" group="root">x86 32-Bit</value> 
    <value name="x86-64" lang="en-GB" group="root">x86 64-Bit</value> 
    <value name="ARM" lang="en-GB" group="root">ARM</value> 
    <value name="PowerPC" lang="en-GB" group="root">PowerPC</value> 
    <value name="SPARC" lang="en-GB" group="root">SPARC</value> 
    <value name="PA-RISC" lang="en-GB" group="root">PA-RISC</value> 
    <value name="DEC-Alpha" lang="en-GB" group="root">DEC Alpha</value> 
</values> 
<option attribute="editable">true</option> 

Merci à AllenG pour la suggestion :)

Questions connexes