[texte corrigé le 5 février 2003]
XSD, ou XML
Schema Definition, est une Recommandation du W3C qui précise
la manière de décrire formellement les éléments
d'un document XML. Cette description peut être utilisée
pour vérifier que chaque élément de contenu
d'un document adhère à la description de l'élément
dans lequel le contenu est placé.
Un schéma
est une abstraction des caractéristiques d'un objet et de
ses relations aux autres objets. De fait, un schéma XML représente
les relations entre les attributs et les éléments
de l'objet XML (par exemple, un document ou une portion de document).
Afin de créer un schéma pour un document, il faut
en analyser la structure et définir chacun de ses éléments
structurels. Ces éléments sont définis au sein
d'un jeu de balises.
Ainsi, si un fichier XML est correctement formé et
s'il est construit en accord avec le Schema auquel il fait référence,
alors il peut être considéré comme étant
un document "valide".
L'avantage de
Schema par rapport à d'autres langages de schématisation
XML comme la DTD (Document Type Definition) ou SOX (Simple
Object XML) est qu'il beaucoup plus "direct": le fait
que ce soit lui-même un langage XML enlève la nécessité
de passer par un "parseur" (analyseur syntaxique). De
plus, Schema propose l'auto-documentation, la création automatique
de schémas, et la possibilité de lancer des requêtes
XSLT. En revanche, le langage est assez complexe et ne peut pas
être approché légèrement... Plongeons
directement dans un peu de code source...
CD-thèque
Nous allons partir d'un exemple de bibliothèque de CD, dont
voici un premier album:
(fichier cds.xml)
<?xml version="1.0"
encoding="utf-8" ?>
<album asin="B000002UJQ">
<titre>OK Computer</titre>
<artiste>Radiohead</artiste>
<datepub>1997-07-01</datepub>
<pistes nombre="12">
<piste num="01">Airbag</piste>
<piste num="02">Paranoid
Android</piste>
[...]
<piste num="12">The
Tourist</piste>
</pistes>
</album>
Connaissant
notre document XML, nous pouvons dès lors créer le
schéma auquel il répond. Tout d'abord, la structure
de base:
(fichier cds.xsd)
<?xml version="1.0"
encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
[...]
</xs:schema>
Ensuite, notre premier élément, <album>.
Etant donné que celui-ci dispose d'un attribut (asin="")
et contient des sous éléments, nous devons le définir
comme étant de type complexType.
Le support des types de données est l'une des grandes forces
de Schema: grâce à cela, il devient beaucoup plus facile
de décrire le contenu autorisé d'un élément,
de valider une donnée, de travailler avec des données
en provenance d'un SGBD, etc. L'autre type de données, simpleType,
contient un grand nombre de types uniques, chacun ayant ses sous-types:
chaîne, booléen, entité...
Les types de données étant l'une
des deux spécifications de Schema, nous ne pourrons pas
nous étendre sur le sujet dans cet article...
Voici la définition de notre élément album,
et de ses sous-élements:
(fichier cds.xsd, contenu)
<xs:element name="album">
<xs:complexType>
<xs:sequence>
<xs:element name="titre"
type="xs:string"/>
<xs:element name="artiste"
type="xs:string"/>
<xs:element name="datepub"
type="xs:date"/>
<xs:element name="pistes">
<xs:complexType>
<xs:sequence>
<xs:element
name="piste" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
<xs:attribute
name="num" type="xs:unsignedShort"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:attribute
name="nombre" type="xs:unsignedShort"/>
</xs:element>
</xs:sequence>
<xs:attribute name="asin" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:...>
nous permet donc de définir une balise XML Schema. Les balises
sont ici réduites et permettent de comprendre rapidement
le fonctionnement du fichier: chaque élément est défini
clairement, tant dans sa définition que dans son champ d'action.
Ainsi, l'élément album,
de type complexe, contient une séquence d'éléments
de types simples (comme string ou
date). L'un de ses éléments
en revanche, pistes, est de type
complexe car il contient lui-même un sous-élément
de type simples: piste.
L'élément piste contient les attributs minOccurs
et maxOccurs, qui nous permet de
définir la fréquence possible de présence de
cet élément (par défaut, 1). Ici, on l'a défini
comme pouvant apparaître au moins une fois: au minimum "1",
et pas de maximum (unbounded). Ce
sous-élément contient l'attribut num,
qui est du type simple unsignedShort
(un entier court positif). L'élément-père album
dispose lui aussi d'un attribut, asin,
qui est une chaîne de caractères.
C'est là
une description très basique d'un premier fichier XML Schema,
mais qui nous permet d'approcher le format de manière progressive.
Nous aborderons plus en profondeur ce sujet dans de prochains articles...
|