Vous êtes sur la page 1sur 57

ROYAUME DU MAROC

Office de la Formation Professionnelle et de la Promotion du Travail

Dvelopper des applications XML

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC

Dvelopper des applications XML

Sommaire
1.
2.

Introduction ..................................................................................... 4
Chapitre I : XML................................................................................ 4
2.1. Prsentation de XML ....................................................................... 4
2.2. Mise en page de XML ...................................................................... 5
2.3. Les avantages de XML .................................................................... 5
3.
Chapitre II : DTD .............................................................................. 6
3.1. Introduction .................................................................................. 6
3.2. Types de DTD ................................................................................ 6
3.2.1.
Introduction ............................................................................ 6
3.2.2.
Syntaxe .................................................................................. 7
3.2.3.
DTD externe ............................................................................ 7
3.3. Dclarations d'lments .................................................................. 8
3.3.1.
Gnralits .............................................................................. 8
3.3.2.
lment texte .......................................................................... 8
3.3.3.
lment vide ........................................................................... 8
3.3.4.
Indicateurs d'occurrence ........................................................... 9
3.3.5.
Squence d'lments ................................................................ 9
1. Exemple d'utilisation valide ............................................................. 9
2. Exemples d'utilisations non valides : ............................................... 10
3.3.6.
Choix d'lments ................................................................... 10
3.3.7.
lment quelconque ............................................................... 12
3.3.8.
lment contenu mixte ........................................................ 12
3.4. Dclarations d'attributs ................................................................. 12
3.4.1.
Introduction .......................................................................... 12
3.4.2.
Valeurs par dfaut .................................................................. 13
3. Dclaration d'un attribut avec une valeur par dfaut ......................... 13
4. Dclaration d'un attribut requis ...................................................... 13
5. Dclaration d'un attribut optionnel ................................................. 13
3.4.3.
Type chane de caractres ....................................................... 14
6. Dclaration d'un attribut avec une valeur par dfaut ......................... 14
7. Dclaration d'un attribut requis ...................................................... 14
8. Dclaration d'un attribut avec une valeur fixe .................................. 14
3.4.4.
Type chane de caractres ....................................................... 15
3.4.5.
Type ID ................................................................................ 15
3.4.6.
Type numr ....................................................................... 16
3.5. Dclarations d'entits ................................................................... 16
3.5.1.
Introduction .......................................................................... 16
3.5.2.
Les entits paramtriques ....................................................... 16
3.5.3.
Les entits de caractres......................................................... 17
3.5.4.
Les entits internes ................................................................ 17
3.5.5.
Les entits externes ............................................................... 17
4.
Chapitre III : XSD ........................................................................... 19
4.1. Introduction ................................................................................ 19
4.1.1.
Limitations des DTD ............................................................... 19
4.1.2.
Apports des schmas .............................................................. 19
4.2. Les premiers pas .......................................................................... 20
4.2.1.
Introduction .......................................................................... 20
4.2.2.
Structure de base................................................................... 20

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
1 - 57

Dvelopper des applications XML


4.3. Dclarations d'lments et d'attributs ............................................. 21
4.3.1.
Dclarations d'lments .......................................................... 21
4.3.2.
Dclarations d'attributs ........................................................... 21
4.3.2.1.
Dclaration simple............................................................... 21
4.3.2.2.
Contraintes doccurrences .................................................... 22
4.3.2.3.
Regroupements d'attributs ................................................... 23
4.3.2.4.
Dclaration d'lment ne contenant que du texte .................... 23
4.3.3.
Dclaration et rfrencement................................................... 24
4.4. Les types de donnes ................................................................... 24
4.4.1.
Introduction .......................................................................... 24
4.4.2.
Types simples ........................................................................ 24
4.4.2.3.
Listes ................................................................................ 25
4.4.2.4.
Unions ............................................................................... 26
4.4.3.
Les types complexes............................................................... 26
4.4.3.1.
Introduction ....................................................................... 26
4.4.3.2.
Squences dlments ......................................................... 26
4.4.3.3.
Choix dlments ............................................................... 27
4.4.3.4.
Llment All ...................................................................... 28
4.4.3.5.
Indicateurs d'occurrences..................................................... 29
4.4.3.6.
Cration de type complexe partir de types simples ............... 29
4.5. Espaces de noms ......................................................................... 30
4.5.1.
Introduction .......................................................................... 30
4.5.2.
Comment lier un fichier XML un schma ? .............................. 30
4.6. Les drivations ............................................................................ 31
4.6.1.
Introduction .......................................................................... 31
4.6.2.
Restriction de type ................................................................. 31
4.6.2.1.
Gnralits ......................................................................... 31
4.6.2.2.
Exemples ........................................................................... 32
4.7. Diverses autres fonctionnalits ...................................................... 33
4.7.1.
Inclusion de schmas ............................................................. 33
4.7.2.
Documentation ...................................................................... 33
4.7.3.
Attribut null ........................................................................... 34
5.
Chapitre IV : XSL ............................................................................ 35
5.1. Prsentation ................................................................................ 35
5.1.1.
Introduction .......................................................................... 35
5.1.2.
Structure d'un document XSL .................................................. 35
5.2. Exemples de mises en forme ......................................................... 36
5.2.1.
Exemple simple ..................................................................... 36
5.2.1.1.
Introduction ....................................................................... 36
5.2.1.2. Exemple................................................................................... 36
5.2.2.
Exemple avec boucle .............................................................. 37
5.2.2.1.
Introduction ....................................................................... 37
6.
Chapitre V : XSLT............................................................................ 39
6.1. Les expressions de slection .......................................................... 39
6.1.1.
Introduction .......................................................................... 39
6.1.2.
Slection d'lments et d'attributs............................................ 39
6.1.2.1.
Slection d'lment, syntaxe de base .................................... 39
6.1.2.2.
Slection d'lment, appel de fonctions ................................. 40
6.1.2.3.
Slection d'lment et DOM.................................................. 40
6.1.2.4.
Slection d'attributs ............................................................ 41
6.1.2.5.
Oprateurs logiques ............................................................ 41
6.2. XPath ......................................................................................... 42

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
2 - 57

Dvelopper des applications XML


6.2.1.
Introduction .......................................................................... 42
6.2.2.
Chemin de localisation ............................................................ 42
6.2.2.1.
Introduction ....................................................................... 42
6.2.2.2.
Axes .................................................................................. 43
6.2.2.3.
Prdicats ............................................................................ 44
6.2.2.4.
Syntaxe non abrge........................................................... 44
6.2.2.5.
Syntaxe abrge ................................................................. 45
6.2.3.
Fonctions de base .................................................................. 46
6.2.3.1.
Gnralits ......................................................................... 46
6.2.3.2.
Manipulation de nuds ........................................................ 46
6.2.3.3.
Manipulation de chanes de caractres ................................... 46
6.2.3.4.
Manipulation de boolens ..................................................... 47
6.2.3.5.
Manipulation de nombres ..................................................... 47
6.2.4.
lments XSLT....................................................................... 47
Gnralits ........................................................................................ 47
Introduction ....................................................................................... 47
Rappel : prologue d'un document XSL ................................................... 47
2. Les fondamentaux........................................................................... 48
Gnralits ........................................................................................ 48
<xsl:stylesheet> ................................................................................ 48
<xsl:output> ..................................................................................... 48
<xsl:template> .................................................................................. 49
<xsl:value-of> ................................................................................... 50
Ajout d'lments et d'attributs ............................................................. 50
<xsl:element> ................................................................................... 50
<xsl:attribute> .................................................................................. 51
Syntaxe courte ................................................................................... 51
Gestion des boucles ............................................................................ 52
<xsl:for-each> ................................................................................... 52
<xsl:sort> ......................................................................................... 52
<xsl:number> .................................................................................... 53
Conditions de test ............................................................................... 54
<xsl:if> ............................................................................................. 54
<xsl:choose> ..................................................................................... 54
Variables et paramtres....................................................................... 55
Introduction ....................................................................................... 55
lment <xsl:variable> ....................................................................... 55
L'lment <xsl:call-template>.............................................................. 56
Les lments <xsl:param> et <xsl:with-param> .................................... 56

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
3 - 57

Dvelopper des applications XML

1. Introduction
Prsenter les objets de formation.
Situer les apports de connaissances et tablir le lien avec les objectifs
viss par la comptence afin de susciter une motivation plus importante
du stagiaire.

2. Chapitre I : XML
2.1.

Prsentation de XML

