Les Schemas XML (recommandation XSD)

XSD (XML Schema Definition) est une recommandation du W3C, depuis mai 2001, qui précise la manière de décrire formellement les éléments d'un document XML.

Les schémas XML se présentent comme une alternative aux DTD et palient aux limites de ces dernières. On définit ainsi un mécanisme de schéma (au sens des bases de données) pour exprimer des contraintes sur un type de document XML.

XSD propose en effet , en plus des fonctionnalités fournies par les DTD (définition de règles sur un document XML, sur les attributs et les relations des uns par rapport aux autres...) des nouveautés. Citons notamment  :

Le modèle de contenu devient davantage exhaustif avec les schémas XML qu'il ne l'était auparavant avec les DTD. En effet, outre que les schémas définissent tous les éléments et la structure constituant un document XML, ils déterminent également le nombre d'occurrences des éléments, gérent les contenus mixtes, les éléments nommés, les groupes d'attributs ainsi que des annotations utilisés pour la création d'une documentation à propos du modèle de contenu.

Le but d'un schéma est de définir une classe de documents XML, et donc le terme "document instance" est souvent utilisé pour définir un document qui est valide par rapport à un schéma donné.

Les schémas XML sont relativement complexes et ce sujet en lui-même pourrait nécessiter un site dédié. Aussi nous nous contenterons ici d'en présenter les grandes lignes, étant donné que ce n'est pas le coeur de notre sujet.

Syntaxe des XML Schemas

On l'a dit les schémas sont des documents XML. Ils comportent donc un prologue.
Ils utilisent les namespace (le préfixe xsd ou xs est utilisé). Un fichier de schéma (d'extension ".xsd") sera donc du style :

<?xml version="1.0" encoding="ISO-8859-1">
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- contenu -->
</xsd:schema>

L'appel à un schéma dans le fichier de données se fera dans l'élément racine.

<?xml version="1.0" encoding="ISO-8859-1">
<elementRacine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="URIFichierXSD">

On l'a dit, une des forces de XSD est de proposer le typage des données. Nous allons donc nous intéresser de plus près à cette notion de typage. Pour affecter un type à un élément on utilisera une syntaxe du style :

<xsd:element name="nomElement" type="xsd:nomDUType"/>

Un type est un ensemble de contraintes sur les contenus d'éléments et les valeurs d'attributs. Il en existe différents types :

Les types simples

Un élément est de type simple s'il ne contient ni d'autres éléments ni d'attributs.
Les types simples sont donc prédéfinis ou dérivés de types prédéfinis.

Voici la liste des types prédéfinis, présentés selon leur hierarchie :

Par exemple, pour définir que l'élément "nom" doit être de type string on utilisera :

<xsd:element name="nom" type="xsd:string"/>


On l'a dit on peut créé un nouveau type simple en dérivant un type prédéfini. On utilisera pour cela :

Au niveau syntaxique un type simple dérivé est déclaré par un élément "simpleType". On ajoutera un élément "restriction" , "list" ou "union" dans cet élément pour définir les modifications à apporter au type simple prédéfini.

<xsd:element name="age"/>
  <xsd:simpleType>
  <xsd:restriction base="xs:integer">
  <xsd:minInclusive value="0"/>
  <xds:maxInclusive value="120"/>
  </xsd:restriction>
  </xsd:simpleType>
</xsd:element/>

On contrôle ici que l'élément "age" est de type entier et qu'il est compris entre 0 et 120.

Les types complexes

Les éléments de type complexe sont ceux qui contiennent d'autres éléments et/ou des attributs.

Les types complexes sont déclarés par l'élément "complexType" qui contient : des déclarations d'éléments contenus et/ou des déclarations d'attributs.

Les éléments sont déclarés par l'élément "element" et les attributs par l'élément "attribute".

<xsd:complexType name="adresse" >
  <xsd:sequence>
  <xsd:element name="numero" type="xsd:decimal"/>
  <xsd:element name="nomRue" type="xsd:string"/>
  <xsd:element name="codePostal" type="xsd:decimal"/>
  <xsd:element name="ville" type="xsd:string"/>
  <xsd:element name="pays" type="xsd:string"/>
  </xsd:sequence>
  <xsd:attribute name="pays" type="xsd:NMTOKEN" fixed="FR"/>
</xsd:complexType>

On vérifie ici que un "élément" adresse est correct en analysant chacun de ses sous élément et son attribut.

 

Nous porposons ici un exemple de fichier message.xsd toujours basé sur notre exemple de message.

Le langage de schémas constitue donc une pièce essentielle dans la sphère XML, d'où son essort. Il assure une évolutivité, un dynamisme et une souplesse que les DTD ne permettent pas d'apporter.


Outre les DTD et les XML Schemas, il existe d'autres langages de schémas; citons notamment deux des plus connus d'entre eux :

 

Conclusion sur les Schémas

Nous l'avons vu, l'approche par schémas est très intéressante et apporte un grand plus. On en devine notamment la portée pour des échanges entre systèmes hétérogènes : le format d'échange reste toujours identique (XML), mais on peut vérifier le contenu transféré à l'aide du typage de données, ce qui nous garantit une homogénéité des sources de données.

 

<< Page Précédente
Les entités

Plan complet du site

Page Suivante > >
XSL

-- ©
Guillaume Charpentier - Dernière mise à jour de cette page le 27/02/04 1:55 --