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