47 votes

Récursion dans les schémas XSD

J'ai besoin de créer un schéma XSD qui valide une arborescence d'un document XML. Je ne connais pas exactement les ocurrences ou le niveau de profondeur de l'arbre.

Exemple XML:

 <?xml version="1.0" encoding="utf-8"?>
<node>
  <attribute/>
    <node>
      <attribute/>
      <node>
      </node>      
  </node>
</node>
 

Quel est le meilleur moyen de le valider?

Merci

71voto

Dani Duran Points 481

si vous avez besoin d'une déclaration de type récursive, voici un exemple qui pourrait vous aider:

 <xs:schema id="XMLSchema1"
    targetNamespace="http://tempuri.org/XMLSchema1.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/XMLSchema1.xsd"
    xmlns:mstns="http://tempuri.org/XMLSchema1.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:element name="node" type="nodeType"></xs:element>

  <xs:complexType name="nodeType">    
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="node" type="nodeType"></xs:element>
    </xs:sequence>
  </xs:complexType>

</xs:schema>
 

Comme vous pouvez le constater, cela définit un schéma récursif avec un seul nœud nommé "nœud" qui peut être aussi profond que souhaité.

43voto

Mike Brown Points 5874

XSD permet en effet la récursivité des éléments. Voici un échantillon pour vous

 <xsd:element name="section">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="title"/>
      <xsd:element ref="para" maxOccurs="unbounded"/>
      <xsd:element ref="section" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
 

Comme vous pouvez le constater, l'élément section contient un élément enfant de type section.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X