Vous êtes sur la page 1sur 8

Le langage de requte XPATH e

Table des mati`res e 1


1.1

Introduction
Prsentation e

Le langage XPATH ore un moyen didentier un ensemble de noeuds dans un document XML. Toutes les applications ayant besoin de reprer un fragment de document XML peuvent utiliser ce langage. e Les feuilles de style XSL, les pointers XPOINTER et les liens XLINK utilisent de mani`re intensive les expressions e XPATH. XPATH est un premier pas vers un langage dinterrogation dune base de donnes XML (XQuery). e

1.2

Structure darbre dun document XML

<! >

stock

Texte

produit

produit

<! >

nom

prix

comment

nom

prix

Texte

Livre

50

Un commentaire

CD

23 monnaie=Euros

monnaie=Francs

<!-- Texte --> <stock> <produit> <nom> Livre </nom><prix monnaie="Francs"> 50 </prix> <comment> Un commentaire </comment> </produit> <produit> <nom> CD </nom><prix monnaie="Euros"> 23 </prix> </produit> <!-- Texte --> </stock>

1.3

Les expressions

La forme gnrale dune expression XPATH est e e 1

slecteur1 /slecteur2 /... e e /slecteur1 /slecteur2 /... e e

(exp. relative) (exp. absolue)

Chaque slecteur slectionne un ensemble de noeuds en fonction du rsultat du slecteur prcdent. e e e e e e Lensemble initial est soit le noeud courant (forme relative) soit la racine (forme absolue). Exemple :
/stock/produit/comment

1.4

Les slecteurs de noeuds e

Les slecteurs de noeuds sont de la forme : e axe::ltre[condition1 ][condition2 ]... - laxe indique un sens de recherche, - le ltre slectionne un type de noeud, e - les conditions slectionnent sur le contenu. e Les parties  axe  et  conditions  sont optionnelles.

2
2.1

Les axes de recherche


Les axes en avant

Les axes qui permettent de descendre dans larbre : child les ls du noeud courant (cest laxe par dfaut). Cest deux expressions sont identiques : e
produit/child::nom produit/nom

self le noeud courant,


/stock/produit[condition1]/self::produit[condition2]

descendant les descendants du noeud courant


/stock/descendant::prix

descendant-or-self les descendants du noeud courant plus lui-mme. e

2.2

Les axes en arri`re e

Les axes qui permettent de remonter dans larbre : parent le noeud parent du noeud courant, ancestor les ascendants du noeud courant (dans lexemple ci-dessous le noeud courant est le nom du produit) :
ancestor::produit/prix

ancestor-or-self que dire ?

2.3

Les axes ` droite et ` gauche a a

following-sibling les noeuds fr`res placs apr`s le noeud courant, e e e

stock

produit

produit

produit

preceding-sibling les noeuds fr`res placs avant le noeud courant, e e

2.4

Les axes avant et apr`s e

following les noeuds placs apr`s dans le document, e e

stock

produit

produit

nom

prix

comment

nom

prix

preceding les noeuds placs avant dans le document, e

2.5

Les axes pour les attributs

attribute les noeuds de type attribut du noeud courant, namespace les noeuds de type espace de nom du noeud courant,

3
3.1
nom

Les ltres
Filtrer les noeuds nomms e
les noeuds de laxe qui portent ce nom.
/stock/produit/prix/attribute::monnaie

* les noeuds de laxe qui ont un nom.


/stock/*/prix/attribute::*

3.2

Filtrer les noeuds textuels

text() tous les noeuds de type texte de laxe.


/stock/produit/*/text()

3.3

Filtrer les commentaires

comment() tous les noeuds de type commentaire de laxe.

3.4

Filtrer les instructions de traitement

processing-instructions() tous les noeuds de type instruction de traitement de laxe,

3.5

Filtrer les noeuds

node() tous les noeuds de laxe sauf la racine,


/stock/produit/prix/node()

id(label ) le noeud repr par une tiquette, ee e


id(CD)/prix

Les conditions

Rappel : les slecteurs de noeuds sont de la forme : e axe::ltre[condition1 ][condition2 ]...

4.1

Condition dexistence

expression-xpath vraie ssi lexpression renvoie un ensemble non vide de noeuds.


/stock/produit[prix/attribute::monnaie] /stock/produit[prix[attribute::monnaie]]

