Exploité par XPointer
et XSLT,
XPath est une recommandation
du W3C.
Fruit de la collaboration entre les "XSL et XPointer Working
Groups", XPath doit permettre de combler certains besoins communs
de ces deux techniques : accéder à un endroit spéficique
d'un arbre XML.
XPath n'est pas seulement un langage "d'adressage",
il est également constitué d'un ensemble de fonctions
(chaînes de caractères, booléennes, numériques)
destinés à accroître encore ses possibilités.
Nous étudions uniquement aujourd'hui la syntaxe destinée
à localiser un point précis du document XML.
Les principes sur lesquels XPath repose
XPath tire son nom du rapprochement qu'on peut établir entre
sa syntaxe ("location path") et celle des fonctions utilisées
en général dédiées aux système
de fichiers.
Nous verrons en effet à l'aide d'exemples comment cette similitude
s'exprime.
Avec XPath, chaque document XML est perçu sous la forme
d'un arbre, pourvu de noeuds. Ces derniers sont au nombre
de sept :
- Le noeud racine (root node)
- Les noeuds d'élements (element nodes)
- Les noeuds d'attributs (attributes nodes)
- Les noeuds de texte (text nodes)
- Les noeuds d'espaces de noms (namespace nodes)
- Les noeuds d'instructions de traitement (processing instruction
nodes)
- Les noeuds de commentaires (comment nodes)
Afin de pointer sur un objet précis, XPath utilise des chemins.
Un chemin se compose d'un axe (choisi parmi treize), d'un
test sur un type de noeud, et d'un ou plusieurs prédicats.
Un axe représente la relation entre le noeud courant et
les noeuds que l'on souhaite sélectionner. Voici quelques-uns
des axes disponibles :
- ancestor
- child
- descendant
- following
- preceding
- parent
- self
Un exemple devrait clarifier ces définitions :
Le chemin /descendant::* signifie que
tous les éléments, en partant de la racine ("/"),
doivent être sélectionnés.
<catalogue>
<voiture>
<marque>Renault</marque>
<modele>Clio</modele>
</voiture>
</catalogue>
Autre exemple, plus simple, à partir du même schéma
: /catalogue/voiture/*
<catalogue>
<voiture>
<marque>Renault</marque>
<modele>Clio</modele>
</voiture>
</catalogue>
Ou encore, /catalogue/voiture/marque/ancestor::*
et on obtient :
<catalogue>
<voiture>
<marque>Renault</marque>
<modele>Clio</modele>
</voiture>
</catalogue>
Un chemin peut se définir de deux manières, de manière
abrégée ou pas.
La syntaxe complète se compose du nom d'un axe, suivi d'un
noeud de test, le tout séparé par "::",
un ou plusieurs prédicats suivent (facultatif).
Le chemin /catalogue peut également
s'écrire /child::catalogue, ce
qui donne :
<catalogue>
<voiture>
<marque>Renault</marque>
<modele>Clio</modele>
</voiture>
</catalogue>
Reste maintenant à vous familiariser avec les axes et prédicats
disponibles. Plutôt que de parcourir de suite la recommandation
du W3C, nous vous conseillons de passer par cette bonne sélection
d'exemples, de difficultés progressives.
Entrainez-vous à deviner quels éléments seront
sélectionnés en ne consultant que le chemin, puis
testez vos connaissances fraîchement acquises en écrivant
vous-mêmes votre "XPath".
Un bon complément d'informations sur XPatch est également
disponible via cette
publication en ligne d'un chapitre d'ouvrage O'Reilly.
|