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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

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

lment vide

OFPPT @

Document
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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> Dclaration d'un attribut requis

4.

<!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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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. Document
C-B-001.doc

OFPPT @

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
Avril 07

Page 18 - 57

Dvelopper des applications XML

4. Chapitre III : XSD


4.1. Introduction
Limitations des DTD 4.1.1.

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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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 Attribu t use Require d Require d optional optional Prohibit ed Attrib ut
default

DTD #REQUIR ED "blabla" #REQUIRED #IMPLIED "blabla" #IMPLIED -

Commentair

blabla blabla Cet attribut ne doit pas apparatre

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

OFPPT @

Document
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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 0 1

Valeur de maxOccurs
unbounded

(pas ncessaire, valeur par dfaut) 0 1

unbounded

1
?

(pas

ncessaire, dfaut) 1

valeur

par

rien

(pas ncessaire, valeur par dfaut)

(pas

ncessaire, dfaut)

valeur

par

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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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> Document
C-B-001.doc

OFPPT @

Millsime
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


Inclusion de schmas

4.7.1.

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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
Avril 07

Page 34 - 57

Dvelopper des applications XML

5. Chapitre IV : XSL
5.1. Prsentation
Introduction 5.1.1.

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
C-B-001.doc

Millsime
Avril 07

Page 35 - 57

Dvelopper des applications XML

5.2.

Exemples de mises en forme


Exemple simple

5.2.1.

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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
Introduction 6.1.1.

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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
Avril 07

Page 41 - 57

Dvelopper des applications XML

6.2.

XPath
Introduction

6.2.1.

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
C-B-001.doc

Millsime
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. Document
C-B-001.doc

OFPPT @

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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 : <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 ; rsultat de la

OFPPT @

Document
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
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
C-B-001.doc

Millsime
Avril 07

Page 56 - 57