XPath
XPath est un langage de requĂȘte pour localiser une portion d'un document XML. Initialement crĂ©Ă© pour fournir une syntaxe et une sĂ©mantique aux fonctions communes Ă XPointer et XSL, XPath a rapidement Ă©tĂ© adoptĂ© par les dĂ©veloppeurs comme langage d'interrogation simple d'emploi.
Développé par | World Wide Web Consortium |
---|---|
PremiĂšre version | |
DerniĂšre version | 3.1 ()[1] |
Formats lus | Extensible Markup Language et JavaScript Object Notation |
Type |
Langage de requĂȘte Langage de programmation |
Syntaxe et sémantique
Une expression XPath est un chemin de localisation, constitué de pas de localisation (appelés également en français étapes[2]). Les pas de localisation sont séparés par le caractÚre « / ».
Les pas de localisation ont chacun trois composants :
- un axe (parent, descendantâŠ) ;
- un test de nĆud (nom ou fonction dĂ©signant les nĆuds) ;
- des prédicats (entre crochets).
L'axe indique la direction dans laquelle se dĂ©placer dans l'arbre XML, relativement au nĆud courant ou depuis la racine. Par exemple, child::
sĂ©lectionnera les nĆuds enfants du nĆud courant. Dans XPath, quand l'axe n'est pas prĂ©cisĂ©, il s'agit implicitement de l'axe des enfants (child::
). Un autre axe largement utilisé est celui des attributs, représenté avec le caractÚre arobase (@
). Il existe en tout 13 axes qui permettent d'exprimer des relations généalogiques, ou qui considÚrent l'ordre de lecture du document.
Le test de nĆud permet de sĂ©lectionner ou non les nĆuds en fonction de leur nom ou de leur type. Par exemple le test text()
sĂ©lectionnera tous les nĆuds de type texte (dans l'axe considĂ©rĂ©).
Les prĂ©dicats sont des expressions plus complexes ; ils sont utilisĂ©s pour filtrer les nĆuds sĂ©lectionnĂ©s par l'axe et le test de nĆud. Les prĂ©dicats sont Ă©crits entre crochets (« [ », « ] »). Si le prĂ©dicat est Ă©valuĂ© Ă vrai, les nĆuds correspondants seront sĂ©lectionnĂ©s.
XPath offre ainsi une recherche sĂ©quentielle par nĆuds. Le rĂ©sultat de l'Ă©valuation d'une expression XPath est une sĂ©quence contenant des nĆuds et des valeurs atomiques (textes, boolĂ©ensâŠ).
En fonction de la nature (nombre, boolĂ©en, texte) des valeurs sĂ©lectionnĂ©es, XPath offre un certain nombre de fonctions. Ces fonctions sont limitĂ©es car elles sont plus destinĂ©es Ă ĂȘtre utilisĂ©es dans les prĂ©dicats que pour effectuer un traitement sur les donnĂ©es sĂ©lectionnĂ©es.
Les fonctions qui s'appliquent aux nombres les plus utilisées sont : sum(), count() et les opérateurs arithmétiques. Les fonctions qui s'appliquent aux chaines les plus utilisées sont : substring(), string-length(), concat().
Exemples XPath 1
Considérons le document XML suivant :
<?xml version="1.0"?>
<racine>
<encyclopedie nom="Wikipedia" site="http://fr.wikipedia.org/">
<article nom="XPath">
<auteurs>
<auteur>
<nom>Dupont</nom>
</auteur>
<auteur>
<nom>Dubois</nom>
</auteur>
</auteurs>
</article>
</encyclopedie>
</racine>
Expression XPath | RĂ©sultat |
---|---|
/ | sĂ©lectionne un nĆud "fictif", dit root element, qui englobe tout le document, y compris le doctype <?xml version="1.0"?>[3] |
/root | sĂ©lectionne le nĆud vide, puisqu'il n'y a pas d'Ă©lĂ©ment "root" (mais "racine") |
//article | sĂ©lectionne tous les Ă©lĂ©ments "article" du document oĂč qu'ils soient |
/racine/encyclopedie | sélectionne l'unique élément "encyclopedie" puisqu'il est ici le seul fils de "racine" portant ce nom |
//article[@nom='XPath'] | sĂ©lectionne tous les Ă©lĂ©ments "article" du document oĂč qu'ils soient, ayant un attribut "nom" dont la valeur est "XPath" |
Toutes ces expressions XPath sont absolues (elles commencent par un caractĂšre "/"), c'est-Ă -dire qu'elles donnent le mĂȘme rĂ©sultat quel que soit le contexte. Les expressions suivantes sont relatives. Si le contexte courant est l'unique Ă©lĂ©ment "encyclopedie", elles donnent :
Expression XPath | RĂ©sultat |
---|---|
article | sélectionne l'élément "article" |
racine | ne sélectionne rien, vu le contexte |
article[1]/auteurs/auteur[2] | sélectionne le second auteur (Dubois) du premier article |
article[ count(article/auteurs/auteur) >1 ] | sélectionne les articles qui ont au moins 2 auteurs |
../racine | sélectionne l'élément "racine", puisqu'il est parent de l'élément courant |
Le résultat de ces sélections dépendra de la nature de la tùche :
- En affichage, ce sera la valeur textuelle, propre Ă chaque type d'Ă©lĂ©ment, qui apparaĂźtra. Si plusieurs nĆuds sont sĂ©lectionnĂ©s, comme pour //article, seul le premier est concernĂ©.
- En sĂ©lection, il se comportera comme un pointeur sur lequel d'autres requĂȘtes XPath pourront ĂȘtre effectuĂ©es.
Ăvolutions
La syntaxe XPath a Ă©voluĂ© pour devenir plus complĂšte. La norme XPath 2.0 (en), recommandation W3C depuis le , dĂ©crit un sous-ensemble commun aux langages XSLT 2.0 et XQuery 1.0, constituant Ă©galement un langage de requĂȘte XML autonome beaucoup plus riche que la premiĂšre version incluse dans XSLT 1.
Exemples XPath 2
<?xml version="1.0" encoding="utf-8"?>
<wikimedia>
<projects>
<project name="Wikipedia" launch="2001-01-05">
<editions>
<edition language="English">en.wikipedia.org</edition>
<edition language="German">de.wikipedia.org</edition>
<edition language="French">fr.wikipedia.org</edition>
<edition language="Polish">pl.wikipedia.org</edition>
<edition language="Spanish">es.wikipedia.org</edition>
</editions>
</project>
<project name="Wiktionary" launch="2002-12-12">
<editions>
<edition language="English">en.wiktionary.org</edition>
<edition language="French">fr.wiktionary.org</edition>
<edition language="Vietnamese">vi.wiktionary.org</edition>
<edition language="Turkish">tr.wiktionary.org</edition>
<edition language="Spanish">es.wiktionary.org</edition>
</editions>
</project>
</projects>
</wikimedia>
Utilisations
XPath est le langage de requĂȘte Ă©lĂ©mentaire dans XSLT. Il dĂ©termine si une rĂšgle template s'applique (via son attribut match), et peut aussi servir Ă extraire des contenus du document XML transformĂ© par le programme XSLT.
XPath peut ĂȘtre utilisĂ© comme langage de requĂȘte dans les bases de donnĂ©es XML, souvent en tant que sous-ensemble de XQuery.
XPath est utilisé comme langage d'expression des rÚgles dans Schematron, et partiellement aussi dans XML Schema.
XPath peut ĂȘtre utilisĂ© depuis la ligne de commande, ici avec la commande xpath qui vient du module Perl XML::XPath. Ici, on cherche les URL des articles dans un flux de syndication Atom :
$ xpath -e '//link[@rel="alternate"]/@href' feed.atom
Autre exemple, avec xfind pour chercher des fichiers (XML servant à modéliser les attributs du fichier) :
$ ./find -xpath '/bin/*[@size > /bin/bash/@size]'
/bin/ipv6calc
/bin/rpm
Voir aussi
Liens externes
- (en) XML Path Language (XPath) 2.0, , recommandation du W3C
- (en) Tutoriel Xpath, sur le site de W3Schools
- (en) Cours sur le langage XPath par Pierre Geneves
Références
- « https://www.w3.org/TR/xpath-31/ »
- Voir le terme étape dans la traduction française de la recommandation XPath
- http://www.xpathtester.com/