Cours Définir la grammaire pour une instance de document XML
Descriptif
3. Validation d’un document XML avec les DTD ou XMLSchéma
3.8. Déclaration d'éléments complexes avec XMLSchéma
INous avons principalement quatre types d'éléments complexes
-
Elément vide (généralement avec un attribut): Pour déclarer un tel type d'élément avec son attibut, on utilise la syntaxe suivante:
<xsd:element name="NOM_ELEMENT">
<xsd:complexType>
<xsd:attribute name="NOM_ATTRIBUT" type="xsd:ID"/>
</xsd:complexType>
</xsd:element>
-
Element contenant uniquement des sous-éléments: Pour un tel type d'élément, nous utilisons la syntaxe suivante:
<xsd:element name="NOM_ELEMENT">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="PREM_SOUS_ELT" type="xsd:string"/>
<xsd:element name="DEUX_SOUS_ELT" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
-
Element pouvant contenir du texte et des attributs: pour un tel type d'élément, nous utilisons la syntaxe suivante:
<xsd:element name="NOM_ELEMENT">
<xsd:complexType mixed="true">
<xsd:attribute name="NOM_ATTRIBUT" use="required" type="xsd:ID"/>
</xsd:complexType>
</xsd:element>
- Element pouvant contenir n'importe quel type d'informations:C'est un élément pour lequel, le type est égal à ANY.
Indicateurs d'occurrences: On peut indiquer pour un élément, le nombre minimum ou maximum de fois qu'on peut l'avoir avec les indicateurs d'occurrences minOccurs et maxOccurs.
Exemple, si on veut pour un élément livre, imposer un élément titre et obligatoirement au moins un chapitre avec possibilité d'en avoir plusieurs.
<xsd:element name="livre">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="titre" type="xsd:string"/>
<xsd:element name="chapitre" type="xsd:string" maxOccurs="unbounded" minOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Indicateur d'ordre: On peut fixer pour un élément complexe, l'ordre dans lequel ses sous-éléments doivent apparaître avec ALL, SEQUENCE ou CHOICE.
ALL: Cet indicateur spécifie que les sous-élément peuvent apparaître dans n'importe quel ordre, et se produisent une seule fois dans l'élément qui les contient.
Exemple: si nous avons un élément personne caractérisé par son nom et son prénom et que tous les deux sont obligatoires et peuvent apparaître dans n'importe quel ordre, nous obtenons la description suivante:
<xsd:element name="personne">
<xsd:complexType>
<xsd:all>
<xsd:element name="nom" type="xsd:string"/>
<xsd:element name="prenom" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
SEQUENCE: Cet indicateur spécifie que les sous-éléments doivent apparaître dans l'ordre spécifié.
Exemple: Si la personne est caractérisée par son nom et son prénom et qu'on veuille imposer l'ordre dans lequel le nom et le prénom doivent apparaître, on fera:
<xsd:element name="personne">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nom" type="xsd:string"/>
<xsd:element name="prenom" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element
CHOICE: Il indique qu’on ne peut avoir qu’un élément fils parmi les éléments fils qui peuvent être produits.
Exemple: dans le cas où nous avons un élément matière ne pouvant prendre que trois états: liquide, solide ou gaz, on peut le représenter par:
<xsd:element name="matiere">
<xsd:complexType>
<xsd:choice>
<xsd:element name="liquide" type="xsd:string"/>
<xsd:element name="solide" type="xsd:string"/>
<xsd:element name="gaz" type="xsd:string"/>
</xsd:choice>
</xsd:complexType>
</xsd:element
Remarque: Les indicateurs d'ordre SEQUENCE et CHOICE peuvent avoir des attributs minOccurs et maxOccurs. Lorsque l'indicateur d'occurrence SEQUENCE dispose de ces deux attributs, cela signifie que la séquence peut être répétée au minimum le nombre de fois que minOccurs aura comme valeur et au maximum le nombre de fois que maxOccurs prendra comme valeur.
Lorsque ces indicateurs sont mis mis dans un élément CHOICE avec au moins un minOccurs prenant la valeur 2, cela indique que les sous éléments peuvent apparaître autant fois et dans n'importe quel ordre.