Vous êtes sur la page 1sur 38

XPath

Xpath 1.0
XML Path Language
recommandation W3C pour expressions de chemins
accepte le 16 novembre 1999
version 1.0 et tout rcemment la version 2.0

XPath permet
de rechercher un lment dans un document
d'adresser toute sous partie d'un document

XPath

Xpath 1.0 - Parcours


d'arbre
XPath opre sur l'arbre d'un document
racine
<livre auteur = "Hugo">
<titre>Les chatiments</titre>
<chapitre>
@auteur
<section>Buonaparte </section>
<section>Neige</section>
titre
</chapitre>
"Hugo"

</livre>
Les
chatiments

livre

chapitre
section

Bonaparte

chapitre

section

Neige

XPath1.0 - Expression de chemins


Une expression de chemins spcifie une

traverse de l'arbre du document :

depuis un nud de dpart


vers un ensemble de nuds cibles
les cibles constituent la valeur du cheminement

Un chemin peut tre :


absolu
commence la racine
/tape1//tapeN

relatif

commence un nud courant


tape1//tapeN

Syntaxe et smantique
Cheminement lmentaire
direction::slecteur [predicat]

Directions
parent, ancestor, ancestor-or-self
child, descendant, descendant-or-self
preceding, preceding-sibling, following, following-

sibling
self, attribute, namespace
Slecteur
nom de nud slectionn (lment ou @attribut)
Prdicat
[Fonction(nud) = valeur]
XPath

Exemples de direction
Dans la figure, la direction (child, descendant, ancestor, ) est dsigne en anglais.

Le rectangle blanc correspond au point de dpart. Les numros correspondent lordre de


la rponse (le premier noeud). Si nous prenons la direction child, on constate que le
parcours correspond la recherche des descendants dun noeud de premier niveau (les
fils).

XPath1.0 - Exemples
Sections d'un chapitre
/child::livre/child::chapitre/child::section (la
forme non abrge)
/livre/chapitre/section (la forme abrge)
Texte du chapitre 1 section 2
/descendant::chapitre[position() = 1]
/child::section[position() = 2]/child::text()
//chapitre[1]/section[2]/text()

XPath

Xpath1.0 - Synthse
Pattern
Exemple
Signification
Nom
section
Slectionne les lments de nom donn
Nom[0]
section[0] Slectionne le premier lment ayant le nom donn
Nom[end()] section[end()] Slectionne le dernier lment ayant un nom donn
|
Droite|Gauche Indique une alternative (un nud OU bien l'autre (ou les deux))
/
/
Slectionne le nud racine d'une arborescence
/arbre/Nom /livre/chapitre Slectionne les nuds descendants par la balise de nom donn de l'arbre
*
*
Motif "joker" dsignant n'importe quel lment
//
//personne Indique tous les descendants d'un nud
.
.
Caractrise le nud courant
Dsigne le nud parent. Permet de remonter d'un niveau dans
..
..
l'arborescence
Indique un attribut caractristique (@nom dsigne la valeur de l'attribut).
@
@nom
La notation @* dsigne tous les attributs d'un lment
text()
text()
Dsigne le contenu d'un lment (le texte contenu entre ses balises)
Slectionne l'lment dont l'identifiant (la valeur de l'attribut ID) est celui
ID()
ID('a2546')
spcifi en paramtre
Comment() Comment() Dsigne tous les nuds commentaires
Node()
Node()
Dsigne tous les noeuds
8

Xpath 1.0 Synthse(fonctions


applicables aux nuds)
fonction

Rle

Exemple

count(slection)

Donne le nombre
dlment
correspondant la
slection

//cd
[count(morceau)=10]

name()

Retourne le nom dun


lment

//*[name()=titre]

id(identificateur)

Retourne les elts dont


lidentificateur est donn
en
argument

//*[id(mach001)]

namespace-uri()

Retourne ladresse URI de


lespace de noms du noeud
contextuel
9

XPath Synthse(fonctions applicables


aux chaines de caractres)
fonction

role

Exemple
dutilisation

starts-with(string1,
string2)

Renvoie vrai si la
premire chane
commence par la
deuxime

//*[startswith(name(),
t)]

contains(string1,
string2)

Renvoie vrai si la
premire chane
contient la deuxime

//*[contains(name(),
t)]

string-length(string)

Retourne la taille de
//*[stringlength(
la chane de caractre name()) &gt; 5]
donne en argument

10

XSL
eXtensible Style language

11