XML (entendez eXtensible Markup Language et traduisez Langage balises


tendu, ou Langage balises extensible) est en quelque sorte un langage HTML
amlior permettant de dfinir de nouvelles balises. Il sagit effectivement dun
langage permettant de mettre en forme des documents grce des balises
(markup).
Contrairement HTML, qui est considrer comme un langage dfini et fig
(avec un nombre de balises limit), XML peut tre considr comme un
mtalangage permettant de dfinir dautres langages, cest--dire dfinir de
nouvelles balises permettant de dcrire la prsentation dun texte (Qui na jamais
dsir une balise qui nexistait pas ?).
La force de XML rside dans sa capacit pouvoir dcrire nimporte quel
domaine de donnes grce son extensibilit. Il va permettre de structurer,
poser le vocabulaire et la syntaxe des donnes quil va contenir.
En ralit les balises XML dcrivent le contenu plutt que la prsentation
(contrairement HTML). Ainsi, XML permet de sparer le contenu de la
prsentation .. ce qui permet par exemple dafficher un mme document sur
des applications ou des priphriques diffrents sans pour autant ncessiter de
crer autant de versions du document que lon ncessite de reprsentations !
XML a t mis au point par le XML Working Group sous lgide du World Wide
Web Consortium (W3C) ds 1996. Depuis le 10 fvrier 1998, les spcifications
XML 1.0 ont t reconnues comme recommandations par le W3C, ce qui en fait
un langage reconnu. (Tous les documents lis la norme XML sont consultables
et tlchargeables sur le site web du W3C, http ://www.w3.org/XML/)

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
4 - 57

Dvelopper des applications XML

2.2.

Mise en page de XML

XML est un format de description des donnes et non de leur reprsentation,


comme cest le cas avec HTML. La mise en page des donnes est assure par un
langage de mise en page tiers.
Il existe trois solutions pour mettre en forme un document XML :

CSS (Cascading StyleSheet), la solution la plus utilise actuellement, tant


donn quil sagit dun standard qui a dj fait ses preuves avec HTML
XSL (eXtensible StyleSheet Language), un langage de feuilles de style
extensible dvelopp spcialement pour XML. Toutefois, ce nouveau langage
nest pas reconnu pour linstant comme un standard officiel
XSLT (eXtensible StyleSheet Language Transformation). Il sagit dune
recommandation W3C du 16 novembre 1999, permettant de transformer un
document XML en document HTML accompagn de feuilles de style

2.3. Les avantages de XML


Voici les principaux atouts de XML :

La lisibilit : aucune connaissance ne doit thoriquement tre ncessaire


pour comprendre un contenu dun document XML
Autodescriptif et extensible
Une structure arborescente : permettant de modliser la majorit des
problmes informatiques
Universalit et portabilit : les diffrents jeux de caractres sont pris en
compte
Dployable : il peut tre facilement distribu par nimporte quels
protocoles mme de transporter du texte, comme HTTP
Intgrabilit : un document XML est utilisable par toute application
pourvue dun parser (cest--dire un logiciel permettant danalyser un code
XML)
Extensibilit : un document XML doit pouvoir tre utilisable dans tous les
domaines dapplications
Ainsi, XML est particulirement adapt lchange de donnes et de documents.
Lintrt de disposer dun format commun dchange dinformation dpend du
contexte professionnel dans lequel les utilisateurs interviennent. Cest pourquoi,
de nombreux formats de donnes issus de XML apparaissent (il en existe plus
dune centaine) :

OFX : Open Financial eXchange pour les changes dinformations dans le


monde financier
MathML : Mathematical Markup Language permet de reprsenter des
formules mathmatique
CML : Chemical Markup Language permet de dcrire des composs
chimiques

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
5 - 57

Dvelopper des applications XML


SMIL : Synchronized Multimedia Integration Language permet de crer des
prsentations multimdia en synchronisant diverses sources : audio, vido,
texte,

3. Chapitre II : DTD
3.1. Introduction
Il peut tre parfois ncessaire de prciser les balises et attributs auxquels
on a droit lors de la rdaction d'un document XML, par exemple si l'on
veut pouvoir partager le mme type de document avec une communaut
d'autres rdacteurs. Deux solutions sont possibles : les "Schmas XML"
et les "Document Type Definition". Ces dernires sont les plus simples
manipuler et sont apparues en premier, alors que les Schmas n'taient
pas encore dfinis. Ce sont les raisons pour lesquelles nous allons nous
limiter elles pour le moment. Il ne faut pas oublier nanmoins qu'il
existe une autre solution, plus complexe certes, mais aussi plus
puissante. Elle permet notamment d'informer plus efficacement
l'utilisateur sur les balises auxquelles il a droit, ou bien de spcifier de
manire plus dtaille le formatage autoris pour le contenu de la balise
ou de l'attributToute dclaration de type de document peut tre
compose de dclarations d'lments, de dclarations d'attributs, de
dclarations d'entits, de dclarations de notations et de commentaires.

3.2. Types de DTD


3.2.1.

Introduction

Une DTD peut tre stocke dans deux endroits diffrents. Elle peut tre
incorpore au document XML (elle est alors dite interne), ou bien tre un
fichier part (on parle alors de DTD externe). Cette dernire possibilit
permet de la partager entre plusieurs documents XML. Il est possible de
mler DTD interne et externe. Il existe de surcrot deux types de DTD
externes : priv ou public. Les DTD prives sont accessibles uniquement
en local (sur la machine de dveloppement), tandis que les publiques
sont disponibles pour tout le monde, tant accessibles grce un URI
(Uniform Resource Identifier). Une dclaration de type de document est
de la forme :

<!DOCTYPE elt.racine ... "..." "...">


Cette dclaration se place juste aprs le prologue du document. L'lment racine
du document XML rattach cette DTD est alors obligatoirement elt.racine. Par
exemple...

La syntaxe DTD ne diffre pas entre une DTD interne et une externe.
Document
Millsime

OFPPT @

C-B-001.doc

Avril 07

Page
6 - 57

Dvelopper des applications XML


<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE commande ... "..." "boncommande.dtd">
<commande>
<item>(...)</item>
<item>(...)</item>
<item>(...)</item>
</commande>

3.2.2.

Syntaxe

Le contenu ne change pas suivant le type de DTD, mais les dclarations


d'une DTD interne sont crites l'intrieur du prologue du document XML
alors que celles d'une DTD externe sont stockes dans un fichier...
externe
Exemple de dclarations pour une DTD interne :
<!DOCTYPE biblio[
<!ELEMENT biblio (livre)*>
<!ELEMENT livre (titre, auteur, nb_pages)>
<!ATTLIST livre
type (roman | nouvelles | poemes | thtre) #IMPLIED
lang CDATA "fr"
>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT nb_pages (#PCDATA)>
]>

3.2.3.

DTD externe

Les deux types de DTD externes sont les DTD de type public et les DTD
de type system. Le mot-clef SYSTEM indique que le fichier spcifi se
trouve sur l'ordinateur local et qu'il est disponible uniquement titre
priv. Par contre, le mot-cl PUBLIC indique une ressource disponible
pour tous sur un serveur web distant.
Exemple de dclaration de DTD externe de type SYSTEM

<!DOCTYPE biblio SYSTEM "bibliographie.dtd">

Le fichier associ est le suivant :

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
7 - 57

Dvelopper des applications XML


<?xml version="1.0" encoding="ISO-8859-1"?>
<!ELEMENT biblio (livre*)>
<!ELEMENT livre (titre, auteur, nb_pages)>
<!ATTLIST livre
type (roman | nouvelles | poemes | thtre) #IMPLIED
lang CDATA "fr"
>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT nb_pages (#PCDATA)>
Exemple de dclaration de DTD externe de type PUBLIC :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Dans l'exemple prcdent, la chane de caractres aprs le mot PUBLIC
fait rfrence tout d'abord l'identifiant de la DTD (ici -, qui signifie que
la DTD n'a pas de numro d'enregistrement officiel), au propritaire de la
DTT (ici le W3C), puis son nom, enfin sa langue.

3.3. Dclarations d'lments


3.3.1.

Gnralits

Une dclaration d'lments est de la forme :


<!ELEMENT nom type_element>
-

nom est le nom de l'lment


type_element est le type auquel il est associ.

Un lment peut tre de type texte, vide (EMPTY), squence ou choix


d'lment. Dans ces deux derniers cas, on indique la liste des lments
enfants.

3.3.2.

lment texte

Cet lment est le plus rpandu, puisque c'est celui qui contient... du
texte. Il se dclare ainsi :

<!ELEMENT elt (#PCDATA)>

3.3.3.

OFPPT @

lment vide

Document

Millsime

C-B-001.doc

Avril 07

Page
8 - 57

Dvelopper des applications XML


Un lment vide est, comme son nom l'indique, un lment qui n'a aucun
contenu -que ce soit de type texte, ou bien un autre lment. Le mot-clef
utilis pour la dclaration de ce type d'lment est EMPTY :
<!ELEMENT elt EMPTY>
Exemple d'utilisation :
<elt />
Un lment vide peut fort bien possder un ou plusieurs attributs. Par
exemple
<img width="100" height="30" src="paysage.jpg" alt="Paysage de
neige" />

3.3.4.

Indicateurs d'occurrence

Lors de la dclaration de squence ou de choix d'lments, chaque


lment enfant peut tre attribue une indication d'occurence (?, + ou *)
Exemples d'indicateur d'occurences
<!ELEMENT elt0 (elt1, elt2?, elt3+, elt*)>
1. elt1 ne comprend aucune indication d'occurrence. Il doit donc apparatre
une seule et unique fois dans l'lment elt0 ;
2. elt2 a pour indication d'occurrence ?. Cela signifie que l'lment doit
apparatre au maximum une fois (il peut ne pas apparatre du tout)
3. elt3 a pour indication d'occurrence +. Cela signifie que l'lment doit
apparatre au moins une fois
- elt4 a pour indication d'occurrence *. Cela signifie que l'lment doit
apparatre autant de fois que l'auteur le dsire.

3.3.5.

Squence d'lments

Une squence d'lments est une liste ordonne des lments qui
doivent apparatre en tant qulments enfants de l'lment que l'on est
en train de dfinir. Ce dernier ne pourra contenir aucun autre lment
que ceux figurant dans la squence. Cette liste est compose d'lments
spars par des virgules et est place entre parenthses Chaque lment
enfant doit de plus tre dclar par ailleurs dans la DTD (avant ou aprs
la dfinition de la liste, peu importe). Dans le fichier XML, ils doivent
apparatre dans l'ordre de la squence
<!ELEMENT elt0 (elt1, elt2, elt3)>

1. Exemple d'utilisation valide


OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
9 - 57

Dvelopper des applications XML


<elt0>
<elt1>(...)</elt1>
<elt2>(...)</elt2>
<elt3>(...)</elt3>
</elt0>

2. Exemples d'utilisations non valides :


Exemple 1 :
<elt0>
<elt1>(...)</elt1>
<elt3>(...)</elt3>
</elt0>
Car l'lment elt2 est manquant.
Exemple 2 :

<elt0>
<elt1>(...)</elt1>
<elt3>(...)</elt3>
<elt2>(...)</elt2>
</elt0>
Car l'ordre des lments n'est pas respect.
On rappelle qu'il est possible d'utiliser des indicateurs d'occurrence.
Par exemple
<!ELEMENT elt0 (elt1+, elt2*, elt3?)>

3.3.6.

Choix d'lments

Un choix d'lment donne... le choix dans une liste de plusieurs lments


possibles. L'utilisation prcise dpend des indicateurs d'occurrence. De mme
que pour la squence, les lments enfants doivent tre dclars dans la DTD.
Cette liste est compose d'lments spars par le caractre | (combinaison de
touches AltGr+6 sur un clavier AZERTY)
<!ELEMENT elt0 (elt1 | elt2 | elt3)>
Exemple d'utilisation valide :
<elt0><elt2>(...)</elt2></elt0>

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
10 - 57

Dvelopper des applications XML


Exemple d'utilisation non valide
<elt0>
<elt2>(...)</elt2>
<elt3>(...)</elt3>
</elt0>
Exemple d'utilisation d'un choix d'lments avec indicateurs d'occurence par
lment
<!ELEMENT choix.elt (elt1* | elt2* | elt3*)>
Exemple d'utilisation valide :
<elt0>
<elt2>(...)</elt2>
<elt2>(...)</elt2>
</elt0>
Exemples d'utilisation non valide :
<elt0>
<elt3>(...)</elt3>
<elt2>(...)</elt2>
</elt0>
<elt0>
<elt2>(...)</elt2>
<elt3>(...)</elt3>
</elt0>
Exemple d'utilisation d'un choix d'lments avec indicateur d'occurrence global :
<!ELEMENT elt0 (elt1 | elt2 | elt3)*>
Exemple d'utilisation valide :
<elt0>
<elt2>(...)</elt2>
<elt3>(...)</elt3>
<elt1>(...)</elt1>
</elt0>
Dans ce dernier cas, il n'y a pas de contrainte visible sur
l'ordre d'apparition des lments

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
11 - 57

Dvelopper des applications XML

3.3.7.

lment quelconque

L'lment quelconque est l'lment-"fourre-tout" dans une DTD. Il peut contenir


tout autre lment dfini dans la DTD, aussi bien qu'tre vide ou contenir du
texte. Les lments-enfants ventuels peuvent apparatre dans n'importe quel
ordre, et en quantit non dfinie. Il est prfrable de ne pas utiliser trop souvent
ce type de dclaration, car on perd les avantages qu'offre la rdaction d'une
DTD, qui sont de fixer des contraintes prcises sur la structure du document XML
qui lui est li. Le mot-clef utilis pour la dclaration de ce type d'lment est
ANY.

<!ELEMENT elt ANY>

3.3.8.

lment contenu mixte

Un lment contenu mixte peut contenir aussi bien du texte, que des
lments-enfants. Il se prsente comme une liste de choix, avec des indicateurs
d'occurrence bien choisis. Le texte contenu peut se trouver n'importe quel
endroit dans l'lment, et peut tre une section CDATA
Exemple de dclaration :
<!ELEMENT citation (#PCDATA | auteur)*>
Exemple d'utilisation
<citation>
tre ou ne pas tre
</citation>

<auteur>Shakespeare</auteur>

3.4. Dclarations d'attributs


3.4.1.

Introduction

Comme on peut trouver dans un document XML des lments possdant des
attributs, il est normal que la DTD permette de dfinir des contraintes sur ces
derniers. On peut dclarer et attacher un lment donn chaque attribut
sparment, mais il est prfrable de les assembler sous la forme d'une liste.
Chaque attribut dfini dans la liste possde un nom et un type.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
12 - 57

Dvelopper des applications XML


On peut lui donner une valeur par dfaut, ou bien le spcifier obligatoire. Le motclef de cette dclaration est ATTLIST.

3.4.2.

Valeurs par dfaut

Chaque attribut peut tre requis, optionnel ou fixe et avoir une valeur par dfaut.
Les exemples suivants montrent la dclaration d'un attribut appel attr attach
un lment nomm elt
3. Dclaration d'un attribut avec une valeur par dfaut
<!ELEMENT elt (...)>
<!ATTLIST elt attr CDATA "valeur">
Un tel attribut n'est pas obligatoire. S'il est omis dans le fichier XML lors de
l'utilisation de l'lment elt, il est considr comme valant valeur. Dans cet
exemple, si on crit <elt>(...)</elt>, cela est quivalent crire <elt
attr="valeur">(...)>/elt>

4.

Dclaration d'un attribut requis

<!ELEMENT elt (...)>


<!ATTLIST elt attr CDATA #REQUIRED>

Un tel attribut est obligatoire. Son absence dclenche une erreur du vrificateur
syntaxique sur le fichier XML.
5. Dclaration d'un attribut optionnel
<!ELEMENT elt (...)>
<!ATTLIST elt attr CDATA #IMPLIED>
3.4.2.1. Dclaration d'un attribut avec une valeur fixe
L'utilit d'un tel attribut peut sembler bizarre premire vue, puisqu'il ne peut
prendre qu'une seule valeur. Cette fonctionnalit est cependant utile lors d'une
mise jour d'une DTD, pour prserver la compatibilit avec des versions
ultrieures

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
13 - 57

Dvelopper des applications XML

3.4.3.

Type chane de caractres

Chaque attribut peut tre requis, optionnel ou fixe et avoir une valeur par dfaut.
Les exemples suivants montrent la dclaration d'un attribut appel attr attach
un lment nomm elt

6.

Dclaration d'un attribut avec une valeur par dfaut

<!ELEMENT elt (...)>


<!ATTLIST elt attr CDATA "valeur">
Un tel attribut n'est pas obligatoire. S'il est omis dans le fichier XML lors de
l'utilisation de l'lment elt, il est considr comme valant valeur. Dans cet
exemple, si on crit <elt>(...)</elt>, cela est quivalent crire <elt
attr="valeur">(...)>/elt>

7. Dclaration d'un attribut requis

<!ELEMENT elt (...)>


<!ATTLIST elt attr CDATA #REQUIRED>
Un tel attribut est obligatoire. Son absence dclenche une erreur du
vrificateur syntaxique sur le fichier XML
3.4.3.1. Dclaration d'un attribut optionnel
<!ELEMENT elt (...)>
<!ATTLIST elt attr CDATA #IMPLIED>
8. Dclaration d'un attribut avec une valeur fixe
<!ELEMENT elt (...)>
<!ATTLIST elt attr CDATA #FIXED "valeur">
L'utilit d'un tel attribut peut sembler bizarre premire vue, puisqu'il ne peut
prendre qu'une seule valeur. Cette fonctionnalit est cependant utile lors d'une
mise jour d'une DTD, pour prserver la compatibilit avec des versions
ultrieures

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
14 - 57

Dvelopper des applications XML

3.4.4.

Type chane de caractres

Il s'agit l du type d'attribut le plus courant. Une chane de caractres


peut tre compose de caractres ainsi que d'entits analysables. Le
mot-clef utilis pour la dclaration de chane de caractre est CDATA
Exemple de dclaration de CDATA
<!ELEMENT elt (...)>
<!ATTLIST elt attr CDATA #IMPLIED>
Exemples d'utilisations :
<elt attr="Chane de caractres"></elt>
<!ENTITY car "caractres">
<elt attr="Chane de &car;">(...)</elt>
1.
2.

3.4.5.

Type ID

Ce type sert indiquer que l'attribut en question peut servir d'identifiant dans le
fichier XML. Deux lments ne pourront pas possder le mme atribut possdant
la mme valeur
Exemple de dclaration de type ID optionnel

<!ELEMENT elt (...)>


<!ATTLIST elt attr ID #IMPLIED>
<!ELEMENT elt1 (...)>
<!ATTLIST elt1 attr ID #IMPLIED>
<!ELEMENT elt2 (...)>
<!ATTLIST elt2 attr ID #IMPLIED>
La dclaration prcdente interdit par exemple
<elt1 attr="machin"></elt1>
<elt2 attr="truc"></elt2>
<elt1 attr="machin"></elt1>
ainsi que
<elt1 attr="machin"></elt1>
<elt2 attr="machin"></elt2>
<elt1 attr="truc"></elt1>

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
15 - 57

Dvelopper des applications XML

3.4.6.

Type numr

On peut parfois dsirer limiter la liste de valeurs possibles pour un attribut. On le


dfinit alors comme tant de type numr. Donner une autre valeur dans le
fichier XML provoque une erreur.
Exemple de dclaration d'une liste de choix d'attributs

<!ELEMENT img EMPTY>


<!ATTLIST img format (BMP | GIF | JPEG) "JPEG">
Cet exemple dclare un attribut format d'un lment img. La valeur de cet
attribut peut tre BMP, GIF ou JPEG. Si aucune valeur n'est affecte cet
attribut, c'est la valeur par dfaut qui le sera, ici JPEG. On notera l'absence de
guillemets dans la liste des valeurs possibles. C'est une source courante d'erreur
dans la rdaction d'une DTD

3.5. Dclarations d'entits


3.5.1.

Introduction

Les dclarations d'entits permettent de disposer de l'quivalent de raccourcis


clavier et de caractres a priori non accessibles dans le jeu de caractres
slectionn

3.5.2.

Les entits paramtriques

Elles servent dfinir des symboles qui seront utiliss ailleurs dans la DTD. Ce
sont en quelque sorte des raccourcis d'criture : partout o une entit est
mentionne, elle peut tre remplace par la chane de caractres qui lui est
associe. Ce mcanisme s'apparente un mcanisme de "macro"Les entits
paramtriques ne peuvent pas tre utilises en-dehors d'une DTD
Exemple tir de la spcification du langage HTML

<!ENTITY % heading "H1|H2|H3|H4|H5|H6">


L'exemple prcdent a pour effet d'indiquer au systme que toute occurrence de
% heading; doit tre remplace par H1|H2|H3|H4|H5|H6
Ce mcanisme peut galement servir utiliser un nom relativement
comprhensible la place d'une squence de caractres peu vocatrice.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
16 - 57

Dvelopper des applications XML


La dfinition d'une entit peut galement faire rfrence d'autres entits ; la
substitution est alors effectue de proche en proche

3.5.3.

Les entits de caractres

Elles servent donner un nom facilement lisible des caractres qui ne sont pas
reprsentables dans l'alphabet utilis, ou qui ne sont pas disponibles au clavier.
Exemples tirs de la DTD du langage HTML 4.01

<!ENTITY nbsp "&#160;">


<!ENTITY eacute "&#233;">
Les entits de caractres dfinies dans une DTD peuvent tre utilises dans un
document XML rfrenant cette DTD l'aide de la notation &NomEntit;.

3.5.4.

Les entits internes

Ce sont des symboles pouvant tre dfinis dans une DTD et utiliss dans un
document XML comme raccourcis d'criture. La dfinition complte du symbole
est entirement incluse dans la DTD.
Exemple
<!ENTITY ADN "Acide dsoxyribonuclique">

Dans le fichier XML, l'appel &ADN; sera aumatiquement remplac, lors de


l'affichage ou du traitement, par la chane de caractres "Acide
dsoxyribonuclique".

3.5.5.

Les entits externes

Il s'agit soit de symboles pouvant tre dfinis dans un autre fichier, mais pouvant
tre utiliss dans un document XML ou la DTD elle-mme.
Par exemple :

<!ENTITY Inclusion SYSTEM "toto.xml">


<!ENTITY % Inclusion SYSTEM "toto.inc">

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
17 - 57

Dvelopper des applications XML


Dans le fichier XML, le contenu du fichier toto.xml sera insr l'appel de l'entit
&Inclusion;, et dans la DTD, le contenu du fichier toto.inc sera insr l'appel de
l'entit &Inclusion ;
... soit de symboles pouvant tre dfinis dans une autre DTD et utiliss dans la
DTD courante :

<!ENTITY % HTMLSpecial PUBLIC "-//W3C//ENTITIES Special for


XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
Le contenu de cette DTD (qui peut tre de type SPECIAL ou PUBLIC) est
import dans la DTD courante par l'appel de %HTMLSpecial;.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
18 - 57

Dvelopper des applications XML

4. Chapitre III : XSD


4.1.

Introduction

4.1.1.

Limitations des DTD

Lors de son lancement, XML a t peru comme une relle chance pour les
dveloppeurs, d'avoir disposition un langage simple d'utilisation, portable sans
difficult d'une machine -et d'une application- une autre, et libre de droits.
Dans les premiers temps, un fichier XML, si on voulait le standardiser en utilisant
un vrai langage gnral de description, devait dpendre d'une DTD. Mais ce
format de description, hrit de SGML, souffre de nombreuses dficiences.
1. Premirement, les DTD ne sont pas au format XML. Cela signifie qu'il est
ncessaire d'utiliser un outil spcial pour "parser" un tel fichier, diffrent
de celui utilis pour l'dition du fichier XML
2. Deuximement, les DTD ne supportent pas les "espaces de nom" (nous
reviendrons sur cette notion plus loin). En pratique, cela implique qu'il
n'est pas possible, dans un fichier XML dfini par une DTD, d'importer des
dfinitions de balises dfinies par ailleurs
3. Troisimement, le "typage" des donnes est extrmement limit.

4.1.2.

Apports des schmas

Conu pour pallier aux dficiences pr-cites des DTD, XML Schma propose, en
plus des fonctionnalits fournies par les DTD, des nouveauts :
Le typage des donnes est introduit, ce qui permet la gestion de boolens,
d'entiers, d'intervalles de temps... Il est mme possible de crer de nouveaux
types partir de types existants.
La notion d'hritage. Les lments peuvent hriter du contenu et des attributs
d'un autre lment. C'est sans aucun doute l'innovation la plus intressante de
XML Schma.
Le support des espaces de nom
Les indicateurs d'occurrences des lments peuvent tre tout nombre non ngatif
(rappel : dans une DTD, on tait limit 0, 1 ou un nombre infini d'occurrences
pour un lment).
Les schmas sont trs facilement concevables par modules.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
19 - 57

Dvelopper des applications XML

4.2. Les premiers pas


4.2.1.

Introduction

Le but d'un schma est de dfinir une classe de documents XML. Il permet de
dcrire les autorisations d'imbrication et l'ordre d'apparition des lments et de
leurs attributs, tout comme une DTD. Mais il permet aussi d'aller au-del
Un premier point intressant est qu'un fichier Schma XML est un document
XML. Cela permet un tel document d'tre manipul de la mme manire que
n'importe quel autre fichier XML, et en particulier par une feuille de style XSL. Il
est notamment possible d'automatiser, par exemple, la cration d'une
documentation partir d'un schma, fond sur les commentaires et explications
qui s'y trouvent. C'est d'ailleurs chose facile avec l'diteur oXygen. Il est facile,
via le menu Modules d'extension>Schema Documentation, partir d'un exemple
de schma, de produire la documentation correspondante
Le vocabulaire de XML Schma est compos d'environ 30 lments et attributs.
Ce vocabulaire est, de manire bizarrement rcursive et "auto-rfrente", dfini
dans un Schma. Mais il existe galement une DTD

4.2.2.

Structure de base

Comme tout document XML, un Schema XML commence par un prologue, et a un


lment racine.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
<!-- dclarations d'lments, d'attributs et de types ici -->
</xsd:schema>
L'lment racine est l'lment xsd:schema. Pour le moment, oubliez l'attribut
xmlns:xsd (dont le rle est le mme que celui que nous avons dj rencontr
lors du cours sur les feuilles de style), et qui fait rfrence l'"espace de noms"
utilis pour l'criture du fichier. Il faut simplement retenir que tout lment d'un
schma doit commencer par le prfixe xsd.
Nous allons voir, par la suite, comment dclarer lments et attributs l'aide
d'un schma.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
20 - 57

Dvelopper des applications XML

4.3. Dclarations d'lments et d'attributs


4.3.1.

Dclarations d'lments

Un lment, dans un schma, se dclare avec la balise <xsd:element>. Par


exemple
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
<xsd:element name="contacts" type="typeContacts"></xsd:element>
<xsd:element name="remarque" type="xsd:string"></xsd:element>
<!-- dclarations de types ici -->
</xsd:schema>
Le schma prcdent dclare deux lments : un lment contacts et un lment
remarque. Chaque lment est "typ" -c'est--dire qu'il doit respecter un certain
format de donnes. L'lment contacts est ainsi du type typeContacts, qui est un
type complexe dfini par l'utilisateur. L'lment remarque quant lui est du type
xsd:string qui est un type simple prdfini de XML Schema.
Chaque lment dclar est associ un type de donnes via l'attribut type. Les
lments pouvant contenir des lment-enfants ou possder des attributs sont
dits de type complexe, tandis que les lments n'en contenant pas sont dits de
type simple. Nous reviendrons plus loin sur cette notion de type de donnes.

4.3.2.

Dclarations d'attributs

4.3.2.1. Dclaration simple


A la diffrence des lments, un attribut ne peut tre que de type simple. Cela
signifie que les attributs, comme avec les DTD, ne peuvent contenir d'autres
lments ou attributs. De plus, les dclarations d'attributs doivent tre places
aprs les dfinitions des types complexes, autrement dit, aprs les lments
<xsd:sequence>, <xsd:choice> et <xsd:all>. Pour mmoire, rappelons que
dans une DTD, l'ordre des dclarations n'a pas d'importance.
L'exemple suivant montre la dclaration d'un attribut maj de type xsd:date (un
autre type simple) qui indique la date de dernire mise jour de la liste des
contacts.

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
<xsd:element name="contacts" type="typeContacts"></xsd:element>
<xsd:element name="remarque" type="xsd:string"></xsd:element>
<!-- dclarations de types ici -->
<xsd:complexType name="typeContacts">
<!-- dclarations du modle de contenu ici -->
<xsd:attribute name="maj" type="xsd:date" />
</xsd:complexType>
</xsd:schema>

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
21 - 57

Dvelopper des applications XML


4.3.2.2. Contraintes doccurrences
Tout comme dans une DTD, un attribut peut avoir un indicateur d'occurences.
L'lment attribute d'un Schema XML peut avoir trois attributs optionnels : use,
default et fixed. Des combinaisons de ces trois attributs permettent de
paramtrer ce qui est acceptable ou non dans le fichier XML final (attribut
obligatoire, optionnel, possdant une valeur par dfaut...). Par exemple, la ligne
suivante permet de rendre l'attribut maj optionnel, avec une valeur par dfaut au
11 octobre 2003 s'il n'apparat pas (le format de date est standardis : cette
date s'crit donc l'anglo-saxonne 2003/10/11 ; cela permet en outre de plus
facilement classer les dates)
<xsd:attribute name="maj" type="xsd:date" use="optional"
default="2003-10-11" />
Quand l'attribut fixed est renseign, la seule valeur que peut prendre l'attribut
dclar est celle de l'attribut fixed. Cet attribut permet de "rserver" des noms
d'attributs pour une utilisation future, dans le cadre d'une mise jour du
schma.
Le tableau suivant prsente une comparaison entre le format DTD et le XML
Schema

DTD

Attribu
t use

#REQUIR
ED

"blabla"
#REQUIRED

#IMPLIED
"blabla"
#IMPLIED
-

Require
Require

Attrib
ut
default

Commentair

blabla

optional

optional

blabla

Prohibit
ed

Cet
attribut
ne
doit
pas
apparatre

Table 1. Contraintes d'occurrences fixables par les attributs use et default

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
22 - 57

Dvelopper des applications XML


Il est noter que la valeur de l'attribut default doit tre conforme au type
dclar.
Par exemple :

<xsd:attribute name="maj" type="xsd:date" use="optional" default="43" />

Produirait une erreur la validation du schma


Un autre type de dclaration d'attributs dans les DTD, la liste de choix, est
possible grce une restriction de type

4.3.2.3. Regroupements d'attributs


XML Schema propose une fonctionnalit supplmentaire, permettant de dclarer
des groupes d'attributs (groupes auxquels il est possible de faire appel lors d'une
dclaration d'lments). Cela permet d'viter de rpter des informations de
dclarations.
4.3.2.4. Dclaration d'lment ne contenant que du texte
Un tel lment est de type complexe, car il contient au moins un attribut. Afin de
spcifier qu'il peut contenir galement du texte, on utilise l'attribut mixed de
l'lment <xsd;complexType>. Par dfaut, mixed="false"; il faut dans ce cas
forcer mixed="true".
Par exemple :

<xsd:element name="elt">
<xsd:complexType mixed="true">
<xsd:attribute name="attr" type="xsd:string" use="optional" />
</xsd:complexType>
</xsd:element>

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
23 - 57

Dvelopper des applications XML

4.3.3.

Dclaration et rfrencement

La procdure prcdente de dclaration d'lments peut amener une structure


de type "poupe russe" des dclarations. Il est beaucoup plus avantageux, pour
des raisons de clart, d'ordonner ces dclarations, ainsi qu'on peut le voir sur cet
exemple (on ne fera pas attention, pour le moment, aux "dfinitions de type")
Il est recommand de commencer par dclarer les lments et attributs de type
simple, puis ceux de type complexe. On peut en effet faire "rfrence", dans une
dclaration de type complexe, un lment de type simple pralablement dfini.
Par exemple

<xsd:element name="pages"
type="xsd:positiveInteger"></xsd:element>
<xsd:element name="auteur" type="xsd:string"></xsd:element>
<xsd:element name="livre">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="auteur" />
<xsd:element ref="pages" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

4.4. Les types de donnes


4.4.1.

Introduction

Ainsi que nous l'avons dj brivement signal, XML Schema permet de spcifier
des types de donnes bien plus finement que le langage DTD. Il distingue
notamment types simples et types complexes

4.4.2.

Types simples

4.4.2.1. Gnralits
Les types de donnes simples ne peuvent comporter ni attributs, ni lments
enfants. Il en existe de nombreux, prdfinis, mais il est galement possible d'en
"driver" de nouveaux (nous reviendrons plus loin sur cette fonctionnalit).
Enfin, il est possible de dclarer des "listes" de types
4.4.2.2. Bibliothque de types intgres
Nombreux sont les types prdfinis dans la bibliothque de types intgrs de
XML Schema. la figure suivante en donne la hirarchie, et leur liste dtaille
figure sur le site du W3C

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
24 - 57

Dvelopper des applications XML

Les types de donnes les plus simples (les chanes de caractres) que
permettaient les DTDs sont conservs, mais d'autres ont fait leur apparition. On
pourra envisager, par exemple, dans un schma dcrivant un bon de commande,
la dclaration d'un attribut quantite.

<xsd:attribute name="quantite" type="xsd:positiveInteger"


use="default" value="1" />
Qui force la valeur de l'attribut un tre un entier positif. Un bon de commande
XML suivant ce schma, ayant une commande spcifiant quantite="-3" sera alors
automatiquement refus par le systme. Un tel document peut ds lors tre
enregistr directement dans une base de donnes, sans contrle supplmentaire
sur ce point

4.4.2.3. Listes
Les types listes sont des suites de types simples (ou atomiques). XML Schema
possde trois types de listes intgrs : NMTOKENS, ENTITIES et IDREFS. Il est
galement possible de crer une liste personnalise, par "drivation" de types
existants.
Par exemple :

<xsd:simpleType name="numroDeTlphone">
<xsd:list itemType="xsd:unsignedByte" />
</xsd:simpleType>

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
25 - 57

Dvelopper des applications XML


Un lment conforme cette dclaration serait <tlphone>01 44 27 60
11</tlphone>.
Il est galement possible d'indiquer des contraintes plus fortes sur les types
simples ; ces contraintes s'appellent des "facettes". Elles permettent par exemple
de limiter la longueur de notre numro de tlphone 10 nombres.
4.4.2.4. Unions
Les listes et les types simples intgrs ne permettent pas de choisir le type de
contenu d'un lment. On peut dsirer, par exemple, qu'un type autorise soit un
nombre, soit une chane de caractres particuliers. Il est possible de le faire
l'aide d'une dclaration d'union. Par exemple, sous rserve que le type simple
numroDeTlphone ait t pralablement dfini (voir prcdemment), on peut
dclarer

<xsd:simpleType name="numroDeTlphoneMnmoTechnique">
<xsd:union memberTypes="xsd:string numroDeTlphone" />
</xsd:simpleType>
Les lments suivants sont alors des "instances" valides de cette dclaration :
<tlphone>18</tlphone>
<tlphone>Pompiers</tlphone>

4.4.3.

Les types complexes

4.4.3.1. Introduction
Un lment de type simple ne peut contenir de sous-lment. Il est ncessaire
pour cela de le dclarer de type "complexe". On peut alors dclarer, des
squences d'lments, des types de choix ou des contraintes d'occurrences
4.4.3.2. Squences dlments
Nous savons dj comment, dans une DTD, nous pouvons dclarer un lment
comme pouvant contenir une suite de sous-lments, dans un ordre dtermin.
Il est bien sr possible de faire de mme avec un schma.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
26 - 57

Dvelopper des applications XML


On utilise pour ce faire l'lment xsd:sequence, qui reproduit loprateur,
du langage DTD. Ainsi...

<xsd:complexType>
<xsd:sequence>
<xsd:element name="nom" type="xsd:string" />
<xsd:element name="prnom" type="xsd:string" />
<xsd:element name="dateDeNaissance" type="xsd:date" />
<xsd:element name="adresse" type="xsd:string" />
<xsd:element name="adresseElectronique" type="xsd:string" />
<xsd:element name="tlphone" type="numroDeTlphone" />
</xsd:sequence>
</xsd:complexType>
Est quivalent une dclaration d'lment, dans une DTD, o apparatrait (nom,
prnom, dateDeNaissance, adresse, adresseElectronique, tlphone)
4.4.3.3. Choix dlments
On peut vouloir modifier la dclaration de type prcdente en stipulant qu'on
doive indiquer soit l'adresse d'une personne, soit son adresse lectronique. Pour
cela, il suffit d'utiliser un lment xsd:choice

<xsd:complexType name="typePersonne">
<sequence>
<xsd:element name="nom" type="xsd:string" />
<xsd:element name="prnom" type="xsd:string" />
<xsd:element name="dateDeNaissance" type="xsd:date" />
<xsd:choice>
<xsd:element name="adresse" type="xsd:string" />
<xsd:element name="adresseElectronique" type="xsd:string" />
</xsd:choice>
</sequence>
<xsd:element name="tlphone" type="numroDeTlphone" />
</xsd:complexType>
Ce connecteur a donc les mmes effets que l'oprateur | dans une DTD.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
27 - 57

Dvelopper des applications XML


4.4.3.4. Llment All
Cet lment est une nouveaut par rapport aux DTD. Il indique que les lments
enfants doivent apparatre une fois (ou pas du tout), et dans n'importe quel
ordre. Cet lment xsd:all doit tre un enfant direct de l'lment
xsd:complexType.
Par exemple

<xsd:complexType>
<xsd:all>
<xsd:element name="nom" type="xsd:string" />
<xsd:element name="prnom" type="xsd:string" />
<xsd:element name="dateDeNaissance" type="xsd:date" />
<xsd:element name="adresse" type="xsd:string" />
<xsd:element name="adresseElectronique" type="xsd:string" />
<xsd:element name="tlphone" type="numroDeTlphone" />
</xsd:all>
</xsd:complexType>
Indique que chacun de ces lments peut apparatre une fois ou pas du tout
(quivalent de l'oprateur ? dans une DTD), et que l'ordre des lments n'a pas
d'importance (cela n'a pas d'quivalent dans une DTD).
Les fils de l'lment xsd:all doivent imprativement apparatre au plus une fois,
ce qui signifie que deux attributs, que nous allons voir maintenant, doivent tre
renseigns. Ces attributs sont minoccurs et maxoccurs.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
28 - 57

Dvelopper des applications XML


4.4.3.5. Indicateurs d'occurrences
Dans une DTD, un indicateur d'occurrence ne peut prendre que les valeurs 0, 1
ou l'infini. On peut forcer un lment sselt tre prsent 378 fois, mais il faut
pour cela crire (sselt, sselt..., sselt, sselt) 378 fois. XML Schema permet de
dclarer directement une telle occurence, car tout nombre entier non ngatif
peut tre utilis. Pour dclarer qu'un lment peut tre prsent un nombre
illimit de fois, on utilise la valeur unbounded. Les attributs utiles sont minOccurs
et maxOccurs, qui indiquent respectivement les nombres minimal et maximal de
fois o un lment peut apparatre. Le tableau suivant rcapitule les possibilits :
Dans une DTD
*

Valeur de minOccurs

Valeur de maxOccurs

unbounded

1
+

unbounded

(pas ncessaire, valeur par


dfaut)

1
?

(pas

1
rien

(pas
ncessaire,
valeur par dfaut)

ncessaire,
dfaut)

valeur

par

valeur

par

1
(pas

ncessaire,
dfaut)

Table 2. Liste des indicateurs d'occurrence

4.4.3.6. Cration de type complexe partir de types simples


Il est possible galement de crer un type complexe partir d'un type simple.
On peut avoir besoin de dfinir un lment contenant une valeur simple, et
possdant un attribut, comme <poids unite="kg">67</poids>, par exemple. Un
tel lment ne peut pas tre dclar de type simple, car il contient un attribut. Il
faut driver un type complexe partir dui type simple positiveInteger :

<xsd:complexType name="typePoids">
<xsd:simpleContent>
<xsd:extension base="xsd:positiveInteger">
<xsd:attribute name="unite" type="xsd:string" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
29 - 57

Dvelopper des applications XML

4.5. Espaces de noms


4.5.1.

Introduction

La notion d'espace de nom est complexe ; elle permet un document XML


quelconque d'utiliser les balises dfinies dans un schma donn... quelconque.
Nous avons dj utilis cette notion :
Dans les feuilles de style XSL, o nous utilisions des lments prfixs par xsl,
aprs avoir crit
<xsl:stylesheet version="1.0"
xmlns:xsl=http://www.w3.org/1999/XSL/Transform">
dans un schma, o nous utilisions des lments prfixs par xsd, aprs avoir
crit <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
Cela signifie que l'espace de nom auquel ces balises font rfrence, l o elles
sont dfinies, est un schma particulier, que l'on peut consulter.

4.5.2.

Comment lier un fichier XML un schma ?

Nous n'allons pas ici entrer dans les dtails de la notion d'espace de nom, mais
simplement apprendre valider un document XML d'aprs un Schema XML. On
utilise pour ce faire le prfixe xmlns.
Nous avons dj vu le cas, quivalent une DTD de type PUBLIC, o le
schma est... public. Un schma est en effet un document XML, et on trouve
dans
son
lment
racine
l'attribut
xmlns:xsd="http://www.w3.org/2001/XMLSchema". Cela signifie que dans le
document, tous les lments commenant par xsd sont rfrencs cette URL.
Donc
si
on
a
dpos
un
schma

l'adresse
http://www.monsite.org/collection_schemas/biblio, on peut l'appeler par
<xsd:biblio xmlns="http://www.monsite.org/collection_schemas/biblio">.
Dans le cas d'une rfrence locale, correspondant une DTD de type
SYSTEM, on fait rfrence au schma dans le document XML en utilisant l'attribut
noNamespaceSchemaLocation, par
<biblio
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="lien_relatif_vers_le_schema">. Par exemple
<biblio
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="biblio10.xsd">.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
30 - 57

Dvelopper des applications XML

4.6. Les drivations


4.6.1.

Introduction

Les types simples et complexes permettent dj de faire plus de choses que les
dclarations dans le langage DTD. Il est possible de raffiner leur dclaration de
telle manire qu'ils soient une "restriction" ou une extension d'un type dj
existant, en vue de prciser un peu plus leur forme. Nous allons nous limiter
dans ce cours d'initiation la restriction des types simples.

4.6.2.

Restriction de type

4.6.2.1. Gnralits
On peut appliquer une "drivation" aussi bien un type simple, qu' un type
complexe. La drivation par restriction permet de crer de nouveaux types
simples partir des types simples prdfinis par le format XML Schema. On
utilise pour ce faire des "facettes", qui sont des contraintes supplmentaires
appliques un type simple particulier.
Une "facette" permet de placer une contrainte sur l'ensemble des valeurs que
peut prendre un type de base. Par exemple, on peut souhaiter crer un type
simple, appel MonEntier, limit aux valeurs comprises entre 0 et 99 inclus. On
drive ce type partir du type simple prdfini nonNegativeInteger, en utilisant
la facette maxExclusive.

<xsd:simpleType name="monEntier">
<xsd:restriction base="nonNegativeInteger">
<xsd:maxExclusive value="100" />
</xsd:restriction>
</xsd:simpleType>
Il existe un nombre important de facettes qui permettent de :
fixer, restreindre ou augmenter la longueur minimale ou maximale d'un
type simple
numrer toutes les valeurs possibles d'un type
prendre en compte des expressions rgulires
fixer la valeur minimale ou maximale d'un type (voir l'exemple ci-dessus)
fixer la prcision du type...

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
31 - 57

Dvelopper des applications XML


4.6.2.2. Exemples
On peut utiliser cette fonctionnalit pour reproduire ce qui, dans les DTD,
permettait de limiter les valeurs de certains attributs. Ainsi...
<xsd:attribute name="jour" type="typeJourSemaine"
use="required" />
<xsd:simpleType name="jourSemaine">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="lundi" />
<xsd:enumeration value="mardi" />
<xsd:enumeration value="mercredi" />
<xsd:enumeration value="jeudi" />
<xsd:enumeration value="vendredi" />
<xsd:enumeration value="samedi" />
<xsd:enumeration value="dimanche" />
</xsd:restriction>
</xsd:simpleType>
Pour limiter la longueur d'une chane :
<xsd:simpleType name="typeMotLangueFrancaise">
<xsd:restriction base="xsd:string">
<xsd:length value="21" />
</xsd:restriction>
</xsd:simpleType>
Plus complexe, on peut utiliser des expressions rgulires, qui permettent de
spcifier quels sont les caractres autoriss, l'aide de l'lment <xsd:pattern>.
Par exemple...
<xsd:simpleType name="typeAdresseElectronique">
<xsd:restriction base="xsd:string">
<xsd:pattern value="(.)+@(.)+" />
</xsd:restriction>
</xsd:simpleType>
Dans cet exemple, (.)+ signifie que l'on peut mettre n'importe quel caractre
au moins une fois, et qu'entre les deux chanes doit imprativement apparatre le
caractre @.
Un numro ISBN est un rfrent international pour une publication. Il s'agit
d'un numro 10 chiffres. On peut le dclarer ainsi :
<xsd:simpleType name="typeISBN">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]{10}" />
</xsd:restriction>
</xsd:simpleType>

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
32 - 57

Dvelopper des applications XML


Bien sr, toutes les facettes ne sont pas acceptes par tous les types. Il serait
fastidieux ici d'en donner la liste ; elle est accessible sur le site du W3C
l'adresse http://www.w3.org/TR/xmlschema-0/#SimpleTypeFacets.

4.7.

Diverses autres fonctionnalits

4.7.1.

Inclusion de schmas

Un Schema XML a rapidement tendance devenir... verbeux. Autrement dit, il


devient rapidement suffisamment long pour que sa complexit apparente rebute
l'oeil humain. Il est alors plus raisonnable de le scinder en plusieurs morceaux,
chacun charg de dfinir prcisment tel ou tel sous-domaine du schma. Il est
alors possible d'inclure plusieurs schmas dans un seul, l'aide de l'lment
xsd:include. Cela offre de plus l'norme avantage de modulariser un schma, et
donc de pouvoir sans difficult importer certaines parties partir de schmas
dj existants. Nul besoin de rinventer la roue, ou de procder de masifs
"copier/coller", en ayant besoin chaque fois que l'on fait une mise jour, de
tout reprendre.
Supposons par exemple que nous ayons dfini le schma d'une bibliographie
dans le cadre plus gnral de l'criture d'un mmoire. Ce Schema XML est stock
l'URL http://www.monsite.org/schemas/biblio.xsd. Nous avons besoin d'une
bibliographie pour une autre aplication -par exemple, lister un ensemble de
ressources pour un site Web de e-formation. Nous pouvons inclure le schma
prcdemment crit l'aide de la commande...
<xsd:include
schemaLocation="http://www.monsite.org/schemas/biblio.xsd" />
Il s'agit d'une sorte de "copier-coller" du contenu de la bibliographie dans le
schma en cours d'criture. La seule condition est que le targetNameSpace soit
le mme dans le Schema XML inclus et dans le Schema XML importateur.

4.7.2.

Documentation

XML Schema permet, outre l'utilisation des commentaires comme tout format
XML, l'adjonction de documentation aux lments.
La documentation l'intention des lecteurs humains peut tre dfinie dans des
lments xsd:documentation, tandis que les informations l'intention de
programmes doivent tre incluses dans des lments xsd:appinfo. Ces deux
lments doivent tre placs dans un lment xsd:annotation. Ils disposent
d'attributs optionnels : xml:lang et source, qui est une rfrence une URI
pouvant tre utilise pour identifier l'objectif du commentaire ou de l'information.
Les lmenst xsd:annotation peuvent tre ajouts au dbut de la plupart des
constructions. Voir par exemple le schma biblio10.xsd dj donn.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
33 - 57

Dvelopper des applications XML

4.7.3.

Attribut null

Il est toujours prfrable de pouvoir indiquer explicitement qu'un lment est


non renseign plutt que d'omettre cet lment. La valeur null des bases de
donnes relationnelles est utilise dans ce but. XML Schema intgre un
mcanisme similaire permettant d'indiquer qu'un lment peut tre non
renseign.
Nous dclarons maintenant l'lment courriel comme pouvant tre null l'aide
de l'attribut nullable du vocabulaire de XML Schema :
<personne>
<nom>Jean Dupont</nom>
<courriel xsi:null></courriel>
</personne>
Cet attribut doit toujours tre prfix par xsi. Quant l'lment portant cet
attribut, il peut contenir d'autres attributs, mais pas de sous-lment.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
34 - 57

Dvelopper des applications XML

5. Chapitre IV : XSL
5.1.

Prsentation

5.1.1.

Introduction

XSL signifie eXtensive Stylesheet Langage, ou langage extensible de feuille de


style. XSLT signifie eXtensible Stylesheet Langage Transformation.
Comme son nom l'indique, le XSL ne sert pas uniquement de langage de feuille
de style. Il est aussi un trs puissant manipulateur d'lments. Il permet de
transformer un document XML source en un autre, permettant ainsi, l'extrme,
d'en bouleverser la structure.
Le fonctionnement du XSL est fond sur les manipulations de modles
(templates). Les lments du document XML d'origine sont remplacs (ou
lgrement modifis) par ces modles. Un modle contient ainsi le texte
(lments, attributs, texte...) de remplacement d'un lment donn.
Tout lment pouvant tre remplac dans le fichier de sortie par tout type de
contenu texte, XSL est un outil privilli de production de fichiers HTML partir
de sources XML. PHPfait ainsi appel des bibliothques de procdures de type
XSL quand il doit grer l'interfaage avec des bases de donnes XML.
Un fichier XSL tant un fichier XML, il doit respecter les normes de syntaxe de
ce format.

5.1.2.

Structure d'un document XSL

La structure de base d'un document XSL commence par un prologue, puis un


lment <xsl:stylesheet pouvant contenir quelques attributs, notamment une
dclaration d'espace de noms ainsi que le numro de version. L'exemple suivant
prsente l'appel cet lment tel que nous le pratiquerons dans ce cours :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> (...)
</xsl:stylesheet>
L'lment <xsl:stylesheet> est l'lment racine du document XSL. C'est lui qui
contient tous les modles, y compris celui qui est associ la racine du
document XML, modle que l'on note <xsl:template match="/">. L'attribut
match="/" indique que ce modle s'applique la racine du document XML.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
35 - 57

Dvelopper des applications XML

5.2.

Exemples de mises en forme

5.2.1.

Exemple simple

5.2.1.1. Introduction
Il est possible de traiter de manire simple un fichier XML contenant une
information relativement linaire. Ainsi, l'exemple dj prsent d'une
composition de bouteille d'eau, dans le cas d'une seule bouteille, se prte
facilement une simple mise en forme HTML.
5.2.1.2. Exemple
Exemple d'un document XML li une feuille de style XSL simple :
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="bouteille1.xsl"?>
<bouteille>
<marque>Cristaline</marque>
<composition>calcium 71mg/l, magnsium 5,5mg/l, chlorure 20mg/l,
nitrate 1mg/l, traces de fer.</composition>
<source>
<ville>St-Cyr la Source</ville>
<departement>Loiret</departement>
</source>
<code_barre>3274080005003</code_barre>
<contenance>150cl</contenance>
<ph>7,45</ph>
</bouteille>
Et voici la feuille de style XSL associe :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>Exemple de sortie HTML</title>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1" />
</head>
<body>
<h1>Bouteille de marque <xsl:value-of
select="bouteille/marque" /></h1>
<h2>Composition:</h2>
<p><xsl:value-of select="bouteille/composition" /></p>
<h2>Lieu d'origine:</h2>
<p>Ville de <b><xsl:value-of
select="bouteille/source/ville" /></b>, dans le
dpartement <b><xsl:value-of
select="bouteille/source/departement" /></b></p>

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
36 - 57

Dvelopper des applications XML


<h2>Autres informations</h2>
<ul>
<li>Contenance: <xsl:value-of
select="bouteille/contenance" /></li>
<li>pH: <xsl:value-of select="bouteille/ph" /></li>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

5.2.2.

Exemple avec boucle

5.2.2.1. Introduction
Il arrive que la structure du document XML ne soit pas linaire, mais fonde
sur, par exemple, des boucles, ou bien comporte un nombre indtermin de fois
un mme lment ; c'est d'ailleurs le plus souvent le cas.
On peut ainsi reprendre l'exemple de la bouteille d'eau, qui se prsente sous la
forme du fichier XML suivant :
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="bouteille1.xsl"?>
<bouteille>
<marque>Cristaline</marque>
<composition>
<ion_positif>calcium 71mg/l</ion_positif>
<ion_negatif>nitrate 1mg/l</ion_negatif>
<ion_positif>magnsium 5,5mg/l</ion_positif>
<ion_negatif>chlorure 20mg/l</ion_negatif>
<autres_materiaux>fer</autres_materiaux>
</composition>
<source>
<ville>St-Cyr la Source</ville>
<departement>Loiret</departement>
</source>
<code_barre>3274080005003</code_barre>
<contenance>150cl</contenance>
<ph>7,45</ph>
</bouteille>

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
37 - 57

Dvelopper des applications XML


Cette fois-ci, il faut tenir compte d'un nombre a priori indtermin d'lments
ion_positif, par exemple. Il suffit pour cela d'introduire dans la feuille de style un
lment <xsl:for-each select="ce_qu_on_cherche_a_afficher"/>, qui permet de
faire une boucle sur l'lment cherch :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>Exemple de sortie HTML</title>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1" />
</head>
<body>
<h1>Bouteille de marque <xsl:value-of
select="bouteille/marque" /></h1>
<h2>Composition:</h2>
<h3>Ions positifs</h3>
<ul>
<xsl:for-each select="bouteille/composition/ion_positif">
<li><xsl:value-of select="." /></li>
</xsl:for-each>
</ul>
<h3>Ions ngatifs</h3>
<ul>
<xsl:for-each select="bouteille/composition/ion_negatif">
<li><xsl:value-of select="." /></li>
</xsl:for-each>
</ul>
<h3>Autres matriaux</h3>
<ul>
<xsl:for-each select="//autres_materiaux">
<li><xsl:value-of select="." /></li>
</xsl:for-each>
</ul>
<h2>Lieu d'origine</h2>
<p>Ville de <b><xsl:value-of
select="bouteille/source/ville" /></b>, dans le dpartement
<b><xsl:value-of select="bouteille/source/departement" /></b></p>
<h2>Autres informations</h2>
<ul>
<li>Contenance: <xsl:value-of
select="bouteille/contenance" /></li>
<li>pH: <xsl:value-of select="bouteille/ph" /></li>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
38 - 57

Dvelopper des applications XML


1. la prsence du caractre / la fin de l'lment "Retour-Ligne"
<br/>. Dans le fichier HTML produit, il n'apparat plus.
2. le rarrangement des entres : les ions positifs sont de toutes
manires affichs avant les ions ngatifs.
3. la slection des "autres matriaux" avec
select="//autres_materiaux". Cela est une des manires de faire
rfrence un lment dans l'arbre des lments. Nous verrons
la liste de ces slecteurs plus tard.

6. Chapitre V : XSLT
6.1.

Les expressions de slection

6.1.1.

Introduction

Connues en anglais sous le nom de XSL patterns, les expressions de


slection sont des chanes de caractres qui permettent de slectionner des
noeuds dans un document source. Il est galement possible d'utiliser une
syntaxe spciale, appele XPath, qui permet, en se fondant sur la structure
arborescente du document XML (le Document Object Model -DOM), de faire
rfrence des lments et/ou des attributs.

6.1.2.

Slection d'lments et d'attributs

6.1.2.1. Slection d'lment, syntaxe de base


L'exemple le plus simple d'expression de slection est le nom d'un type
d'lment. Cette expression slectionne tous les lments du type prcis
descendant ou anctre d'un noeud donn. Exemple :
<xsl:value-of select="nom_element" />
L'oprateur / permet de dfinir le chemin d'accs aux lments slectionner,
et donc leur parent. Par exemple, section/paragraphe slectionne les lments
section du noeud courant et pour chaque lment section, slectionne les
lments paragraphe qu'il contient. En d'autres termes, cette expression
slectionne les petits-fils paragraphe du noeud courant qui ont pour pre un
noeud section.
Un nom d'lment peut tre remplac par * dans une expression. Par
exemple, */paragraphe slectionne tous les petits-fils paragraphe quel que soit
leur pre.
L'utilisation de // permet d'appliquer la recherche aux descendants et non pas
seulement aux fils directs. Par exemple, section//paragraphe slectionne tous les
lments paragraphe descendant d'un lment section fils direct du noeud
courant.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
39 - 57

Dvelopper des applications XML


Le caractre . slectionne le noeud courant. Par exemple, .//paragraphe
slectionne tous les descendants paragraphe du noeud courant.
La chane .. slectionne le pre du noeud courant. Par exemple, ../paragraphe
slectionne tous les noeuds paragraphe frres du noeud courant.
6.1.2.2. Slection d'lment, appel de fonctions
L'expression comment() slectionne tous les noeuds commentaires fils du
noeud courant.
L'expression text() slectionne tous les noeuds fils du noeud courant, ne
contenant que du texte.
L'expression node() slectionne tous les noeuds fils du noeud courant.
L'expression id("UnIdentifiant") slectionne l'lment, normalement unique,
qui a un attribut attr de type ID (cf. le paragraphe "Dclaration d'attribut de
type ID") valant "UnIdentifiant".
6.1.2.3. Slection d'lment et DOM
Il est galement possible de "naviguer" dans les branches de l'arborescence du
document XML, en utilisant les ressources du DOM. Diffrents types de syntaxes
sont possibles, fondes sur une expression de la forme Element[Expression]. Par
exemple :
elt[i] o i est un nombre entier dsigne le i-me descendant direct d'un mme
parent ayant le nom indiqu. Par exemple, paragraphe[3] dsigne le 3me
enfant de l'lment courant, portant le nom paragraphe. Attention, la
numrotation commence 1 et non 0.
elt[position()>i] o i est un nombre entier slectionne tous les lments
prcds d'au moins i lments de mme nom comme descendants du mme
parent. Par exemple, paragraphe[position()>5] slectionne tous les lments
paragraphe dont le numro d'ordre est strictement suprieur 5.
elt[position() mod 2 =1] slectionne tout lment qui est un descendant
impair.
elt[souselt] slectionne tout lment elt qui a au moins un descendant
souselt ( ne pas confondre avec elt/souselt, qui slectionne tout lment
souselt ayant pour parent elt...).
elt[first-of-any()] slectionne le premier lment elt fils de l'lment
courant.
elt[last-of-any()] slectionne le dernier lment elt fils de l'lment courant.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
40 - 57

Dvelopper des applications XML


elt[first-of-type()] slectionne l'lment elt fils de l'lment courant, s'il est
premier de son type. Par exemple, si l'lment section peut contenir des
noeuds de type texte paragraphe et sous_section dans le dsordre,
l'expression paragraphe[first-of-type()] ne slectionnera le premier lment
paragraphe que s'il n'y a aucun lment sous_section avant lui.
elt[last-of-type()] slectionne de mme l'lment elt fils de l'lment
courant, s'il est le dernier de son type.
Par exemple, l'expression section/paragraphe[last-of-type() and first-oftype()] slectionne les lments paragraphe fils uniques dont le pre est un
lment section ; l'expression section/paragraphe[last-of-any() and first-ofany()] slectionne les lments paragraphe dont le pre est un lment section
qui ne contient qu'un seul lment paragraphe.
La fonction ancestor() permet la slection d'un anctre du noeud courant. Elle
reoit en argument une expression de slection et recherche le premier anctre
du nom correspondant la slection. Par exemple, ancestor(chapitre)/titre
slectionne l'lment titre du chapitre contenant l'lment courant.
6.1.2.4. Slection d'attributs
Les attributs d'un lment sont slectionns en faisant prcder leur nom par
le caractre @. Les rgles relatives la slection des lments s'appliquent
galement aux attributs :
section[@titre] slectionne les lments section qui ont un attribut titre.
section[@titre="Introduction"] slectionne les lments section dont
l'attribut titre a pour valeur Introduction.
Si l'on veut afficher le contenu de l'attribut, on le fait prcder du caractre /.
Par exemple, <xsl:value-of select=paragraphe/@titre permet l'affichage du titre
de l'lment paragraphe fils de l'lment courant (si rien n'est prcis, par dfaut
il s'agit du premier lment paragraphe fils).
6.1.2.5. Oprateurs logiques
Les oprateurs logiques not(), and et or peuvent tre utiliss, comme par
exemple section[not(@titre)] slectionne les lments section qui n'ont pas
d'attribut titre. Attention : lorsque, dans la DTD par exemple, l'attribut est dfini
comme ayant une valeur par dfaut, mme s'il n'est pas explicit dans le
document XML, il est considr comme existant.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
41 - 57

Dvelopper des applications XML

6.2.

XPath

6.2.1.

Introduction

Comme son nom l'indique, XPath est une spcification fonde sur l'utilisation
de chemin d'accs permettant de se dplacer au sein du document XML. Dans ce
but, un certain nombre de fonctions ont t dfinies. Elles permettent de traiter
les chanes de caractres, les boolens et les nombres.
Le XPath tablit un arbre de noeuds correspondant au document XML. Les
types de noeuds peuvent tre diffrents : nud d'lment, nud d'attribut et
nud de texte. En vue d'une utilisation plus aise, le XPath comprend un
mcanisme qui associe tous ces types une chane de caractres.
La syntaxe de base du XPath est fonde sur l'utilisation d'expressions. Une
expression peut s'appliquer quatre types d'objets :
un ensemble non ordonn de noeuds ;
une valeur boolenne (vrai ou faux) ;
un nombre en virgule flottante ;
une chane de caractres.
Chaque valuation d'expression dpend du contexte courant. Une des
expressions les plus importantes dans le standard XPath est le chemin de
localisation. Cette expression slectionne un ensemble de nuds partir d'un
nud contextuel.

6.2.2.

Chemin de localisation

6.2.2.1. Introduction
Un chemin de localisation peut tre de type absolu ou relatif.
Dans le cas o il est de type absolu, il commence toujours par le signe /
indiquant la racine du document XML ;
Dans le cas o il est de type relatif, le nud de dpart est le nud contextuel
courant.
La syntaxe de composition d'un chemin de localisation peut tre de type
abrg ou non abrg. Toute syntaxe non abrge ne trouve pas forcment
d'quivalence en syntaxe abrge.
Un chemin de localisation est compos de trois parties :
un axe, dfinissant le sens de la relation entre le nud courant et le jeu de
nuds localiser;
un nud spcifiant le type de nud localiser;

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
42 - 57

Dvelopper des applications XML

0 n prdicats permettant d'affiner la recherche sur le jeu de nuds


rcuprer.
Par exemple, dans le chemin child::section[position()=1], child est le nom de
l'axe, section le type de nud localiser (lment ou attribut) et [position()=1]
est un prdicat. Les doubles :: sont obligatoires.
La syntaxe d'une localisation s'analyse de gauche droite. Dans notre cas, on
cherche dans le nud courant, un nud section qui est le premier nud de son
type.
6.2.2.2. Axes
child : contient les enfants directs du nud contextuel.
descendant : contient les descendants du nud contextuel. Un descendant
peut tre un enfant, un petit-enfant...
parent : contient le parent du nud contextuel, s'il y en a un.
ancestor : contient les anctres du nud contextuel. Cela comprend son
pre, le pre de son pre... Cet axe contient toujours le nud racine, except
dans le cas o le nud contextuel serait lui-mme le nud racine.
following-sibling : contient tous les nuds cibles du nud contextuel. Dans
le cas o ce nud est un attribut ou un espace de noms, la cible suivante est
vide.
preceding-sibling : contient tous les prdcesseurs du nud contextuel ; si
le nud contextuel est un attribut ou un espace de noms, la cible prcdente est
vide.
following : contient tous les nuds du mme nom que le nud contextuel
situs aprs le nud contextuel dans l'ordre du document, l'exclusion de tout
descendant, des attributs et des espaces de noms.
preceding : contient tous les nuds du mme nom que le nud contextuel
situs avant lui dans l'ordre du document, l'exclusion de tout descendant, des
attributs et des espaces de noms.
attribute : contient les attributs du nud contextuel ; l'axe est vide quand le
nud n'est pas un lment.
namespace : contient tous les nuds des espaces de noms du nud
contextuel ; l'axe est vide quand le nud contextuel n'est pas un lment.
self : contient seulement le nud contextuel.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
43 - 57

Dvelopper des applications XML


descendant-or-self : contient le nud contextuel et ses descendants.

ancestor-or-self : contient le nud contextuel et ses anctres. Cet axe


contiendra toujours le nud racine.
6.2.2.3. Prdicats
Le contenu d'un prdicat est une prdiction. Chaque expression est value et
le rsultat est un boolen.
Par exemple, section[3] est quivalent section[position()=3].
Ces deux expressions sont quivalentes : chacune d'entre elles produit un
boolen. Dans le premier cas, il n'y a pas de test, on slectionne simplement le
troisime lment, l'expression est obligatoirement vraie. Dans le second cas, un
test est effectu par rapport la position de l'lment section ; lorsque la
position sera gale 3, l'expression sera vraie.
6.2.2.4. Syntaxe non abrge
Cette syntaxe va tre prsente par plusieurs exemples... Les parties qui
dpendent du fichier XML analys sont crites de cette manire.
child::para : slectionne l'lment para enfant du nud contextuel.
child::* : slectionne tous les lments enfants du nud contextuel.
child::text() : slectionne tous les nuds de type texte du nud contextuel.
child::node() : slectionne tous les enfants du nud contextuel, quel que soit
leur type.
attribute::name : slectionne tous les attributs name du nud contextuel.
attribute::* : slectionne tous les attributs du nud contextuel.
descendant::para : slectionne tous les descendants para du nud
contextuel.
ancestor::div : slectionne tous les anctres div du nud contextuel.
ancestor-or-self::div : slectionne tous les anctres div du nud contextuel
et le nud contextuel lui-mme si c'est un div.
descendant-or-self::para : slectionne tous les descendants para du nud
contextuel et le nud contextuel lui-mme si c'est un para.
self::para : slectionne le nud contextuel si c'est un lment para, et rien
dans le cas contraire.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
44 - 57

Dvelopper des applications XML

child::chapitre/descendant::para : slectionne les descendants para de


l'lment chapitre enfant du nud contextuel.
child::*/child::para : slectionne tous les petits-enfants para du nud
contextuel.
/child:: : slectionne l'lment racine du document.
/descendant::para : slectionne tous les lments para descendants du
document contenant le nud contextuel.
/descendant::olist/child::item : slectionne tous les lments item qui ont
un parent olist et qui sont dans le mme document que le nud contextuel.
child::para[position()=1] : slectionne le premier enfant para du nud
contextuel.
child::para[position()=last()] : slectionne le dernier enfant para du nud
contextuel.
child::para[position()=last()-1] : slectionne l'avant-dernier enfant para
du nud contextuel.
child::para[position()1] : slectionne tous les enfants para du nud
contextuel autres que le premier.
following-sibling::para[position()=1] : slectionne le prochain chapitre
cible du nud contextuel.
On pourrait continuer encore longtemps cette liste d'exemples. Cette syntaxe
non-abrge permet beaucoup de raffinement. child::*[self::chapitre or
self::sstitre][position()=last()] permet ainsi de slectionner le dernier enfant
chapitre ou sstitre du nud contextuel.
6.2.2.5. Syntaxe abrge
Cette syntaxe recoupe en fait la "syntaxe de base" vue plus haut. Elle permet
d'obtenir des expressions du type para[@type="avertissement"][5], qui
slectionne le cinquime enfant de l'lment para, parmi ceux qui ont un attribut
type ayant la valeur avertissement.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
45 - 57

Dvelopper des applications XML

6.2.3.

Fonctions de base

6.2.3.1. Gnralits
De nombreuses fonctions peuvent tre utilises. Ces fonctions concernent
quatre catgories d'objets : nuds, chanes de caractres, boolens, nombres.
Chaque fonction peut avoir zro ou plusieurs arguments. Dans les descriptions
suivantes, lorsqu'un lment est suivi du caractre ?,cela signifie qu'il est
optionnel. Cette liste est loin d'tre exhaustive. Le chapitre suivant prsente les
fonctions XPath de manire plus complte.
6.2.3.2. Manipulation de nuds
Fonctions retournant un nombre :
last() : retourne un nombre gal l'index du dernier nud dans le
contexte courant.
position() : retourne un nombre gal la position du nud dans le
contexte courant.
Fonction retournant un jeu de nuds : id(objet), permet de slectionner les
lments par leur identifiant.
6.2.3.3. Manipulation de chanes de caractres
Beaucoup de fonctions existent. Citons pour mmoire notamment :
string(noeud?) : cette fonction convertit un objet en chane de
caractres selon les rgles suivantes :
un ensemble de nuds est converti en chane de caractres en retournant la
valeur textuelle du premier nud de l'ensemble dans l'ordre du document. Si
l'ensemble des nuds est vide, une chane vide est retourne.
un nombre est converti en chane suivant des rgles dpendant de sa nature
(NaN, nombre entier, non-entier, zro...).
la valeur boolenne false est convertie en chane de caractres "false", de
mme pour la valeur boolenne true.
Cette fonction n'a pas pour objet de convertir des nombres en chanes de
caractres pour les prsenter aux utilisateurs ; il existe des fonctions de
transformations XSLT pour ce faire (format-number et xsl:number)
concat(chaine1, chaine2, chaine*) : retourne une chane rsultant de
la compilation des arguments

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
46 - 57

Dvelopper des applications XML


string-length(chaine?) : cette fonction retourne le nombre de caractres
de la chane. Dans le cas o l'argument est omis, la valeur retourne est gale
la longueur de la valeur textuelle du nud courant

6.2.3.4. Manipulation de boolens


Outre la fonction logique not(), ainsi que les fonctions true() et false(), une
fonction utile est lang(chaine). Elle teste l'argument chaine par rapport
l'attribut xml:lang du nud contextuel ou de son plus proche anctre dans le cas
o le nud contextuel ne contient pas d'attribut de ce type. La fonction retourne
true si l'argument est bien la langue utilise ou si la langue utilise est un souslangage de l'argument (par exemple, en//us). Sinon elle retourne false.
6.2.3.5. Manipulation de nombres
Voici quelques fonctions de manipulations de nombres :
floor(nombre) : retourne le plus grand entier infrieur l'argument pass

la fonction.
ceiling(nombre) : retourne le plus petit entier suprieur l'argument

pass la fonction.
round(nombre) : retourne l'entier le plus proche de l'argument pass la

fonction.

6.2.4.

lments XSLT
Gnralits
Introduction

Dans cette partie, nous allons dtailler quelques lments XSLT et prsenter
des exemples d'utilisation. Ne sera introduite ici qu'environ la moiti des
lments de formatage XSLT ; libre vous de vous renseigner sur les lments
manquants.
Le nom de domaine utilis pour les exemples est celui de la spcification 1.0 :
http://www.w3.org/TR/xslt. C'est celui qui est le plus abouti (il est l'tat de
Recommendation, alors que la spcification XSLT 2.0 est encore l'tat de
Working Draft).
Rappel : prologue d'un document XSL
Un fichier XSL doit commencer par les lignes indiquant le numro de version
XML et l'encodage de caractres utilis :
<?xml version="1.0" encoding="ISO-8859-1"?>

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
47 - 57

Dvelopper des applications XML

2. Les fondamentaux
Gnralits
Sont prsents ici les lments de base du document XSL, ceux que l'on
retrouve dans l'immense majorit des cas, voire la totalit pour certains.
<xsl:stylesheet>
Cet lment doit tre l'lment racine du document XSL, et en tant que tel doit
figurer juste aprs le prologue (et les commentaires ventuels qui suivraient
celui-ci). Il contient tous les autres lments de mise en forme. Dans le cas
gnral, l'utilisation de cet lment est de la forme :
<xsl:stylesheet id="id" version="nombre" xmlns:pre="URI"> (...)
</xsl:stylesheet>
id est l'identifiant unique de la feuille de style. version est le numro de
version de la feuille de style XSLT. A l'heure actuelle, la version peut tre 1.0 ou
1.1. xmlns:pre correspond la dfinition de l'espace de noms. pre indique le
prfixe qui sera utilis dans la feuille de style pour faire rfrence l'URI de
l'espace nominal. Exemples :

<xsl:stylesheet version="1.0" xmlns:xsl="uri:xsl"> (...)


</xsl:stylesheet>
... permet d'avoir accs uniquement des fonctions de base.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> (...)
</xsl:stylesheet>
... permet d'avoir accs des fonctions volues d'XSLT. C'est cette
dclaration que nous allons utiliser dans la suite.
<xsl:output>
Cet lment vide, placer comme premier enfant de <xsl:stylesheet>, permet
de spcifier des options concernant l'arbre de sortie. L'utilisation de cet lment
est de la forme :
<xsl:output method="xml | html | text" version="nmtoken"
encoding="chaine" omit-xml-declaration="yes | no" standalone="yes |
no" doctype-public="chaine" doctype-system="chaine" cdata-sectionelements="elt" indent="yes | no" media-type="chaine" />

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
48 - 57

Dvelopper des applications XML


method identifie la mthode de transformation. Dans le cas o elle est
gale text, aucune mise en forme n'est effectue.
version identifie la version de la mthode de sortie (xml 1.0, html 4.01...).
encoding indique la version du jeu de caractres utiliser pour la sortie.
omit-xml-declaration indique au processeur XSLT s'il doit ajouter ou non
une dclaration XML.
standalone indique au processeur XSLT s'il doit crer un arbre de sortie
avec ou sans dclaration de type de document.
doctype-public indique l'identifiant public utilis par la DTD associe la
transformation.
doctype-system indique l'identifiant system utilis par la DTD associe la
transformation.
cdata-section-elements indique les lments dont le contenu doit tre
trait lors de la transformation via une section CDATA.
indent prsente la transformation sous forme d'arbre dans le cas o la
valeur de cet attribut est gale yes.
media-type indique le type MIME des donnes rsultantes de la
transformation.

Par exemple :
<xsl:output method="html" version="html4.01" encoding="ISO-8859-1"
doctype-public="-//W3C//DTD HTML 4.01//EN" doctypesystem="http://www.w3.org/TR/html4/strict.dtd" />
... permet d'indiquer que le fichier de sortie sera au format HTML 4.01, conforme
la DTD publique de l'HTML du W3C, et que le jeu de caractres utilis est l'ISO8859-1. Le rsultat en sortie est un fichier HTML commenant par
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
... et possdant dans son <head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO8859-1" />
L'utilisation d'un tel lment permet donc de se dispenser de la spcification
explicite du codage de caractres via un lment <meta> lors de l'criture de la
feuille de style XSL.
<xsl:template>
Cet lment dfinit un modle appliquer un nud et un contexte
spcifiques. L'utilisation de cet lment est de la forme :
<xsl:template name="nommodele" match="expression" mode="modemodele">
</xsl:template>
name correspond au nom associ au modle.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
49 - 57

Dvelopper des applications XML


match indique quel jeu de nuds sera affect par le modle. Cette
expression peut comprendre un test d'existence d'attribut, le caractre |
indiquant que le modle s'applique un lment ou un autre, ainsi que tout
lment permettant de dfinir un jeu d'attributs.
mode permet un lment d'avoir plusieurs modles, chacun gnrant une
sortie diffrente.
<xsl:value-of>
Cet lment permet d'insrer la valeur d'un nud dans la transformation. Ce
nud est valu en fonction d'une expression. Cette expression peut
correspondre un lment, un attribut ou tout autre nud contenant une
valeur. L'utilisation de cet lment est de la forme :
<xsl:value-of select="expression" disable-output-escaping="yes |
no" />
La valeur de select est value et c'est cette valuation qui sera insre
dans la transformation.
disable-output-escaping agit sur la transformation des caractres. Dans le
cas o sa valeur est yes, la chane &lt; est insre dans la transformation en
tant que signe <, ce qui peut entraner des erreurs. Dans le cas contraire, la
chane &lt; est insre telle quelle dans la transformation.
Ajout d'lments et d'attributs
<xsl:element>
Cet lment insre un nouvel lment dans la transformation. Le nom de
l'lment est donn par l'attribut name. L'utilisation de cet lment est de la
forme :
<xsl:element name="nomelement" use-attribute-sets="jeuattr">
</xsl:element>
name correspond au nom de l'lment crer. use-attribute-sets correspond au

jeu d'attributs associer l'lment cr. Par exemple :


<xsl:element name="p"><xsl:value-of select="texte" /></xsl:element>
... permet de crer dans le fichier HTML un lment de paragraphe renfermant le
contenu de l'lment texte du document XML.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
50 - 57

Dvelopper des applications XML


<xsl:attribute>
Cet lment dfinit un attribut et l'ajoute l'lment
transformation. L'utilisation de cet lment est de la forme :

rsultat

de

la

<xsl:attribute name="nom">valeur</xsl:attribute>
name correspond au nom de l'attribut ajouter dans le contexte courant. valeur
correspond la valeur lui donner. Par exemple :
<image><xsl:attribute name="src">test.gif</xsl:attribute></image>
... permet d'ajouter l'lment image l'attribut src et de lui affecter la valeur
test.gif, ce qui a pour effet de produire en sortie l'lment suivant :
<image src="test.gif"></image>
On aurait pu, de manire tout fait quivalente, crire
<xsl:element name="image"><xsl:attribute
name="src">test.gif</xsl:attribute></xsl:element>
... ce qui a pour effet de produire en sortie
<image src="test.gif"></image>
Syntaxe courte
Il est possible de crer des lments de manire plus compacte, l'aide d'une
syntaxe particulire. Supposons par exemple que nous ayons dans un fichier XML
l'lment <image source="test.gif" texte_alternatif="Image de test"/>, et que
nous souhaitions obtenir dans le fichier de sortie l'lment <img src="test.gif"
alt="Image de test"/>. Il existe deux manires :
La syntaxe longue, avec...
<xsl:element name="img"><xsl:attribute name="src"><xsl:value-of
select="@source" /></xsl:attribute><xsl:attribute
name="alt"><xsl:value-of
select="@texte_alternatif" /></xsl:attribute></xsl:element>
La syntaxe courte, utilisant des accolades...
<img src="{@source}" alt="{@texte_alternatif}" />
La seconde syntaxe est plus compacte ; mais elle prsente deux inconvnients :
Ds lors que des expressions XPath sont un peu longues, cette syntaxe
complique la relecture de la feuille de style ;

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
51 - 57

Dvelopper des applications XML


Une feuille XSL est avant tout un fichier XML. En tant que tel, on peut souhaiter
sa transformation ou son traitement automatis. La syntaxe longue s'y prte plus
facilement.
Gestion des boucles
<xsl:for-each>
Cet lment de bouclage, que l'on a dj rencontr, cre une boucle dans
laquelle sont appliques des transformations. Son utilisation est de la forme :
<xsl:for-each select="jeunoeud"></xsl:for-each>
select correspond au jeu de nuds devant tre parcouru par la boucle.
Exemple d'utilisation :
<ul>
<xsl:for-each select="item">
<li><xsl:value-of select="." /></li>
</xsl:for-each>
</ul>
<xsl:sort>
Cet lment permet d'effectuer un tri sur un jeu de nuds. Il doit tre plac
soit dans un lment <xsl:for-each> soit dans un lment <xsl:applytemplates>. C'est un lment vide qui peut tre appel plusieurs fois pour
effectuer un tri multicritres. Chaque appel cet lment provoque un tri sur un
champ spcifique, dans un ordre prdfini. L'utilisation de cet lment est de la
forme :
<xsl:sort select="noeud" data-type="text | number | elt"
order="ascending | descending" lang="nmtoken" case-order="upperfirst | lower-first" />
select permet de spcifier un nud comme cl de tri.
data-type correspond au type des donnes trier. Dans le cas o le type
est number, les donnes sont converties puis tris.
order correspond l'ordre de tri. Cet attribut vaut ascending ou
descending.
lang spcifie quel jeu de caractres utiliser pour le tri ; par dfaut, il est
dtermin en fonction des paramtres systme.
case-order indique si le tri a lieu sur les majuscules ou minuscules en
premier.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
52 - 57

Dvelopper des applications XML


Par exemple :
<ul>
<xsl:for-each select="livre">
<xsl:sort select="auteur" order="descending" />
<li><b><xsl:value-of select="auteur" /></b><br /><xsl:value-of
select="titre" /></li>
</xsl:for-each>
</ul>
Dans cet exemple, la liste des livres est classe dans l'ordre alphabtique
dcroissant des noms d'auteur.
<xsl:number>
Cet lment permet d"insrer un nombre format pouvant servir de compteur.
L'utilisation de cet lment est de la forme :
<xsl:number level="single | multiple | any" count="noeud"
from="noeud" value="expression" format="chaine" lang="nmtoken"
grouping-separator="car" grouping-size="nombre" />
level indique quels niveaux doivent tre slectionns pour le comptage.
count indique quels nuds doivent tre compts dans les niveaux slectionns ;
dans le cas o cet attribut n'est pas dfini, les nuds compts sont ceux ayant le
mme type que celui du nud courant.
from identifie le nud partir duquel le comptage commence.
value indique l'expression correspondant la valeur du compteur ; si cet attribut
n'est pas dfini, le nombre insr correspond la position du nud (position()).
format spcifie le format de l'affichage du nombre ; cela peut tre un chiffre, un
caractre (a-z, A-Z) et comprendre un caractre de sparation tel que le point
(.), le trait d'union (-) ou autre. Les formats possibles sont "1", "01", "a", "A",
"i", "I".
lang spcifie le jeu de caractres utiliser ; par dfaut, il est dtermin en
fonction des paramtres du systme.
grouping-separator identifie le caractre permettant de dfinir la sparation
entre les centaines et les milliers.
grouping-size spcifie le nombre de caractres formant un groupe de chiffres
dans un nombre long ; le plus souvent la valeur de cet attribut est 3. Ce dernier
attribut fonctionne avec...
...grouping-separator ; si l'un des deux manque, ils sont ignors.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
53 - 57

Dvelopper des applications XML


Exemple d'utilisation :
<ul>
<xsl:for-each select="livre">
<xsl:sort select="auteur" />
<xsl:number level="any" from="/" format="1." />
<li><b><xsl:value-of select="auteur" /></b><br /><xsl:value-of
select="titre" /></li>
</xsl:for-each>
</ul>

Conditions de test
<xsl:if>
Cet lment permet la fragmentation du modle dans certaines conditions. Il est
possible de tester la prsence d'un attribut, d'un lment, de savoir si un
lment est bien le fils d'un autre, de tester les valeurs des lments et attributs.
L'utilisation de cet lment est de la forme :
<xsl:if test="condition">action</xsl:if>
test prend la valeur 1 ou 0 suivant le rsultat de la condition (vrai ou faux).
action correspond l'action devant tre effectue (texte afficher, second test,
gestion de chane...). Exemple d'utilisation:
<ul>
<xsl:for-each select="livre">
<li>
<b><xsl:value-of select="auteur" /><br /></b>
<xsl:value-of select="titre" />.<xsl:if
test="@langue='franais'">Ce livre est en franais.</xsl:if>
</li>
</xsl:for-each>
</ul>
Dans le code prcdent, si l'attribut langue de l'lment livre vaut francais, le
processeur ajoutera au fichier de sortie la phrase "Ce livre est en franais". Il ne
se passe rien si ce n'est pas le cas.
<xsl:choose>
Cet lment permet de dfinir une liste de choix et d'affecter chaque choix une
transformation diffrente. Chaque choix est dfini par un lment <xsl:when> et
un traitement par dfaut peut tre spcifi grce l'lment <xsl:otherwise>.
Exemple d'utilisation :
<ul>
<xsl:for-each select="livre">
<li>

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
54 - 57

Dvelopper des applications XML


<b><xsl:value-of select="auteur" /><br /></b>
<xsl:value-of select="titre" />
<xsl:choose>
<xsl:when test="@langue='francais'">Ce livre est en
franais.</xsl:when>
<xsl:when test="@langue='anglais'">Ce livre est en
anglais.</xsl:when>
<xsl:otherwise>Ce livre est dans une langue non
rpertorie.</xsl:otherwise>
</xsl:choose>
</li>
</xsl:for-each>
</ul>

Variables et paramtres
Introduction
Il est possible en XSLT de dfinir des variables et des paramtres permettant de
faire des calculs. Il est ncessaire pour cela de faire appel deux lments XSL :
xsl:variable et xsl:param.
lment <xsl:variable>
L'lment <xsl:variable> sert crer les variables dans XSLT. Il possde les
attributs suivants :
name : cet attribut est obligatoire. Il spcifie le... nom de la variable.
select : expression XPath qui spcifie la valeur de la variable.

Par exemple :
<xsl:variable name="nombre_livres" select="255" />
<xsl:variable name="auteur" select="'Victor Hugo'" />
<xsl:variable name="nombre_pages" select="livre/tome/@page" />
On notera la prsence des guillemets imbriqus quand il s'agit d'affecter une
chane de caractres une variable.
La porte d'une variable est limite aux lments-frres et leurs
descendants. Par consquent, si une variable est dclare dans une boucle
xsl:for-each ou un lment xsl:choose ou xsl:if, on ne peut s'en servir endehors de cet lment.
Une variable est appele en tant prcde du caractre $ : <xsl:value-of
select="$nombre_pages" />.
On peut utiliser une variable pour viter la frappe rptitive d'une chane de
caractres, et/ou faciliter la mise jour de la feuille de style.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
55 - 57

Dvelopper des applications XML


L'lment <xsl:call-template>
L'lment <xsl:template> peut tre appel indpendamment d'une slection d'un
nud. Pour cela, il faut renseigner l'attribut name, et l'appeler l'aide de
l'lment <xsl:call-template>. Par exemple
<xsl:template name="separateur">
<hr />
<img src="ligne.gif" alt="sparation" width="150" height="2" />
<hr />
</xsl:template>
Il suffit alors de l'appeler avec <xsl:call-template name="separateur"/>.
Les lments <xsl:param> et <xsl:with-param>
Les paramtres crs avec ces deux lments sont habituellement utiliss dans
les modles nomms, que nous venons de voir. Ils permettent de passer des
valeurs aux modles. Un paramtre est cr avec l'lment <xsl:param>, et
pass un modle avec l'lment <xsl:with-param>. Les deux ont deux
attributs :
name, obligatoire, qui donne un nom au paramtre ;
select, une expression XPath facultative permettant de donner une valeur

par dfaut au paramtre.


Par exemple, on peut imaginer un template permettant d'valuer le rsultat
d'une expression polynmiale :
<xsl:template name="polynome">
<xsl:param name="variable_x" />
<xsl:value-of select="2*$variable_x*$variable_x+(5)*$variable_x+2" />
</xsl:template>
Il suffit alors de l'appeler en lui passant diverses valeurs pour le paramtre
variable_x pour qu'il value cette expression. Ce comportement se rapproche de
celui d'une fonction dans un langage de programmation. Par exemple...
<xsl:call-template name="polynome">
<xsl:with-param name="variable_x" select="3.4" />
</xsl:call-template>
... permet d'afficher le rsultat de 2*3.4^2-5*3.4+2. On remarquera que :
1. la soustraction d'un nombre se fait par addition du nombre (ngatif)
oppos ;
2. la division se fait non par le caractre /, mais par l'oprateur div.

OFPPT @

Document

Millsime

C-B-001.doc

Avril 07

Page
56 - 57

Vous aimerez peut-être aussi