Éléments complexes XSD

Un élément composé contient d'autres éléments et/ou des attributs.

Qu'est-ce qu'un élément composé ?

Un élément composé est un élément XML qui contient d'autres éléments et/ou des attributs.

Il y a quatre types d'éléments composés :

  • Éléments vides
  • Éléments contenant d'autres éléments
  • Éléments ne contenant que du texte
  • Éléments contenant des éléments et du texte

Remarque :Ces éléments peuvent tous contenir des attributs !

Exemples d'éléments composés

L'élément composé, "product", est vide :

<product pid="1345"/>

L'élément composé, "employee", ne contient que d'autres éléments :

<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>

L'élément composé, "food", ne contient que du texte :

<food type="dessert">Crème glacée</food>

L'élément composé, "description", contient des éléments et du texte :

<description>
Cela s'est produit le <date lang="norwegian">03.03.99</date> ....
</description>

Comment définir un élément composé ?

Regardez cet élément XML composé, "employee", qui ne contient que d'autres éléments :

<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>

Dans XML Schema, nous avons deux méthodes pour définir un élément composé :

1. En nommant cet élément, vous pouvez directement déclarer l'élément "employee", 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 "employee" peut utiliser le type composite spécifié. Notez que ses éléments enfants, "firstname" et "lastname", sont enveloppés dans l'indicateur <sequence>. Cela signifie que les éléments doivent apparaître dans l'ordre dans lequel ils sont déclarés. Vous trouverez Indicateurs XSD Cette section apprend plus sur les indicateurs.

2. L'élément "employee" peut utiliser l'attribut type, qui a pour fonction d'indiquer le nom du type composite à 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 avez utilisé la méthode décrite ci-dessus, plusieurs éléments peuvent utiliser le même type composite, par exemple :

<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 ajouter des éléments sur un élément composite existant, en se basant sur un élément composite, puis en ajoutant des é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>