XSLT : Introduction
Permet de transformer un document
de XML XML,
De XML prsentation (HTML, texte, rtf, pdf,
etc.)
Un document est un arbre
Le processeur XSL parcourt l'arbre et applique

les rgles de transformations vrifies (


condition vraie) aux nuds slectionns
Un document est produit en sortie

XSLT

12

XSLT: Introduction
Les multiples cas de transformation
Formatage

Rutilisation de document
Adaptation aux appareils de prsentation
Conversion de format, par exemple XML vers
HTML,text,pdf,
La transformation est une tape invitable pour lutilisation
du document

13

Publications avec XSL


Plusieurs formats de publication pour un contenu

Format ( Postcript)

XML
Browser

Document

(XHTML, DHTML, HTML)

XSL
Processor

Format (XML)
pour Word,
Excel

XSL
Stylesheet

Format (XML)
application
e.Commerce
format
(WML)

XSL permet la prsentation sur des terminaux varis


14

XSLT 1.0
XSL Transformation
XSLT 1.0 Novembre 1999
Permet de transformer un document XML
gnrique en un document XML
spcifique
Sadapte au profil de lutilisateur
Sadapte lenvironnement:
Type du navigateur, document multimdia,

Utilise XPath pour reprer et manipuler des

portions de documents XML.


15

Principe de fonctionnement de
XSLT 1.0
Convertir un arbre en un autre arbre;
Une transformation XSLT consiste en une srie

de rgles;
La transformation se fait en associant des motifs
(patterns) des modles (templates);
Pattern: Contexte structural dans l'arbre source
(Expression Xpath);
Template: Un fragment du rsultat produire
pour le pattern correspondant;
Quand le pattern est reconnu dans le document
source, le template correspondant est engendr
dans le document rsultat.
16

Les feuilles de style XSLT


Une feuille de style XSL
est un document XML de racine <xsl:stylesheet>
contient une liste de rgles de transformation
<xsl:template>
Chaque rgle (<xsl:template>) prcise:
Une condition spcifiant le sous-arbre du document
dentre auquel elle sapplique (match=)
Une production spcifiant le rsultat de lapplication
de la rgle (contenu)
Il s'agit de rgles de production classiques
If <condtition> then <production>
Codes en XML avec espace de nom xsl:

17

Exemple de document

<?xml version="1.0" ?>


<Guide>
<Restaurant Categorie="**">
<Nom>Le Romantique</Nom>
<Adresse>
<Ville>Cabourg</Ville>
<Dept>Calvados</Dept>
</Adresse>
</Restaurant>
<Restaurant Categorie="***">
<Nom>Les TroisGros</Nom>
<Adresse>
<Ville>Roanne</Ville>
<Dept>Loire</Dept>
</Adresse>
</Restaurant>
</Guide>

XSLT

18

Exemple de feuille de
style XSLT
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/xsl">
<xsl:template match="/">
<html><head><B>ESSAI XSL</B></head> <body>
<xsl:apply-templates/></body></html>
</xsl:template>
<xsl:template match="Guide">
<H1>BONJOUR LE GROUPE XML</H1>
<H2>SUIVEZ LE GUIDE</H2>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="Restaurant">
<P><I>Restaurant :</I>
<xsl:value-of select="Nom"/></P>
</xsl:template>
</xsl:stylesheet>
XSLT

19

Rsum des commandes


<xsl:template>, dfinir une rgle et son contexte

<xsl:apply-templates />, appliquer les transformations aux


enfants du nud courant
<xsl:value-of select />, extrait la valeur d'un lment

slectionn partir du nud courant

<xsl:for-each>, dfinir un traitement itratif

<xsl:pi>, gnrer une processing instruction


<xsl:element>, gnrer un lment

<xsl:attribute>, gnrer un attribut

<xsl:if>, dfinir un traitement conditionnel

XSLT

20

Structure de XSLT
Toutes les instructions XSL appartiennent lespace de

noms xsl: URI=http://www.w3.org/1999/XSL/Transform


Llment racine= xsl:stylesheet
Un document XSLT a la forme suivante:
<?xml version="1.0" ?>
<xsl:stylesheet
xmlns:xsl=http://www.w3.org/1999/XSL/Transform
version="1.0">

</xsl:stylesheet>

N.B: Attribut version est obligatoire.


Association entre XML et une feuille de style XSL
<?xml-stylesheet type=text/xsl href=URIxsl.xsl?>
21

Instruction xsl:template
Les composants les plus importants dune XSLT sont les

rgles du modle dfinies par des lments xsl:template


