TD 5 - Xpath
TD 5 - Xpath
TD 5 - Xpath
MP1-GL / TD
ISIMM
Technologie XML
Série 05 – XPATH - Enoncé
***
Exercice N°1
1- Quel est le type de données de la racine dans XPath et comment est-il défini ?
2- Quels sont les types de nœuds principaux dans XPath et comment les distingue-t-on ? Donnez
un exemple de chaque type de nœud.
3- Quels sont les types de valeurs atomiques dans XPath et comment sont-ils déterminés ?
Donnez des exemples de valeurs atomiques.
4- Pouvez-vous expliquer l'opérateur '?' dans le contexte du typage XPath et fournir un exemple
d'utilisation ?
5- Expliquez la différence entre les opérateurs '*' et '+' en termes de typage XPath.
Exercice N°2
1
XML - XPATH
MP1-GL / TD
ISIMM
Exercice N°3
❖ Partie 1 (Quiz) :
❖ Partie 2 :
2
XML - XPATH
MP1-GL / TD
ISIMM
❖ Partie 3 :
Écrivez des expressions XPath pour sélectionner les éléments suivants :
1- Le titre de tous les gâteaux « cakes »
2- Les noms de tous les produits a un prix < 2000 :
3- Le prix du cake "weeding"
4- Les catégories de tous les produits
5- Tous les éléments qui sont enfants directs de <pastryshop> ?
6- Combien de croissants amandes sont disponibles ?
7- Quel est le poids du bun ?
8- Quel est le nom du premier produit de la section de pâtisseries ?
9- Quelle est la quantité totale de tous les produits de la section de pâtisseries a l’aide sum()?
3
XML - XPATH
MP1-GL / TD
ISIMM
1- Écrivez une expression XPath qui retourne la longueur de la chaîne de caractères 'Série de revision'
2- Écrivez une expression XPath qui concatène les chaînes de caractères 'You ', 'can ', 'do ', 'it'
Exercice N°4
Partie1 :
Soit le fichier XML présenté schématiquement ci-dessous :
4
XML - XPATH
MP1-GL / TD
ISIMM
Partie2 :
1) Ecrire une requête qui permet de vérifier si le stagiaire "Leila Mohamed" a une note supérieure ou
égale à 10 dans le module 100 ? Si c'est le cas, affichez "Réussi", sinon affichez "Échec".
2) Ecrire une requête qui permet de vérifier est-ce qu'au moins un employé de l'entreprise a un contrat
de type ‘ cdd ‘ ? (En utilisant la Quantification existentielle)
3) Ecrire une requête qui permet de vérifier est-ce que le nom du premier stagiaire est identique au
nom du deuxième stagiaire ou non ? (En utilisant l’Opérateur de comparaison de nœuds :is)
Partie3 :
Compléter le tableau suivant :
Opérateur Action Syntaxe Exemple
For Itération for $i in E1 return ………………………
E2
Somme Quantification ……………………… some $i in 0 to 5
existentielle satisfies $i > 4
Every ………………………. every $i in E1 every $i in 0 to 5
satisfies E2 satisfies $i > 4
To …………………….. E1 to E2 1 to 5
……………………… Comparaisons E1 = E2 $x < $y
générales
5
XML - XPATH
MP1-GL / TD
ISIMM
Technologie XML
Série 05 – XPATH - Correction
***
Exercice N°1
1- Le type de données de la racine dans XPath est le type de nœud document, défini comme
document-node().
2- Les principaux types de nœuds dans XPath sont : élément (element()), attribut (attribute()),
texte (text()), commentaire (comment()), et instruction de traitement (processing-
instruction()).
Par exemple, <book>, id="001", Deep Work, <!-- Commentaire -->, <?xml-stylesheet?>.
3- Les valeurs atomiques comprennent les types de données primitifs tels que les chaînes de
caractères, les nombres, les booléens, les dates, etc. Par exemple, "Deep Work", 44.95, true,
2016-01-05.
4- L'opérateur '?' permet de vérifier si un élément est présent dans un chemin XPath.
5- L'opérateur '*' sélectionne zéro ou plusieurs occurrences d'un élément, tandis que l'opérateur
'+' sélectionne une ou plusieurs occurrences.
Exercice N°2
1- La valeur textuelle du titre du premier livre est " Deep Work "
2- Le type de données du prix du premier livre est xsd:decimal
3- La valeur typée de la date de publication du deuxième livre est xsd:date("1997-12-16").
4- /bookStore/book[number(price) < 18]/title
6
XML - XPATH
MP1-GL / TD
ISIMM
❖ Partie 2 :
1)
2)
3)
4) <PastryShop> : racine
5) L'attribut associé au nœud <cake> est category et sa valeur dépend du type de gâteau. Par
exemple, pour le gâteau de mariage (<cake category="weeding">), la valeur est "weeding". pour
<cake category="birthday"> la valeur est "birthday".
❖ Partie 3 :
1- //cake/title
2- //*[price < 2000]/name
3- //cake[@category='weeding']/price ou /pastryshop/cakesection/cake[@category='weeding']/price
7
XML - XPATH
MP1-GL / TD
ISIMM
4- //*/@category
5- /pastryshop/*
6- /pastryshop/pastriesSection/croissants[@category='amandes']/quantity
7- /pastryshop/pastriesSection/Bun/weight
8- /pastryshop/pastriesSection/*[1]/name
9- sum(/pastryshop/pastriesSection/*/quantity)
❖ Partie 4
1- string-length('Série de revision')
2- concat('You ', 'can ', 'do ', 'it')
Ou bien :
//entreprise/stagiaires/stagiaire[1]
8
XML - XPATH
MP1-GL / TD
ISIMM
Ou bien //entreprise/stagiaires/stagiaire[last()]
3) //stagiaire[note>10]
Ou bien //stagiaires/stagiaire[note>10]
4) //stagiaire[note<10]/nom
ou bien //stagiaires/stagiaire[note<10]/nom
9
XML - XPATH
MP1-GL / TD
ISIMM
5) //stagiaire[@*]
ou bien //stagiaires/stagiaire[@*]
10
XML - XPATH
MP1-GL / TD
ISIMM
6) //*
7) //employes/employe[@numi]
ou bien//employe[@numi]
11
XML - XPATH
MP1-GL / TD
ISIMM
8) //employes/employe[typecontrat="cdd"]
ou bien //employe[typecontrat="cdd"]
12
XML - XPATH
MP1-GL / TD
ISIMM
Parite2 :
1) if (/entreprise/stagiaires/stagiaire[nom='mohamed' and prenom='leila']/note[@module='100'] >= 10)
then 'Réussi' else 'Échec'
3) //employes/employe[1]/nom is //employes/employe[2]/nom
🡺 donne false car il s'agit de deux nœuds différents bien que les deux attributs aient même nom
Partie3 :
Opérateur Action Syntaxe Exemple
For Itération for $i in E1 return for $i in 1 to 5
E2 return $i * $i
Somme Quantification some $i in E1 some $i in 0 to 5 satisfies
existentielle satisfies E2 $i > 4
Every Quantification universelle every $i in E1 every $i in 0 to 5 satisfies
satisfies E2 $i > 4
To Intervalle E1 to E2 1 to 5
= != < Comparaisons générales E1 = E2 $x < $y
13