1 TP de bases de données : XPATH et XQUERY
Transcription
1 TP de bases de données : XPATH et XQUERY
TP de bases de données : XPATH et XQUERY INSTALLATION DU JDK Le JDK comprenant une machine virtuelle Java est disponible à l’adresse suivante : http://java.sun.com/javase/downloads/widget/jdk6.jsp. (clé USB) INSTALLATION DE EXIST Afin d’installer l’outil, nous utiliserons la dernière version : eXist-setup-1.4.0-rev10440.jar (clé USB) L’installation du moteur se fait par la commande : java -jar eXist-setup-1.4.0-rev10440.jar Lors de l’installation, le programme vous demande de pointer vers un JDK. Faites le alors pointer vers le répertoire d’installation du JDK utilisé à l’étape précédente. Une fois l’application installée, elle peut être démarrée grâce à la commande : bin/startup.sh Vous pouvez maintenant acceder à l’interface de configuration de eXist au moyen de l’URL http://localhost:8080/exist/admin/admin.xql Par défaut, le nom d’utilisateur est admin et le mot de passe doit rester vide. si cela ne fonctionne pas, essayer le mot de passe admin. Afin de charger les fichiers XML dans la base de donnée : 1. dans l’interface d’administration, cliquer sur le menu "Browse Collections" ; 2. pour chaque fichier XML à charger, sélectionnez le avec le bouton Parcourir puis chargez le avec le bouton Upload. Nous travaillerons sur les fichier XML Films.xml et Artistes.xml (Clé USB). Pour les requêtes, vous utiliserez l’interface d’eXist à l’adresse http://localhost:8080/exist/sandbox : Etape 1: Requêtes simples Q1 : Observez les documents xml et notez leur structure sous forme arborescente Ecrivez les requêtes qui répondent aux questions suivantes (1) en XPATH quand c’est possible, et (2) en XQUERY : Exemple : Le résumé d'Alien. : XPATH : document("Films.xml")//FILM[TITRE="Alien"]/RESUME for $f in document("Films.xml")//FILM where $f/TITRE="Alien" return $f/RESUME Q2. Tous les titres de films. Schéma XPATH : <TITRE> xxxxxx</TITRE> <TITRE> yyyyyy</TITRE> Schéma XQUERY <FILMS> <TITRE> xxxxxx</TITRE> <TITRE> yyyyyy</TITRE> </FILMS> Q3. Les titres des films d'horreur. ! Même schéma Q2 Q4. NOM et PRENOM des acteurs du film "Vertigo" ! Pas de XPATH Schéma XQUERY <ACTEURS> <ACTEUR> <NOM> xxxxxx</NOM> <PRENOM> yyyyyy</PRENOM> </ACTEUR> </ACTEURS> Q5. Combien il y a de titres de films dans le document (fonction count() ). Schéma XPATH : un nombre (48 en fait) Schéma XQUERY <NOMBRE> 48 </NOMBRE> Q6. Les titres des films avec James Stewart et Kim Novak.! Même schéma Q2 Q7. Les films qui ont un résumé. ! Même schéma Q2 Q8. Les films qui n'ont pas de résumé.! Même schéma Q2 Q9. Le rôle joué par Harvey Keitel dans le film Reservoir dogs. Schéma XPATH : <INTITULE> xxxxx </INTITULE> Schéma XQUERY <INTITULE> xxxxx </INTITULE> Q10. Les titres des films qui contiennent un 'A' (la fonction contains(chaine, ‘A’) sera utilisée ). ! Même schéma Q2 (seulement Xquery) 1 Etape 2: Requêtes avec jointures et requêtes complexes Exemple : Le metteur en scène du film Eyes Wide Shut. <ARTISTE> { for $f in document("Films.xml")//FILM, $ms in document("Artistes.xml")//ARTISTE where $f/MES/@idref=$ms/@id and $f/TITRE="Eyes Wide Shut" return ($ms/ACTNOM,$ms/ACTPNOM) } </ARTISTE> Q11. Les films où le metteur en scène participe comme acteur ! Même schéma Q2 Q12. La liste des acteurs, triée par ordre alphabétique (nom et prénom), avec la liste des films dans lesquels il a joué. Schéma XQUERY <ACTEURS> <ACTEUR> <NOM> xxxxxx</NOM> <PRENOM> yyyyyy</PRENOM> <FILMS> <TITRE> xxxxxx</TITRE> <TITRE> yyyyyy</TITRE> </FILMS> </ACTEUR> </ACTEURS> Q13. Tous les films dans lesquels a joué le même couple d'acteurs (assez compliquée...). <LISTE> <COUPLE> <ACTEUR> <NOM> xxxxxx</NOM> <PRENOM> yyyyyy</PRENOM> </ACTEUR> <ACTEUR> <NOM> xxxxxx</NOM> <PRENOM> yyyyyy</PRENOM> </ACTEUR> <FILMS> <TITRE> xxxxxx</TITRE> <TITRE> yyyyyy</TITRE> </FILMS> </COUPLE> </LISTE> Quelques conseils / trucs 1) 2) 3) 4) MES est une reference vers l’autre fichier (MES signifie Metteur en Scène….) Il faut mettre les expressions XQUERY entre {} Pour compter, utilisr count($x) ! Q5 Vous pouvez mettre des AND entre deux conditions XPATH ! Q6 L’existence et la non-existence d’éléments se teste simplement: (! Q7/Q8) Exemple: where $X/TOTO/P ! test l’existence de P en dessous du noeud TOTO Exemple: where not($X/TOTO/P) ! test la non-existence de P en dessous du noeud TOTO 5) Distinct-values permet de renvoyer les valeurs distinctes d’un ensemble mais ne fonctionne que sur les valeurs…. (essayez distinct-deep) 6) Le tri est obtenu par “Order by” 2