XPath

Un article de Wikipédia, l'encyclopédie libre.

XPath est une syntaxe (non XML) pour désigner 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 un petit langage d'interrogation.

Sommaire

[modifier] Notation

Il existe deux types de notation : la notation normale et la notation dite « compacte ».

Les deux notations sont adaptées à une utilisation dans les attributs XML. Une expression XPath caractéristique est un chemin de localisation constitué par une suite d'éléments ou d'attributs séparés par une barre de fraction (« / »), ressemblant au chemin dans un système de fichiers. XPath fournit des fonctions intégrées, permet d'utiliser des variables, de définir des filtres et de spécifier des axes.

Les chemins de localisations sont divisés en étapes qui ont chacune 3 composants :

  • un axe,
  • un test de nœud,
  • des prédicats.

L'axe indique le type d'information qui sera sélectionnée, relativement au nœud courant ou depuis la racine. Par exemple, child:: est la syntaxe non-abrégée de l'axe des enfants du nœud courant. Dans beaucoup d'expressions 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' ("@").

Un test de nœud définit les éléments ou attributs à désigner. Le nœud de test le plus utilisé est le test du nom de l'élément ou d'un attribut.

Les prédicats sont des expressions plus complexes ; ils sont utilisés pour filtrer ou exclure certains nœuds. Les prédicats sont écrits entre crochets (« [ », « ] »).

XPath offre ainsi une recherche séquentielle par nœuds.

[modifier] Exemples

Considérons le document XML suivant :

 <?xml version="1.0"?>
 <racine>
  <encyclopedie nom="Wikipedia" site="http://fr.wikipedia.org/">
   <article nom="XPath"></article>   
  </encyclopedie>
 </racine>

alors les expressions XPath suivantes

Expression XPath Résultat
/ sélectionne un nœud "fictif", dit root element, qui englobe tout le document sauf <?xml version="1.0"?>
/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, 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
../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.

[modifier] Utilisations de XPath

XPath est le langage de description des nœuds dans XSLT.

XPath est toujours utilisé comme langage de requêtes dans les bases de données XML, en général en concurrence avec 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

[modifier] Evolutions

La syntaxe XPath a évolué pour devenir plus complète. La norme XPath 2.0, recommandation W3C depuis le 23 janvier 2007 est prévue pour être utilisée dans les langages XSLT 2.0 et XQuery 1.0, entre autres.

[modifier] Voir aussi

[modifier] Liens externes

Wikipedia HTML 2008 in other languages

100 000 +

Česká (Czech)  •  English  •  Deutsch (German)  •  日本語 (Japanese)  •  Français (French)  •  Polski (Polish)  •  Suomi (Finnish)  •  Svenska (Swedish)  •  Nederlands (Dutch)  •  Español (Spanish)  •  Italiano (Italian)  •  Norsk (Norwegian Bokmål)  •  Português (Portuguese)  •  Română (Romanian)  •  Русский (Russian)  •  Türkçe (Turkish)  •  Українська (Ukrainian)  •  中文 (Chinese)

10 000 +

العربية (Arabic)  •  Български (Bulgarian)  •  Bosanski (Bosnian)  •  Català (Catalan)  •  Cymraeg (Welsh)  •  Dansk (Danish)  •  Ελληνικά (Greek)  •  Esperanto  •  Eesti (Estonian)  •  Euskara (Basque)  •  Galego (Galician)  •  עברית (Hebrew)  •  हिन्दी (Hindi)  •  Hrvatski (Croatian)  •  Magyar (Hungarian)  •  Ido  •  Bahasa Indonesia (Indonesian)  •  Íslenska (Icelandic)  •  Basa Jawa (Javanese)  •  한국어 (Korean)  •  Latina (Latin)  •  Lëtzebuergesch (Luxembourgish)  •  Lietuvių (Lithuanian)  •  Latviešu (Latvian)  •  Bahasa Melayu (Malay)  •  Plattdüütsch (Low Saxon)  •  Norsk (Norwegian Nynorsk)  •  فارسی (Persian)  •  Sicilianu (Sicilian)  •  Slovenčina (Slovak)  •  Slovenščina (Slovenian)  •  Српски (Serbian)  •  Basa Sunda (Sundanese)  •  தமிழ் (Tamil)  •  ไทย (Thai)  •  Tiếng Việt (Vietnamese)

1 000 +

Afrikaans  •  Asturianu (Asturian)  •  Беларуская (Belarusian)  •  Kaszëbsczi (Kashubian)  •  Frysk (Western Frisian)  •  Gaeilge (Irish)  •  Interlingua  •  Kurdî (Kurdish)  •  Kernewek (Cornish)  •  Māori  •  Bân-lâm-gú (Southern Min)  •  Occitan  •  संस्कृत (Sanskrit)  •  Scots  •  Tatarça (Tatar)  •  اردو (Urdu) Walon (Walloon)  •  יידיש (Yiddish)  •  古文/文言文 (Classical Chinese)

100 +

Nehiyaw (Cree)  •  словѣньскъ (Old Church Slavonic)  •  gutisk (Gothic)  •  ລາວ (Laos)