Ces expressions slectionnent les noeuds produit ` condition quun prix existe avec lattribut monnaie e a prcis. e e

4.2

Condition de position

numro e vraie ssi le noeud courant ` cette position dans le contexte courant. a
produit[2][comment] produit[comment][2]

La premi`re expression slectionne les noeuds produit en deuxi`me position si il poss`de un lment ls e e e e ee comment, la seconde slectionne le deuxi`me noeud produit qui poss`de un lment l comment. e e e ee

4.3

Les conditions logiques

expr-xpath1 relation expr-xpath2 vraie ssi il existe n1 (dans le rsultat de expr-xpath1 ) et n2 (dans le rsultat de expr-xpath2 ) qui respectent e e la relation. les relations possibles sont =, !=, <, <=, >, >=.
produit[prix = 100] produit[prix != 100] produit[prix < /stock/produit/prix] (1) (2) (3)

Explications : (1) les produits qui ont un prix ` 100 ; (2) les produits qui ont un prix dirent de 100 ; a e (3) tous les produits sauf les plus onreux. e condition1 and condition2 vraie ssi les deux conditions le sont galement. e
produit[prix > 10 and comment]

condition1 or condition2 vraie ssi au moins une des deux conditions est vraie.

not(condition) vraie ssi la condition est fausse.


produit[not(prix != 100)]

tous les prix sont gaux ` 100. e a

Fonctions & oprations e

Les fonctions et oprations sont utilisables dans e - les expressions logiques, - les clauses <xsl:value-of ...> des feuilles de style XSL.

5.1

Oprations sur les nombres e

type de base boolen, cha de caract`res, nombre rel, ensemble de noeuds. e ne e e +, -, mod, div, oprations utilisables sur les nombres (traduction automatique). e
produit[(prix div 10) = (prix mod 10)]

5.2

Fonctions sur les nombres

number(object) traduire lobjet sous la forme dun nombre. renvoie NaN si lobjet ne reprsente pas un nombre. e sum(noeuds) renvoie la somme des noeuds apr`s les avoir transforms en nombre. e e count(noeuds) renvoie le nombre de noeuds. floor(nombre) arrondi par le bas. ceiling(nombre) arrondi par le haut. round(nombre) arrondi par le plus proche.

5.3

Fonctions sur les boolens e

true() toujours vraie. false() toujours fausse. boolean(objet) vraie ssi lobjet est gale ` la constante  true . e a not(boolen) e vraie ssi le param`tre est faux. e 6

5.4

Fonctions sur les noeuds

last() vraie ssi le noeud est le dernier du contexte courant. position() renvoie la position dans le contexte du noeud courant. local-name(noeuds) renvoie la partie locale de ltiquette dun noeud. e namespace-uri(noeuds) renvoie la partie espaces de nom de ltiquette dun noeud. e name(noeuds) renvoie ltiquette dun noeud. e id(nom) renvoie le noeud identi par ltiquette nom. e e

5.5

Fonctions sur les cha nes

string(objet) renvoie une version cha du param`tre. ne e concat(cha ne1,...,cha neN) concatnation de cha e nes. string-length(cha ne) renvoie la longueur dune cha ne. normalize-space(cha ne) renvoie une version normalise (suppression des blancs au dbut et ` la n et remplacement de toute suite e e a de blancs par un seul). translate(ch1,ch2,ch3) renvoie une cha construite ` partir de ch1 dans laquelle les caract`res prsents dans ch2 sont remplacs ne a e e e par les caract`res de mme position dans ch3. e e substring-before(ch1,ch2) renvoie la cha res dnie par ch1 = res + ch2 + reste. ne e substring-after(ch1,ch2) renvoie la cha res dnie par ch1 = reste + ch2 + res. ne e substring(cha ne,dbut) et substring(cha e ne,dbut,len) e extraction de sous-cha ne. starts-with(ch1,ch2) vraie ssi ch1 dbute par ch2. e contains(ch1,ch2) vraie ssi ch1 contient ch2.

Simplications

An dviter une trop grande lourdeur, les simplications suivantes sont autorises : e e

originale child:: attribute:: /descendant-or-self::node()/ self::node() parent::node() [position() = x]

simplie e @ // . .. [x]

exemple /stock/produit /prix/@monnaie //prix prix[. = 10] prix/../nom produits[4]

Vous aimerez peut-être aussi