XPath
Préparation :
- en TME : commande xpath (cela lance XPath Explorer) ou moteur Xpath en ligne avec
ActiveSoftware
- chez soi, installer Cooktop ( voir XpathAvecCookTop),
XPath Explorer (libre) ou
Editix
Utilisation de Xpath Explorer en TME
- Copier, dans votre répertoire de travail, les deux fichiers base1.xml et base1.dtd venant du TmeDtd.
Si nécessaire, faire un ssh -X sur votre propre machine. Cela permet ensuite de saisir les caractères [ et @ dans l'outil xpath
- ssh -X `uname -n`
- autre possibilité: ssh -X ari-31-SSS-MM avec SSS étant le numéro de la salle et MM le numéro de la machine)
Aller dans le répertoire de travail contenant les fichiers xml et dtd
- exple, cd MABD/tme/xpath
- Lancer xpath &
Dans Xpath Explorer:
- File Open : ouvrir le fichier base1.xml
- Dans le champ XPath, saisir une expression xpath
- A chaque question, toujours re-appuyer sur les deux boutons Load puis Evaluate pour évaluer votre expression xpath
- Vérifier que l'expression que vous venez de saisir s'affiche bien dans le champ Expanded sous une forme étendue. Si elle ne s'affiche pas, cela signifie que votre saisie est erronnée.
- L'onglet Matching Nodes contient le résultat de l'évaluation de votre expression xpath
Pour faciliter la remise de vos requêtes en fin de TME, saisir vos requêtes dans le fichier requete_xpath.txt
- emac ou gedit requete_xpath.txt &
Ex1 : Restaurants et villes
On veut extraire des données du guide touristique base1.xml.
- Le fichier base1.xml se trouve dans votre répertoire de travail du précédent TME sur xschema.
Si le fichier ne s'ouvre pas correctement dans XPath Explorer, commenter ou effacer la ligne DOCTYPE
Pour chaque requête :
- Peut-on l'exprimer en une seule expression xpath ? Si oui, donner la réponse, sinon expliquer pourquoi.
- tous les menus à moins de 50 EUR
- les menus des restaurants 2 ou 3 étoiles
- le nom des villes dans le département 69
- le nom des restaurants à Lyon
- le nom des restaurants dans le département 75
- le plus beau monument des villes ayant au moins 1 restaurant 3 étoiles
- les restaurants 3 étoiles fermés le dimanche. Utiliser la fonction contains(a,'mot') qui est vraie si a contient le mot.
- les restaurants ouverts le lundi
- (a) le 2ème menu de chaque restaurant.
(b) le 10ème menu du guide touristique. - (a) le 2ème menu à moins de 150 EUR de chaque restaurant.
(b) Le 2ème menu de chaque restau ssi il vaut moins de 150 EUR. - les restaurants dans une ville sans plus beau monument
- les villes avec au moins un restaurant 3 étoiles
- les villes avec au moins deux restaurants
- les villes sans aucun restaurant 3 étoiles.
- le nom des restaurants qui ont au moins un menu dont le prix est égal au tarif du plus beau monument de la ville (du restaurant en question) ?
Remarques
- Pour la 9b, ne pas utiliser l'axe child
Pour la 15, une solution consiste à utiliser la fonction id(), à condition d'avoir déclaré dans votre DTD qu'une ville est identifiée par son nom.
- ex, l'expression id('Paris') correspond à l'élément ville dont l'attribut nom est 'Paris'
- dans base1.dtd : <!ATTLIST ville nom ID #REQUIRED>
- Précision concernant la fonction name(expr) : elle prend en paramètre une expression xpath.
- La fonction number() convertit une chaîne en valeur numérique.
- La fonction text() extrait le contenu textuel d'un élément
Exercice 2 : Films
Les données se trouvent dans le fichier Film.xml ou (
Film.txt). Les questions sur les films sont (cf. le poly de TD):
- tous les titres de films.
- Les titres des films d'horreur.
- Le résumé d'Alien.
- Titre des films avec James Stewart.
- Titre des films avec James Stewart et Kim Novak.
- Quels films ont un résumé ?
- Quels films n'ont pas de résumé ?
- Quel est l'identifiant du metteur en scène du film Vertigo?
- Quel rôle joue Harvey Keitel dans le film Reservoir dogs ?
- Quel est le dernier film du document ?
- Quel est le titre du film qui précède immédiatement le film Shining (dans l'ordre du document).
- Qui a mis en scène le film Eyes Wide Shut ?
- Donnez les titres des films qui contiennent un 'V' (utiliser la fonction contains)
- Donner les noeuds qui ont exactement trois descendants (utiliser la fonction count).
- Donner les noeuds dont le nom contient la chaîne 'TU' (fonction name)