Chaque lment de ce type possde un attribut match
qui permet de spcifier quel noeud du document
dentre le modle doit tre appliqu
<xsl:template match=expression XPath>
Le contenu de llment xsl:template est le modle qui
doit tre instanci. Le modle peut contenir du texte qui
apparatra, tel quel en sortie et/ou des instructions XSL qui
permettront de transfrer en sortie des donnes, depuis le
document en entre.

22

Instruction xsl:template
Attributs
match: condition de slection des nuds sur lesquels la

rgle s'applique (XPath)


name: nom de la rgle, pour invocation explicite (en
conjonction avec <call-template>)
mode: permet d'appliquer un mme lment des rgles
diffrentes en fonction du contexte
priority: priorit, utilis en cas de conflit entre deux rgles
ayant la mme condition

Exemples
<xsl: template match="/">
<xsl: template match="auteur" name="R1" priority="1">

XSLT

23

Modles XSLT
Exemple
<xsl:template match= "Titre">
<h1> XML pour les dbutants </h1>
</xsl:template>
Source : <Titre>Introduction</Titre>
Rsultat : <h1> XML pour les dbutants

</h1>

24

Instruction xsl:applytemplates
Applique l'intrieur d'un modle dfini avec xsl:template

d'autres
modles
qui
sont
le
cas
chant
dfinis
avecxsl:template. De cette manire, les dpendances et
l'ordre lors de l'emploi de modles peuvent tre contrls.
xsl:apply-templates possde les attributs suivants :
select=(facultatif)choisit un modle qui doit tre appliqu. Le jeu

de nuds dsir est mentionn ou bien un chemin d'aprs


lasyntaxe Xpath. Si l'attributselect manque, toutes les
dfinitionsxsl:templatede l'chelon immdiatement infrieur sont
appliques.
mode=(facultatif)Ne

choisit
le
modle
mentionn
avecselect=que lorsqu'il a le mode mentionn. Pour cela il faut
que lors de la dfinition dexsl:templateun nom qui concorde ait
t attribu pour le mode avecmode=.

25

Exemple de feuille de
style XSL
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/xsl">
<xsl:template match="/">
<html><head><B>ESSAI XSL</B></head> <body>
<xsl:apply-templates/></body></html>
</xsl:template>
<xsl:template match="Guide">
<H1>BONJOUR LE GROUPE XML</H1>
<H2>SUIVEZ LE GUIDE</H2>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="Restaurant">
<P><I>Restaurant :</I>
<xsl:value-of select="Nom"/></P>
</xsl:template>
</xsl:stylesheet>
XSLT

26

Instruction xsl:value-of
Llment vide xsl:value-of permet de

rcuprer la valeur dun nud en entre et de


la renvoyer en sortie.
<xsl:value-of select=expression XPath/>
Lattribut select permet de spcifier le nud
dont il faut rcuprer la valeur. Lattribut
select peut prendre comme valeur une
expression XPath de slection de noeuds

27

Exemple de feuille de
style XSL
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/xsl">
<xsl:template match="/">
<html><head><B>ESSAI XSL</B></head> <body>
<xsl:apply-templates/></body></html>
</xsl:template>
<xsl:template match="Guide">
<H1>BONJOUR LE GROUPE XML</H1>
<H2>SUIVEZ LE GUIDE</H2>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="Restaurant">
<P><I>Restaurant :</I>
<xsl:value-of select="Nom"/></P>
</xsl:template>
</xsl:stylesheet>
XSLT

28

Instruction xsl:for-each
Elle permet de traiter, tour tour, chacun des

lments slectionns par son attribut select.


Lattribut select est obligatoire
<xsl:for-each select=expression XPath>
Exemple :
<xsl:template match=noms>
<xsl:for-each select=nom>
<P><xsl:value-of select=./> </P>
</xsl:for-each>
</xsl:template>
29

Instruction de test
Linstruction xsl:if permet de contrler ce qui est gnr

en sortie en fonction dune condition


<xsl:if test=expression boolenne>
Contenu
</xsl:if>
Linstruction xsl:choose permet de contrler ce qui est
gnr en sortie en fonction de plusieurs conditions
<xsl:choose>
<xsl:when test=expression boolenne1>
<xsl:when test=expression boolenne2>
<xsl:otherwise>
</xsl:choose>
30

Exemple
<carnet>
<personne
nom="dupont"
prenom="jean"/>
<personne
nom="dupont"
prenom="arthur"/>
<personne
nom="dupond"
prenom="martin"/>
</carnet>

