Indicateurs XSD
Nous pouvons contrôler COMMENT les éléments doivent être utilisés dans les documents avec des indicateurs.
Indicateurs
Il y a sept indicateurs :
Indicateurs de commande :
- Tout
- Choix
- Séquence
Indicateurs d'occurrence :
- maxOccurs
- minOccurs
Indicateurs Groupe :
- Nom de groupe
- nom du groupe d'attributs
Indicateurs de commande
Les indicateurs d'ordre permettent de définir l'ordre des éléments.
Tous les indicateurs
L'indicateur <all> spécifie que les éléments enfants peuvent apparaître dans n'importe quel ordre et que chaque élément enfant ne doit apparaître qu'une seule fois :
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
Remarque : Lorsque vous utilisez l'indicateur <all>, vous pouvez régler l'indicateur <minOccurs> sur 0 ou 1 et l'indicateur <maxOccurs> ne peut être réglé que sur 1 (les <minOccurs> et <maxOccurs> sont décrits plus loin).
Indicateur de choix
L'indicateur <choice> spécifie qu'un élément enfant ou un autre peut apparaître :
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
Indicateur de séquence
L'indicateur <sequence> spécifie que les éléments enfants doivent apparaître dans un ordre spécifique :
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Indicateurs d'occurrence
Les indicateurs d'occurrence sont utilisés pour définir la fréquence à laquelle un élément peut se produire.
Remarque : Pour tous les indicateurs "Ordre" et "Groupe" (tous, tous, choix, séquence, nom de groupe et référence de groupe), la valeur par défaut pour maxOccurs et minOccurs est 1.
Indicateur maxOccurs
L'indicateur <maxOccurs> spécifie le nombre maximum de fois qu'un élément peut se produire :
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string" maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
L'exemple ci-dessus indique que l'élément "child_name" peut apparaître au minimum une fois (la valeur par défaut de minOccurs est 1) et au maximum dix fois dans l'élément "person".
Indicateur minOccurs
L'indicateur <minOccurs> spécifie le nombre minimum de fois qu'un élément peut se produire :
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
maxOccurs="10" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
L'exemple ci-dessus indique que l'élément "child_name" peut apparaître au minimum zéro fois et au maximum dix fois dans l'élément "person".
Astuce : Pour permettre à un élément d'apparaître un nombre illimité de fois, utilisez l'instruction maxOccurs="unbounded" :
Un exemple de travail :
Un fichier XML appelé "Mafamille.xml":
<?xml version="1.0" encoding="UTF-8"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="family.xsd">
<person>
<full_name>Hege Refsnes</full_name>
<child_name>Cecilie</child_name>
</person>
<person>
<full_name>Tove Refsnes</full_name>
<child_name>Hege</child_name>
<child_name>Stale</child_name>
<child_name>Jim</child_name>
<child_name>Borge</child_name>
</person>
<person>
<full_name>Stale Refsnes</full_name>
</person>
</persons>
Le fichier XML ci-dessus contient un élément racine nommé "personnes". A l'intérieur de cet élément racine, nous avons défini trois éléments "person". Chaque élément "person" doit contenir un élément "full_name" et il peut contenir jusqu'à cinq éléments "child_name".
Voici le fichier de schéma "family.xsd":
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
minOccurs="0" maxOccurs="5"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Indicateurs du groupe
Les indicateurs de groupe sont utilisés pour définir des ensembles d'éléments liés.
Groupes d'éléments
Les groupes d'éléments sont définis avec la déclaration de groupe, comme ceci :
<xs:group name="groupname">
...
</xs:group>
Vous devez définir un élément all, choice ou sequence dans la déclaration de groupe. L'exemple suivant définit un groupe nommé "persongroup", qui définit un groupe d'éléments qui doivent apparaître dans une séquence exacte :
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
Après avoir défini un groupe, vous pouvez le référencer dans une autre définition, comme ceci :
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Groupes d'attributs
Les groupes d'attributs sont définis avec la déclaration attributeGroup, comme ceci :
<xs:attributeGroup name="groupname">
...
</xs:attributeGroup>
L'exemple suivant définit un groupe d'attributs nommé "personattrgroup" :
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
Après avoir défini un groupe d'attributs, vous pouvez le référencer dans une autre définition, comme ceci :
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>