Type complexe dérivé

Pour le type complexe dérivé, l'élément xsd :complexType doit contenir un élément :

  • de type xsd :simpleContent pour le contenu purement textuel,

SyntaxesimpleContent

<!--Contenu textuel -->

<xsd:complexType name="name_type">

<xsd:simpleContent>

<!-- Extension -->

...

</xsd:simpleContent>

</xsd:complexType>

  • de type xsd :complexContent si le contenu est non textuel pure.

SyntaxecomplexContent

<!-- Contenu pur ou mixte -->

<xsd:complexType name="name_type">

<xsd:complexContent>

<!-- Extension ou restriction -->

...

</xsd:complexContent>

</xsd:complexType>

Restriction d'un type complexe

La restriction d'un type complexe est réalisée par :

  • Construction d'un nouveau type complexe en supprimant des composants à un type complexe existant,

  • Comparable à la restriction de types simples : les valeurs du nouveau type constituent un sous-ensemble des valeurs du type de base,

  • La restriction doit répéter explicitement tous les composants du type de base qui sont conservés.

ExempleDéfinition d'un type complexe

1
<xsd:complexType name="typeContacts">
2
    <xsd:sequence>
3
              <xsd:element name="personne" maxOccurs="unbounded" type="typePersonne"/>
4
    </xsd:sequence>
5
    <xsd:attributeGroup ref="InfosMaj"/>
6
</xsd:complexType>

ExempleDéfinition de type complexe restreint

1
<xsd:complexType name="typeContactsLimite">
2
    <xsd:complexContent>
3
        <xsd:restriction base="typeContacts">
4
             <xsd:sequence>
5
                      <xsd:element name="personne" maxOccurs="50" type="typePersonne"/>
6
             </xsd:sequence>
7
             <xsd:attributeGroup ref="InfosMaj"/>
8
        </xsd:restriction>
9
   </xsd:complexContent>
10
</xsd:complexType>

Extension d'un type complexe

Un type complexe dérivé peut être défini par extension d'un type complexe :

  • Une extension d'un type complexe prend toujours la forme de nouveaux composants ajoutés à la fin du modèle existant.

  • Un élément de séquence implicite renferme les deux modèles afin de faire respecter la règle selon laquelle tous les modèles ont une seule construction de groupe supérieur.

  • Ni le type de données d'origine ni le nouveau type de données ne peuvent inclure l'élément xsd :all car il doit toujours se trouver en haut d'un modèle de contenu.

  • Les deux parties doivent convenir d'autoriser le contenu mixte.

ExempleCas : simpleContent

Cet exemple présente le cas d'ajout de deux attributs aux éléments dont le contenu est textuel.

1
<xsd:element name="bookTitle">
2
   <xsd:complexType>
3
        <xsd:simpleContent>
4
               <xsd:extension base="xs:string">
5
                     <xsd:attribute name="author" type="xs:string"/>
6
                     <xsd:attribute name="isbn" type="xs:string"/>
7
               </xsd:extension>
8
        </xsd:simpleContent>
9
  </xsd:complexType>
10
</xsd:element>

ExempleCas : complexType

Dans cet exemple, on ajoute des éléments ou attributs à type complexe.

1
<xsd:complexType name="Publication">
2
     <xsd:sequence>
3
              <xsd:element name="Title" type="xsd:string" maxOccurs="unbounded"/>
4
              <xsd:element name="Author" type="xsd:string" maxOccurs="unbounded"/>
5
              <xsd:element name="Date" type="xsd:gYear"/>
6
     </xsd:sequence>
7
</xsd:complexType >
8
9
<xsd:complexType name="BookPublication">
10
         <xsd:complexContent>
11
                  <xsd:extension base="Publication">
12
                          <xsd:sequence>
13
                                     <xsd:element name="ISBN" type="xsd:string"/>
14
                                     <xsd:element name="Publisher" type="xsd:string"/>
15
                          </xsd:sequence>
16
                  </xsd:extension>
17
         </xsd:complexContent>
18
</xsd:complexType >
19