<xsl:for-each
select="//personne">
<xsl:if
test="./@nom='dupond'"
>
Bienvenue Mr Dupond
</xsl:if>
<xsl:if test="not(
./@nom='dupond')">
Bienvenue Mme <xsl:value-of
select="@nom"/>
</xsl:if>
</xsl:for-each>
31

Gnration des donnes en sortie


Contrler les types dlments gnrs en

Sortie
Les instructions xsl:element,
xsl:attribute, xsl:processinginstruction,
xsl:comment et xsl:text permettent la
gnration des diffrentes composantes dun
document XML
Les instructions xsl:number, xsl:copy,
xsl:sort, permettent de contrler plus
finement larbre de sortie
32

Exemple de transformation dun


Document XML en HTML
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="exo11_1.xsl"?>
<livres>
<livre>
<titre>Initiation XML
<motcle>structure XML</motcle>
<motcle>grammaire XML</motcle>
<motcle>analyseur</motcle>
<motcle>traitement</motcle>
</titre>
<caract page="800" CD="2001"/>
<auteur>D. Hunter</auteur>
</livre>
<livre>
<titre>XML: langage et applications
<motcle>structure XML</motcle>
<motcle>schemas XMlL</motcle>
<motcle>XSL-FO</motcle>
<motcle>liens en XML:XLINK</motcle>
<motcle>etudes de cas</motcle>
</titre>
<caract page="750" AN="2000"/>
<auteur>Alain Michard </auteur>
</livre>
<livre>
<titre>Manuel de rfrence XML
<motcle>pourquoi XML</motcle>
<motcle>XML et Microsoft</motcle>
<motcle>applications XMLr</motcle>
</titre>
<caract page="800" CD="2"/>
<auteur>D. Hunter</auteur>
</livre>
</livres>

33

Les rgles de transformations XSLT


<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" version="html4.01" encoding="ISO-8859-1" doctype-public="-//W3C//DTD HTML 4.01
Transitional//EN"/>
<xsl:template match="/">
<html>
<head>
<title>Collection de livres</title>
</head>
<body>
<h1>Les livres</h1>
<xsl:for-each select="livres/livre">
<h2><xsl:value-of select="titre/text()"/></h2>
<p>Ce type de livre traite les <font color="red">concepts</font> suivants&#160;:</p>
<ul>
<xsl:for-each select="titre/motcle"><li><xsl:value-of select="."/></li></xsl:for-each>
</ul>
</xsl:for-each>
</body>
</html>
</xsl:template>

34

Exercice 0
Raliser tous les exemples traits dans le

cours (en utilisant XMLSpy).

35

Exercice (1)
Soit le document XML suivant :
<?xml version="1.0" ?>
<?xml:stylesheet type="text/xsl" href="untitled4.xsl"?>
<PEOPLE>
<PERSON>
<NAME >Mark Wilson</NAME>
<ADDRESS>911 Somewhere Circle, Canberra, Australia</ADDRESS>
<TEL>(++612) 12345</TEL>
<FAX>(++612) 12345</FAX>
<EMAIL>Mark.Wilson@somewhere.com</EMAIL>
</PERSON>
<PERSON>
<NAME>Tracey Wilson</NAME>
<ADDRESS>121 Zootle Road, Cape Town, South Africa</ADDRESS>
<TEL>(++2721) 531 9090</TEL>
<FAX>(++2721) 531 9090</FAX>
<EMAIL>Tracey.Wilson@somewhere.com</EMAIL>
</PERSON>
36

Exercice 1(suite)
<PERSON>
<NAME>Jodie Foster</NAME>
<ADDRESS>30 Animal Road, New York, USA</ADDRESS>
<TEL>(++1) 3000 12345</TEL>
<FAX>(++1) 3000 12345</FAX>
<EMAIL>Jodie.Foster@somewhere.com</EMAIL>
</PERSON>
<PERSON>
<NAME>Lorrin Maughan</NAME>
<ADDRESS>1143 Winners Lane, London, UK</ADDRESS>
<TEL>(++94) 17 12345</TEL>
<FAX>++94) 17 12345</FAX>
<EMAIL>Lorrin.Maughan@somewhere.com</EMAIL>
</PERSON>
<PERSON>
<NAME>Steve Rachel</NAME>
<ADDRESS>90210 Beverly Hills, California, USA</ADDRESS>
<TEL>(++1) 2000 12345</TEL>
<FAX>(++1) 2000 12345</FAX>
<EMAIL>Steve.Rachel@somewhere.com</EMAIL>
</PERSON>
</PEOPLE>

37

Exercice 1(suite)
Dfinir la transformation XSLT permettant de

produire le tableau suivant :

38