Un exemple XSD
Ce chapitre montrera comment écrire un schéma XML. Vous apprendrez également qu’un schéma peut être écrit de différentes manières.
Un document XML
Jetons un coup d’œil à ce document XML appelé « shiporder.xml »:
Créez un schéma XML
Maintenant, nous voulons créer un schéma pour le document XML ci-dessus.
Nous commençons par ouvrir un nouveau fichier que nous appellerons « shiporder.xsd ». Pour créer le schéma, nous pourrions simplement suivre la structure du document XML et définir chaque élément tel que nous le trouvons. Nous allons commencer par la déclaration XML standard suivie de l’élément xs:schema qui définit un schéma :
< xs: schéma xmlns: xs= »http://www.w3.org/2001/XMLSchema »>
…
</xs:schéma >
Dans le schéma ci-dessus, nous utilisons l’espace de noms standard (xs), et l’URI associé à cet espace de noms est la définition du langage de schéma, qui a la valeur standard de http://www.w3.org/2001/XMLSchema.
Ensuite, nous devons définir l’élément « shiporder ». Cet élément a un attribut et il contient d’autres éléments, nous le considérons donc comme un type complexe. Les éléments enfants de l’élément « shiporder » sont entourés d’un élément xs:sequence qui définit une séquence ordonnée de sous-éléments :
<xs:complexType>
<xs:sequence>
…
</xs:sequence>
</xs:complexType>
</xs:element>
Then we have to define the « orderperson » element as a simple type (because it does not contain any attributes or other elements). The type (xs:chaîne de caractères) est préfixé par le préfixe d’espace de noms associé au schéma XML qui indique un type de données de schéma prédéfini :
Ensuite, nous devons définir deux éléments de type complexe : « shipto » et « item ». Nous commençons par définir l’élément « shipto »:
Avec des schémas, nous pouvons définir le nombre d’occurrences possibles pour un élément avec les attributs maxOccurs et minOccurs. maxOccurs spécifie le nombre maximum d’occurrences pour un élément et minOccurs spécifie le nombre minimum d’occurrences pour un élément. La valeur par défaut pour maxOccurs et minOccurs est 1 !
Maintenant, nous pouvons définir l’élément « item ». Cet élément peut apparaître plusieurs fois dans un élément « shiporder ». Ceci est spécifié en définissant l’attribut maxOccurs de l’élément « item » sur « unbounded », ce qui signifie qu’il peut y avoir autant d’occurrences de l’élément « item » que l’auteur le souhaite. Notez que l’élément « note » est facultatif. Nous l’avons spécifié en mettant l’attribut minOccurs à zéro :
Nous pouvons maintenant déclarer l’attribut de l’élément « shiporder ». Comme il s’agit d’un attribut obligatoire, nous spécifions use= »required ».
Remarque: Les déclarations d’attribut doivent toujours venir en dernier :
Voici la liste complète du fichier de schéma appelé « shiporder.xsd »:
Diviser le schéma
La méthode de conception précédente est très simple, mais peut être difficile à lire et à maintenir lorsque les documents sont complexes.
La méthode de conception suivante est basée sur la définition de tous les éléments et attributs d’abord, puis sur leur référence à l’aide de l’attribut ref.
Voici la nouvelle conception du fichier de schéma (« shiporder.xsd »):
En utilisant des Types nommés
La troisième méthode de conception définit des classes ou des types, ce qui nous permet de réutiliser les définitions d’éléments. Pour ce faire, nommez les éléments simpleTypes et complexTypes, puis pointez-les via l’attribut type de l’élément.
Voici la troisième conception du fichier de schéma (« shiporder.xsd »):
L’élément de restriction indique que le type de données est dérivé d’un type de données d’espace de noms de schéma XML W3C. Ainsi, le fragment suivant signifie que la valeur de l’élément ou de l’attribut doit être une valeur de chaîne :
The restriction element is more often used to apply restrictions to elements. Look at the following lines from the schema above:
<xs:restriction base= »xs:string »>
<xs:pattern value= »{6} »/>
</xs:restriction>
</xs:simpleType >
Cela indique que la valeur de l’élément ou de l’attribut doit être une chaîne, elle doit contenir exactement six caractères d’affilée et ces caractères doivent être un nombre compris entre 0 et 9.