TUTORIELS 
Présentation de XML Schema
Un format XML de définition et de validation de documents XML, destiné à faciliter les échanges de données entre applications et entre développeurs.  (4 février 2003)
 

[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...

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page