Éléments complexes XSD
Un élément complexe contient d'autres éléments et/ou attributs.
Qu'est-ce qu'un élément complexe ?
Un élément complexe est un élément XML qui contient d'autres éléments et/ou attributs.
Il existe quatre types d'éléments complexes :
- éléments vides
- éléments qui ne contiennent que d'autres éléments
- éléments qui ne contiennent que du texte
- éléments contenant à la fois d'autres éléments et du texte
Remarque : Chacun de ces éléments peut également contenir des attributs !
Exemples d'éléments complexes
Un élément XML complexe, "product", qui est vide :
<product pid="1345"/>
Un élément XML complexe, "employee", qui ne contient que d'autres éléments :
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Un élément XML complexe, "food", qui ne contient que du texte :
<food type="dessert">Ice cream</food>
Un élément XML complexe, "description", qui contient à la fois des éléments et du texte :
<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>
Comment définir un élément complexe
Regardez cet élément XML complexe, "employee", qui ne contient que d'autres éléments :
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Nous pouvons définir un élément complexe dans un schéma XML de deux manières différentes :
1. L'élément "employé" peut être déclaré directement en nommant l'élément, comme ceci :
<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Si vous utilisez la méthode décrite ci-dessus, seul l'élément "employé" peut utiliser le type complexe spécifié. Notez que les éléments enfants, "firstname" et "lastname", sont entourés de l'indicateur <sequence>. Cela signifie que les éléments enfants doivent apparaître dans le même ordre qu'ils sont déclarés. Vous en apprendrez plus sur les indicateurs dans le chapitre Indicateurs XSD.
2. L'élément "employee" peut avoir un attribut type qui fait référence au nom du type complexe à utiliser :
<xs:element name="employee" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Si vous utilisez la méthode décrite ci-dessus, plusieurs éléments peuvent faire référence au même type complexe, comme ceci :
<xs:element name="employee" type="personinfo"/>
<xs:element name="student" type="personinfo"/>
<xs:element name="member" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Vous pouvez également baser un type complexe sur un type complexe existant et ajouter quelques éléments, comme ceci :
<xs:element name="employee" type="fullpersoninfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
<xs:complexContent>
<xs:extension base="personinfo">
<xs:sequence>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>