2010-09-08 24 views
0

Très bien, j'utilise donc le schéma XML pour valider un type de fichier xml suivant: (prétendez simplement que les parenthèses sont des parenthèses angulaires).Séquence XML avec un nombre arbitraire de commentaires

<root> 
    <A> 
     <B></B> 
     <C></C> 
    </A> 
</root> 

assez simple -> à l'exception des prises est que je veux aussi avoir un élément de commentaire, ce qui peut se produire un nombre illimité de fois dans un ordre quelconque (à condition qu'il ne soit pas un commentaire dans une autre commentaire). Ainsi, l'échantillon de code suivant serait également valable:

<root> 
    <comment /> 
    <A> 
     <comment /> 
     <B> 
     <comment /> 
     </B> 
     <comment /> 
     <C></C> 
     <comment /> 
    </A> 
     <comment /> 
</root> 

Dans un premier temps j'avais une structure rigide imposée sur l'arbre initial - à savoir B et C doivent apparaître une fois, et B doit venir en premier. Aucune des façons dont je peux arriver à faire cette échelle pour travailler sur des exemples plus complexes. des idées?

Un grand merci

Répondre

0

Vous pouvez utiliser des extensions, comme dans l'exemple suivant, mais qui ne vous permet d'ajouter des commentaires au début de chaque élément. Si vous voulez des commentaires partout, je ne vois aucun moyen de préserver l'ordre des séquences sans faire référence aux commentaires dans chaque séquence du schéma ...

<xs:element name="comment" type="xs:string"/> 
<xs:complexType name="commentable"> 
    <xs:sequence> 
     <xs:element maxOccurs="unbounded" minOccurs="0" ref="comment"/> 
    </xs:sequence> 
</xs:complexType> 
<xs:element name="root"> 
    <xs:complexType> 
     <xs:complexContent> 
      <xs:extension base="commentable"> 
       <xs:sequence> 
        <xs:element ref="A"/> 
       </xs:sequence> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:element> 
<xs:element name="A"> 
    <xs:complexType> 
     <xs:complexContent> 
      <xs:extension base="commentable"> 
       <xs:sequence> 
        <xs:element ref="B"/> 
        <xs:element ref="C"/> 
       </xs:sequence> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:element> 
<xs:element name="B"> 
    <xs:complexType mixed="true"> 
     <xs:complexContent> 
      <xs:extension base="commentable"/> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:element> 
<xs:element name="C"> 
    <xs:complexType mixed="true"> 
     <xs:complexContent> 
      <xs:extension base="commentable"/> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:element>