Données semi-structurées
scéances de TP4
Mme F. Brahim Salem
Réf: w3schools.com
Série d’exercice: Dr AISSAOUA
XPATH (XML PATH LANGUAGE)
XPath peut être utilisé pour parcourir les éléments et les attributs
d'un document XML.
XPath contient plus de 200 fonctions integrées.
XPath utilise des expressions de chemin pour sélectionner des
nœuds ou des ensembles de nœuds dans un document XML.
Ces expressions de chemin ressemblent beaucoup aux expressions
de chemin utilisés avec les systèmes de fichiers informatiques
traditionnels (c:/programmes files/gbooks/docs).
FONCTIONS STANDARD XPath
XPath comprend plus de 200 fonctions intégrées.
Il existe des fonctions pour les valeurs de chaîne de caractères, les
valeurs numériques, les booléens, la comparaison de date et
d'heure, la manipulation de nœuds, la manipulation de séquence
et bien plus encore.
Aujourd'hui, les expressions XPath peuvent également être
utilisées dans JavaScript, Java, XML Schema, PHP, Python, C et C
++, et de nombreux autres langages.
Les nœuds xpath
Dans XPath, il existe six types de nœuds: élément, attribut, texte, espace de noms,
instruction de traitement, et commentaire.
Les documents XML sont traités comme des arbres de nœuds. L'élément le plus
haut de l'arborescence est appelé l'élément racine.
Exemple:
<bookstore>
<book> Exemples de nœuds:
<title lang="en">Harry Potter</title> <bookstore> (nœud racine)
<author>J K. Rowling</author> <author>J K. Rowling</author> (nœud élément)
<year>2005</year>
<price>29.99</price> lang="en" (nœud attribut)
</book>
</bookstore>
Les nœuds xpath
On distingue cinq types de relations entre nœuds
Parent (parent): Chaque élément et attribué a un parent.
Enfants (children): Les nœuds éléments peuvent avoir zéro, un ou
plusieurs enfants.
Frères et sœurs (siblings): Les nœuds qui ont le même parent.
Les ancêtres (ancestors): Le parent d'un nœud, le parent d'un parent, etc.
Descendants (descendants): Les enfants d'un nœud, les enfants des
enfants, etc.
LA SYNTAXE DE XPATH (SÉLECTIONNER DES NOEUDS
• XPath utilise des expressions de chemin pour sélectionner des
nœuds ou des ensembles de nœuds dans un document XML.
• Le nœud est sélectionné en suivant un chemin ou des étapes.
• Les expressions de chemin les plus utiles sont répertoriées ci-
dessous:
LA SYNTAXE DE XPATH
• Exemple:
/bookstore//book : Sélectionne tous les éléments book qui sont des
descendants de l'élément bookstore, peu importe où ils se trouvent sous
l'élément bookstore
//@lang : sélectionne tous les attributs nommés lang
//book : sélectionne tous les éléments book peu importe où ils se trouvent
dans le document
syntaxe xpath (les prédicats)
Les prédicats sont utilisés pour rechercher un nœud spécifique ou un
nœud contenant une valeur spécifique.
Les prédicats sont toujours inclus entre crochets [ ].
Exemples:
/bookstore/book[1] : Sélectionne le premier élément book qui est enfant
de l'élément bookstore.
/bookstore/book[last()] : Sélectionne le dernier élément book qui est
enfant de l'élément bookstore.
//title[@lang] : sélectionne tous les éléments title qui ont un attribut
nommé lang
Syntaxe xpath (les nœuds inconnus)
Les jokers XPath peuvent être utilisés pour sélectionner des nœuds
XML inconnus.
/bookstore/* : sélectionne tous les nœuds éléments enfants de
l’élément bookstore
Les axes xpath
• Le nœud est sélectionné en suivant un chemin ou des étapes.
• Une étape est de la forme: [axe::]filtre[prédicat]
Un axe peut avoir une des valeurs:
Les axes xpath
Les opérateurs xpath
Exercice 1:
Soit le document XML suivant :
A. Écrivez les requêtes XPath permettant de répondre aux questions
suivantes :
1. Lister tous les titres des livres présents dans la bibliothèque.
2. Sélectionner le titre du livre dont l'identifiant est m1.
3. Combien de livres ont l'auteur "Thomas Kuhn" ?
4. Afficher tous les livres disponibles dans la bibliothèque.
5. Sélectionner l’auteur du livre ayant pour titre "Introduction aux
algorithmes".
6. Afficher l’année de publication des livres dont le titre commence par
"La".
7. Sélectionner les livres du domaine "informatique".
8. Lister les livres publiés après 1980.
9. Sélectionner les livres qui sont disponibles.
10. Afficher les auteurs des livres publiés avant 1980.
11. Lister les titres des livres dont l’auteur contient "Thomas".
12. Sélectionner les titres des livres dont le domaine est "informatique"
et qui sont publiés avant 1980.
13. Trouver le nombre total de livres disponibles dans la bibliothèque.
14. Trouver le nombre de livres dans la bibliothèque publiés après 1990
et qui sont disponibles.
Exercice 1: (solution)
1. Lister tous les titres des livres présents dans la bibliothèque.
/bibliotheque/livre/titre ou //titre ou //livre/titre
2. Sélectionner le titre du livre dont l'identifiant est "m1".
/bibliotheque/livre[@id="m1"]/titre
3. Combien de livres ont l'auteur "Thomas Kuhn" ?
Count(//livre[auteur="Thomas Kuhn"])
4. Afficher tous les livres disponibles dans la bibliothèque.
//livre[disponible= "true"]
5. Sélectionner l’auteur du livre ayant pour titre
"Introduction aux algorithmes".
//livre[titre="Introduction aux algorithmes"] /auteur
6. Afficher l’année de publication des livres dont le titre commence par "La".
/bibliotheque/livre[starts-with(titre, « la »)]/annee
7. Sélectionner les livres du domaine "informatique".
/bibliotheque/livre[@domaine=’’informatique’’]
8. Lister les livres publiés après 1980.
//livre[annee> «1980 " ])
Exercice 1: (solution)
9. Sélectionner les livres qui sont disponibles.
/bibliotheque/livre[disponible="true"]
10. Afficher les auteurs des livres publiés avant 1980.
/bibliotheque/livre[annee<"1980"]/auteur
/bibliotheque/livre[./annee<"1980"]/auteur
11. Lister les titres des livres dont l’auteur contient "Thomas".
/bibliotheque/livre[contains(auteur, "Thomas ")]/titre
/bibliotheque/livre[contains(./auteur, "Thomas ")]/titre
12. Sélectionner les titres des livres dont le domaine est "informatique" et qui sont publiés avant 1980.
/bibliotheque/livre[@domaine="informatique" and annee<1980]/titre
/bibliotheque/livre[./@domaine="informatique" and ./annee<1980]/titre
13. Trouver le nombre total de livres disponibles dans la bibliothèque.
count(//livre[disponible="true"])
count(//livre[./disponible="true"])
14. Trouver le nombre de livres dans la bibliothèque publiés après 1990 et qui sont disponibles.
count(//livre[annee>"1990" and disponible="true"])
count(//livre[./annee>"1990" and ./disponible="true"])
Exercice 1: (B)
Soit le document XML suivant :
B. Formulez, à l’aide des axes XPath, les requêtes répondant
aux questions suivantes :
1. Utilise l'axe parent pour sélectionner l'élément
<bibliotheque> à partir du livre ayant l'ID p1.
2. Utilise l'axe descendant pour sélectionner tous les
éléments <titre> dans le document.
3. Sélectionner tous les éléments qui viennent après le livre
ayant l'ID m1 et afficher leurs titres.
4. sélectionner tous les livres publiés avant le livre ayant l'ID
c2.
5. sélectionner tous les livres qui précèdent immédiatement
le livre ayant l'ID c2 au même niveau hiérarchique.
6. sélectionner tous les éléments parents du livre ayant l'ID c1
et afficher leur domaine.
7. sélectionner le premier livre du domaine "informatique".
Exercice 1: (solution B)
1. Utilise l'axe parent pour sélectionner l'élément <bibliotheque> à partir du livre ayant
l'ID p1.
//livre[@id= "p1"/parent::*
2. Utilise l'axe descendant pour sélectionner tous les éléments <titre> dans le
document.
//descentant::titre ou /descentant::titre ou /bibliotheque/descentant::titre
2. Sélectionner tous les éléments qui viennent après le livre ayant l'ID m1 et afficher
leurs titres.
//livre[@id= "m1"]/following::livre/titre
2. Sélectionner tous les livres publiés avant le livre ayant l'ID c2.
//livre[@id="c2"]/preceding-sibling::livre[annee<//livre[@id="c2"]/annee]
2. Sélectionner tous les livres qui précèdent immédiatement le livre ayant l'ID c2 au
même niveau hiérarchique.
//livre[@id="c2"]/preceding-sibling::livre[1]
2. Sélectionner tous les éléments livre qui ont le même domaine du livre ayant l'ID c1.
3. //livre[attribute::domaine=//livre[@id="c1"]/@domaine]
4. //livre[@id="c2"]/preceding-sibling::livre[@domaine=//livre[@id="c2"]/@domaine]
5. Sélectionner le premier livre du domaine "informatique".
//child::livre[@domaine="informatique"][1]
//child::livre[attribute::domaine="informatique"][1]
Exercice 2:
Soit le document XML suivant :
▪ Écrivez les requêtes XPath permettant de
répondre aux questions suivantes :
1. Quel est le nom du client dont l’attribut id
est ”K105” ?
2. Combien y a-t-il de commandes dans le
fichier ?
3. Combien d’articles différents ont été
commandés dans la deuxième commande ?
4. Combien y a-t-il de commandes pour la
référence client ” K105” ?
5. Combien y a-t-il de commandes avec plus de
trois articles ?
6. Combien y a-t-il de commandes pour le
client ”DURAND” ?
Exercice 2: (solution)
1. Quel est le nom du client dont l’attribut id est ”K105”?
//client[@id=" K105"]/nom
2. Combien y a-t-il de commandes dans le fichier ?
count(//commande)
3. Combien d’articles différents ont été commandés dans
la deuxième commande ?
count(//commande[2]/article)
4. Combien y a-t-il de commandes pour la référence client
” K105”?
count(//commande[@refclient=" K105"])
5. Combien y a-t-il de commandes avec plus de trois
articles?
count(//commande/article[4]) ou
count(//commande[count(./article)>3])
6. Combien y a-t-il de commandes pour le client
”DURAND”?
count(//commande[@refclient=//client[nom="DURAN
D"]/@id])
Exercice 4:
Soit le document XML suivant :
Compléter le tableau suivant :
Exercice 4:(solution)
Compléter le tableau suivant :
2..18, 3..7, 8..12, 13..17
3..7, 8..12, 13..17
4, 5, 6, 9, 10, 11, 14, 15, 16
2..18, 3..7, 8..12, 13..17
Id=1 id=2 id=3
8..12, 9, 10, 11, 13..17, 14, 15, 16
8..12, 13..17
3..7, 8..12
3..7, 8..12, 13..17
Id=1 discipline=«web» experience=«3year» id=2 discipline=«DBA»
experience=«2year» id=3 discipline=«appdev»
3..7, 8..12
Exercice 5:
Soit le document XML suivant :
Écrivez les requêtes XPath permettant de répondre aux
questions suivantes :
Quelle est la latitude de la ville ”Nantes” ?
Combien y a-t-il de noms de lieux dans le fichier ?
Combien y a-t-il d’amis qui ont un surnom ?
Quelle est la ville pour l’ami dont le surnom est ”Henri” ?
Quelle est la longitude de la ville pour l’ami surnommé
”Christ” ?
Quelles sont les villes dont la latitude est supérieure à 47 ?
Exercice 5: (solution)
Quelle est la latitude de la ville ”Nantes” ?
/amisEtLieux/lieux/lieu[@nom="Nantes"]/@latitude
Combien y a-t-il de noms de lieux dans le fichier ?
count(//lieu/@nom) ou count(//lieu[@nom])
Combien y a-t-il d’amis qui ont un surnom ?
count(//ami/@surnom) ou count(//ami[@surnom])
Quelle est la ville pour l’ami dont le surnom est ”Henri” ?
//ami[@surnom ="Henri"]/@ville
Quelle est la longitude de la ville pour l’ami surnommé
”Christ” ?
//lieu[@nom=//ami[@surnom ="Christ"/@ville]/@longitude
Quelles sont les villes dont la latitude est supérieure à 47 ?
//lieu[@latitude>47]/@nom