Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
s.benslimane@esi-sba.dz
XPath, c’est quoi?
• Xpath est une spécification du W3C, dont la version 1.0 est
recommandée en Novembre 1999.
• XPath est un langage non XML utilisé pour extraire des
informations à partir de documents XML.
• Xpath permet de désigner (d’identifier) un ou plusieurs
noeuds dans un arbre XML, à l’aide de certains critères
appelés les expressions de chemin.
• Sa syntaxe élémentaire ressemble à l'expression d'un chemin
dans un SGF.
• Xpath est la brique de base pour d'autres technologies XML :
XSLT : langage de transformation ;
XQuery : langage de requêtes;
XLink : spécification des hyperliens ;
WS-BPEL: langage de composition de services Web.
Modèle de données XPath
• Un document XML est représenté par une
structure hiérarchique en arbre qui comprend 7
types de nœuds:
1. nœud racine "/"
2. nœuds d’élément,
3. nœuds de texte,
4. nœuds d’attribut,
5. nœuds d’espace de noms,
6. nœuds de commentaire,
7. nœuds d’instruction de traitement.
Modèle de données XPath
• Les enfants du noeud racine sont ses noeuds
fils de type commentaire ou instruction de
traitement.
• Les enfants d’un noeud élément sont ses
noeuds fils de type élément, texte,
commentaire ou instruction de traitement.
• Les descendants du noeud racine ou d’un
noeud élément sont ses enfants ou les enfants
de ses enfants.
Chemin de localisation XPath
• Un chemin ou une expression Xpath est une
construction récursive constituée d’étapes
séparées par "/".
• Syntaxe d'un chemin : [/]étape1/étape2/…/étapeN
• Une expression XPath peut être relative ou
absolue (comme une URL):
– Si elle commence par "/": absolue depuis la racine,
Exemple: /Livre/editeur/nom
– Sinon: relative au nœud "courant "
Exemple: Livre/editeur/nom
Étape de localisation XPath
• Une étape est composée de trois parties. Elle a la forme:
[axe::]filtre[predicat1] [predicat2]…[predicatN]
E T Text()
Titre
E E T Text()
Auteur Nom
E T Text()
Prénom
Axe Self
E T Text()
Description
<Cours>
<!--ceci un est exemple XPath--> E T Text()
<Titre>Cours XML</Titre> b
<Auteur>
T Text()
<Nom>Benslimane</Nom>
<Prénom>Sidi Med</Prénom>
-- Comment()
</Auteur>
<Description>
Ce cours aborde les <b>concepts</b>
de base dans XPath.
<!-- c'est le meilleur cours !!! -->
</Description>
</Cours>
/ E -- Comment()
Cours
E T Text()
Titre
E E T Text()
Auteur Nom
E T Text()
Description
<Cours>
<!--ceci est exemple XPath--> E T Text()
<Titre>Cours XML</Titre> b
<Auteur>
T Text()
<Nom>Benslimane</Nom>
<Prénom>Sidi Med</Prénom>
-- Comment()
</Auteur>
<Description>
Ce cours aborde les <b>concepts</b>
de base dans XPath.
<!-- c'est le meilleur cours !!! -->
</Description>
</Cours>
/ E -- Comment()
Cours
E T Text()
Titre
E E T Text()
Auteur Nom
E T Text()
Description
<Cours>
<!--ceci est exemple XPath--> E T Text()
<Titre>Cours XML</Titre> b
<Auteur>
T Text()
<Nom>Benslimane</Nom>
<Prénom>Sidi Med</Prénom>
-- Comment()
</Auteur>
<Description>
Ce cours aborde les <b>concepts</b>
de base dans XPath.
<!-- c'est le meilleur cours !!! -->
</Description>
</Cours>
/ E -- Comment()
Cours
E T Text()
Titre
E E T Text()
Auteur Nom
E T Text()
Description
<Cours>
<!--ceci est exemple XPath--> E T Text()
<Titre>Cours XML</Titre> b
<Auteur>
T Text()
<Nom>Benslimane</Nom>
<Prénom>Sidi Med</Prénom>
-- Comment()
</Auteur>
<Description>
Ce cours aborde les <b>concepts</b>
de base dans XPath.
<!-- c'est le meilleur cours !!! -->
</Description>
</Cours>
Les axes de recherche: Les axes en arrière
Les axes qui permettent de remonter dans l’arbre :
E T Text()
Titre
Axe Parent
E E T Text()
Auteur Nom
E T Text()
Prénom
E T Text()
Description
<Cours>
<!--ceci est exemple XPath--> E T Text()
<Titre>Cours XML</Titre> b
<Auteur>
T Text()
<Nom>Benslimane</Nom>
<Prénom>Sidi Med</Prénom>
-- Comment()
</Auteur>
<Description>
Ce cours aborde les <b>concepts</b>
de base dans XPath.
<!-- c'est le meilleur cours !!! -->
</Description>
</Cours>
/ E -- Comment()
Cours
Axe Ancestor
E T Text()
Titre
E E T Text()
Auteur Nom
E T Text()
Prénom
E T Text()
Description
<Cours>
<!--ceci est exemple XPath--> E T Text()
<Titre>Cours XML</Titre> b
<Auteur>
T Text()
<Nom>Benslimane</Nom>
<Prénom>Sidi Med</Prénom>
-- Comment()
</Auteur>
<Description>
Ce cours aborde les <b>concepts</b>
de base dans XPath.
<!-- c'est le meilleur cours !!! -->
</Description>
</Cours>
/ E -- Comment()
Cours
E T Text()
Titre
E E T Text()
Auteur Nom
Axe Ancestor-or-self
E T Text()
Prénom
E T Text()
Description
<Cours>
<!--ceci est exemple XPath--> E T Text()
<Titre>Cours XML</Titre> b
<Auteur>
T Text()
<Nom>Benslimane</Nom>
<Prénom>Sidi Med</Prénom>
-- Comment()
</Auteur>
<Description>
Ce cours aborde les <b>concepts</b>
de base dans XPath.
<!-- c'est le meilleur cours !!! -->
</Description>
</Cours>
Les axes de recherche: Les axes à droite et
à gauche
• Following-sibling: les noeuds frères placés après
le noeud courant (partageant le même père).
E T Text()
Titre
E E T Text()
Auteur Nom
Axe Following-sibling
E T Text()
Prénom
E T Text()
Description
<Cours>
<!--ceci est exemple XPath--> E T Text()
<Titre>Cours XML</Titre> b
<Auteur>
T Text()
<Nom>Benslimane</Nom>
<Prénom>Sidi Med</Prénom>
-- Comment()
</Auteur>
<Description>
Ce cours aborde les <b>concepts</b>
de base dans XPath.
<!-- c'est le meilleur cours !!! -->
</Description>
</Cours>
/ E -- Comment()
Cours
E T Text()
Titre
Axe Preceding-sibling
E E T Text()
Auteur Nom
E T Text()
Prénom
E T Text()
Description
<Cours>
<!--ceci est exemple XPath--> E T Text()
<Titre>Cours XML</Titre> b
<Auteur>
T Text()
<Nom>Benslimane</Nom>
<Prénom>Sidi Med</Prénom>
-- Comment()
</Auteur>
<Description>
Ce cours aborde les <b>concepts</b>
de base dans XPath.
<!-- c'est le meilleur cours !!! -->
</Description>
</Cours>
Les axes de recherche: Les axes avant et après
• Following: les nœuds placés après dans le
document (excepté ses descendants ainsi que les
noeuds attributs).
E T Text()
Titre
E E T Text()
Auteur Nom
Axe Following
E T Text()
Prénom
E T Text()
Description
<Cours>
<!--ceci est exemple XPath--> E T Text()
<Titre>Cours XML</Titre> b
<Auteur>
T Text()
<Nom>Benslimane</Nom>
<Prénom>Sidi Med</Prénom>
-- Comment()
</Auteur>
<Description>
Ce cours aborde les <b>concepts</b>
de base dans XPath.
<!-- c'est le meilleur cours !!! -->
</Description>
</Cours>
/ E -- Comment()
Cours
E T Text()
Titre
Axe Preceding
E E T Text()
Auteur Nom
E T Text()
Prénom
E T Text()
Description
<Cours>
<!--ceci est exemple XPath--> E T Text()
<Titre>Cours XML</Titre> b
<Auteur>
T Text()
<Nom>Benslimane</Nom>
<Prénom>Sidi Med</Prénom>
-- Comment()
</Auteur>
<Description>
Ce cours aborde les <b>concepts</b>
de base dans XPath.
<!-- c'est le meilleur cours !!! -->
</Description>
</Cours>
Les axes de recherche: Les axes pour les attributs
Cours Soutitre @
E T Text()
Axe attribute Titre
E E T Text()
Auteur Nom
E T Text()
Prénom
E T Text()
Description
<Cours>
<!--ceci est exemple XPath--> E T Text()
<Titre soutitre=’XPath’>Cours XML</Titre> b
<Auteur>
T Text()
<Nom>Benslimane</Nom>
<Prénom>Sidi Med</Prénom>
-- Comment()
</Auteur>
<Description>
Ce cours aborde les <b>concepts</b>
de base dans XPath.
<!-- c'est le meilleur cours !!! -->
</Description>
</Cours>
Les filtres (test de nœuds)
[axe::]filtre[predicat1] [predicat2]…[predicatN]
/ E -- Comment()
Cours Soutitre @
/Cours/Titre/@soutitre
E T Text()
Titre
/Cours/Auteur/Prénom
E E T Text()
Auteur Nom
<Cours>
<!--ceci est exemple XPath--> E T Text()
<Titre soutitre=’XPath’>Cours XML</Titre>
Prénom
<Auteur>
<Nom>Benslimane</Nom>
E T Text()
<Prénom>Sidi Med</Prénom>
</Auteur> Description
<Description> E T Text()
Ce cours aborde les <b>concepts</b>
b
de base dans XPath.
<!-- c'est le meilleur cours !!! --> T Text()
</Description>
</Cours>
-- Comment()
/Cours/Description/comment()
/Cours/Description/node()
Les Prédicats
[axe::]filtre[predicat1] [predicat2]…[predicatN]
Un prédicat est destiné à filtrer un ensemble de noeuds.
• Ces tests peuvent impliquer des fonctions ou de
nouveaux chemins Xpath.
• Un prédicat est composé d’une expression booléenne
appelée expression du prédicat qui peut être:
– Condition d’existence
– Condition de position
– Condition logique
Les Prédicats: Condition d’existence
Permet de sélectionner un noeud en fonction de ses fils, père,
attributs, etc.
•Exemple : //AA[DD]
<ROOT> <ROOT>
<AA> <AA>
<BB> <BB>
<CC/> <CC/>
</BB> </BB>
<DD/> <DD/>
</AA> </AA>
<AA> <AA>
<BB/> <BB/>
</AA> </AA>
</ROOT> </ROOT>
<ROOT> <ROOT>
<AA> <AA>
<BB> <BB>
<CC/> <CC/>
</BB> </BB>
<DD/> <DD/>
</AA> /ROOT/AA[position()=2] ou /ROOT/AA[2] </AA>
<AA> <AA>
Sélectionne le deuxième fils AA de ROOT
<BB/> <BB/>
</AA> </AA>
</ROOT> </ROOT>
Les Prédicats: Condition de position
<stock>
<produit>
<nom> Livre </nom>
<prix monnaie="Dinard"> 50 </prix>
<comment> Un commentaire </comment>
</produit>
<produit>
<nom> DVD </nom>
<prix monnaie="Euros"> 2 </prix>
</produit>
</stock>
/stock/produit[1]
<stock>
<produit>
<nom> Livre </nom>
<prix monnaie="Dinard"> 50 </prix>
<comment> Un commentaire </comment>
</produit>
<produit>
<nom> DVD </nom>
<prix monnaie="Euros"> 2 </prix>
</produit> sélectionne le premier
</stock> élément produit de stock.
Les Prédicats: Condition de position
<ROOT> <ROOT>
<AA> <AA>
<BB> <BB>
</BB> </BB>
<DD/> <DD/>
</AA> </AA>
<AA> <AA>
<BB/> <BB/>
</AA> </AA>
</ROOT> </ROOT>
produit[prix = 100]
produit[prix != 100]
produit[prix < /stock/produit/prix]
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 produits ayant un prix égal à 100
Les opérations & fonctions
Opérations sur les nombres
+, -, mod, div,
Exemples
sum(//prix)
calcule la somme des contenus de tous les éléments prix du document XML.
//*[count(livre)=2]
Les éléments ayant 2 enfants livre
Count(//*[count(*)=2])
Le nombre d’éléments ayant deux enfants
Les opérations & fonctions
Fonctions sur les nombres
count(noeuds): renvoie le nombre de nœuds de l'ensemble
passé en argument..
count(/ROOT/AA)
renvoie 3
count(/ROOT/*)
renvoie 5.
Les opérations & fonctions
Fonctions sur les booléens
<a >
<b>bla bla</b> boolean(/a/b) true()
<d>bla bla</d> boolean(/a/e) false()
</a>
Les opérations & fonctions
Fonctions sur les nœuds
Syntaxe:
cheminXpath1|cheminXPath2|...
Exemple:
/enseignant/nom|/etudiant/nom
Syntaxe abrégée
• Les constructions les plus fréquentes des expressions XPath peuvent être
abrégées de façon à avoir des expressions plus concises. Les abréviations
possibles sont les suivantes.
Originale Abrégée
child::
attribute:: @
/descendant-or-self::node()/ //
self::node() .
parent::node() ..
[position()=n] [n]
<?xml version="1.0" encoding="UTF-8"?>
<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> Exemples de requêtes absolues
/
sélectionne un nœud "fictif", dit root element, qui englobe tout le document, y compris <?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"
<?xml version="1.0" encoding="UTF-8"?>
<racine>
<encyclopedie nom="Wikipedia" site="http://fr.wikipedia.org/">
<article nom="XPath">
<auteurs>
<auteur>
<nom>Dupont</nom>
</auteur>
<auteur>
<nom>Patrice</nom>
</auteur>
</auteurs>
</article>
</encyclopedie>
</racine>
Exemples de requêtes relatives
dans le contexte de l’élément encyclopedie
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 (Patrice) du premier article
article[count(auteurs/auteur)>2]
sélectionne les articles qui ont au moins 3 auteurs
Motif Signification
/ la racine du document
* tous les éléments
section tous les éléments section
chapter|section tous les éléments chapter et section
chapter/section tous les éléments section enfants d'un élément chapter
chapter//section tous les éléments section descendants d'un élément chapter
//section tous les éléments section du document
./section tous les éléments section fils du nœud courant
*/section Tous les éléments section petit fils du nœud courant
section[1] tous les éléments section qui sont le premier enfant de leur parent
section[@lang] tous les éléments section ayant un attribut lang
section[@lang='fr'] tous les éléments section dont l'attribut lang a la valeur fr
section/@lang tous les attributs lang des éléments section
@* tous les attributs
./@* Tous les attributs de l’élément courant
*[last()] Le dernier fils du nœud courant
node() tous les nœuds
text() tous les nœuds textuels
comment() tous les commentaires