Vous êtes sur la page 1sur 4

Schéma XML

1.1. Généralités
Nous avons vu dans le chapitre précédent qu'il était essentiel de pouvoir spécifier des modèles
de documents XML, et que les DTD permettaient cette modélisation. Il existe d'autres langages
de modélisation pour décrire des documents XML et XMLSchema est l'un d'entre eux. Il fait
l'objet de ce chapitre.

XMLSchema n'est pas le seul langage de schémas, mais, dans ce chapitre, chaque fois que
nous parlerons de schéma, il s'agira d'un schéma XMLSchema.

1.2. DTD versus XMLSchema


Les DTD sont souvent suffisantes dans une optique documentation car elles contrôlent la
structure des documents, elles sont insuffisantes dans une optique de traitement
d'information car elles offrent peu de contrôle sur les types et les nombres d'occurrence.

 Il est impossible de spécifier un type pour les contenus textuels d'éléments. Tout
contenu textuel est #PCDATA que ce soit un entier, une date ou un texte de plusieurs
phrases.
 Le typage des valeurs d'attributs est faible (ID, IDREF, énumérations).
 Le contrôle sur le nombre d'occurrences des éléments d'un contenu se résume à 0, 1 ou
beaucoup.
 Les préfixes liés à des espaces de noms sont acceptés, mais le document perd sa
validité par rapport à la DTD (sauf siles préfixes sont introduits dans la DTD).

En plus du contrôle de la structure des documents, XMLSchema présente un certain nombre


d'avantages qui manquent aux DTD :

 Le langage XMLSchema dispose d'un système de typage complet, on verra que même
une structure de contenu est définie comme un type.
 On peut contrôler précisément le nombre d'occurrences d'éléments ou de groupes
d'éléments.
 Les espaces de noms ne posent pas de problème de validité.

Contrairement aux DTD composées de listes de définitions d'éléments, d'attributs et d'entités,


les schémas XMLSchema sont des documents XML bien formés. Ce sont donc des documents
XML qui décrivent d'autres documents XML.
2.1. Caractéristiques d'un schéma
Un schéma contient la description formelle du contenu d'un document XML. Il se présente lui-
même sous la forme d'un document XML bien formé. De ce fait il peut lui-même être décrit par
un modèle.

Un schéma XMLSchema doit donc être valide :

 Par rapport à la DTD http://www.w3.org/2001/XMLSchema.dtd.


 Par rapport au schéma http://www.w3.org/2001/XMLSchema.xsd.

Puisqu'un schéma est un document XML bien formé, il est composé d'éléments et d'attributs.
Ceux-ci appartiennent à l'espace de noms associé à
l'url http://www.w3.org/2001/XMLSchema désigné par le préfixe xs ou xsd.

Pour clarifier les choses, dans la suite de ce chapitre, nous nommerons :

 schéma : un document XML contenant un schéma servant de modèle à des documents


XML,
 document : un document XML, contenant des données, instance d'un schéma.

Les schémas sont habituellement sauvegardés dans des fichiers d'extension .xsd.

2.2. Élément racine d'un schéma


Comme tout document XML bien formé, un schéma a un élément racine dont le nom est
toujours xs:schema

Pour que le préfixe xs soit connu dans tout le schéma, il doit être déclaré dans l'élément racine
à l'aide de l'attribut xmlns:xs.

Un schéma a donc la forme suivante :

<?xml version="1.0" encoding="UTF-8"?>


<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema">

<-- corps du schéma -->

</xs:schema>
L'attribut xmlns:xs associe le préfixe xs à l'espace de nom XMLSchema, ce qui permet
d'utiliser ce préfixe pour tous les éléments et attributs du schéma.

2.3. Élément racine d'un document


La liaison entre un document XML et le schéma qui le décrit se fait dans l'élément racine du
document.

<?xml version="1.0" encoding="UTF-8"?>


<-- début du document -->
<nom_elt_racine
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="URL du schéma"

<-- corps du document -->

</nom_elt_racine>

L'attribue xmlns:xsi aossocie le préfixe xsi à l'espace de nom XMLSchema-instance, ce qui


permet d'utiliser l'attribut xsi:noNamespaceSchemaLocation pour définir l'url du schéma lié
au document.

Voici par exemple la racine classe d'un document instance du schéma classes.xsd.

<?xml version="1.0" encoding="UTF-8"?>


<-- début du document -->
<classe xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"
xsi:noNamespaceSchemaLocation="classes.xsd"

<-- corps du document -->

</classe>
Exercices d’application

Exercice 1 :

Soit la DTD suivante qui indique que l’ordre d’apparition des éléments identification, titre et salaire n’est
pas important, donner une solution à l’aide d’un schéma XML qui évite l’énumération des combinaisons
autorisées.

NB :

Le type all

Le type all est utilisé lorsque l'on veut spécifier que les éléments contenus dans un type
complexe peuvent apparaître dans n'importe quel ordre. Ils doivent cependant tous apparaître une
et une seule fois.

Voici comment se déclare le type all au niveau d'un Schéma XML :

Exercice 2 :