Elément complexe contient d'autres éléments et / ou des 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 des 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 qui contiennent les deux autres éléments et le texte
Note: Chacun de ces éléments peut contenir des attributs aussi bien!
Exemples d'éléments complexes
Un élément complexe XML, "product" , qui est vide:
<product pid="1345"/>
Un élément complexe de XML, "employee" , qui ne contient que d' autres éléments:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Un élément complexe de XML, "food" , qui ne contient que du texte:
<food type="dessert">Ice cream</food>
Un élément complexe XML, "description" , qui contient les deux éléments et le 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 façons différentes:
1. Le "employee" élément 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 le "employee" élément peut utiliser le type complexe spécifié. Notez que les éléments enfants, "firstname" et "lastname" , sont entourés par la <sequence> indicateur. Cela signifie que les éléments de l'enfant doivent apparaître dans le même ordre que ils sont déclarés. Vous en apprendrez plus sur les indicateurs dans le chapitre Indicateurs XSD.
2. Le "employee" élément peut avoir un attribut de 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 se référer 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 élément complexe sur un élément 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>