Université de Rouen Normandie
Master 2 Génie Logiciel Informatique
Module: BD NoSQL pour le Big Data
Compte rendu TP2
Bd NoSQL pour le Big Data XPath/XQuery
Rédigé par:
Nadjah KARA
Nadjah KARA
M2 GIL Gr.B
BD NoSQL/TP2
1. XQuery sur movies_alone.xml et artists_alone.xml
1.1. Le titre de chaque film avec le nom de son réalisateur
for $movie in collection('movies')/movies/movie
let $director_id := $movie/director/@id
let $director:= collection('movies')/artists/artist[@id=$director_id]
return<movie>
{
(
$movie/title,$director/last_name,$director/first_name
)
}
</movie>
1.2. Le titre de chaque film avec une liste d’acteurs et leurs rôles
for $movie in collection('movies')/movies/movie
let $actors:=$movie/actor
return<movie>
{
( data($movie/title),
<actors>{
for $a in $actors
return <actor>{(data($a/@id),', ',data($a/@role))}</actor>
}</actors>
)
}</movie>
1
Nadjah KARA
M2 GIL Gr.B
BD NoSQL/TP2
1.3. Le titre de chaque film ayant au moins 2 acteurs avec
la liste d’acteurs
<results>
{
for $films in doc('movies_alone')/movies/movie return
if(count($films/actor)>=2) then <result>
{$films/title}
{
for $actors in doc('artists_alone')/artists/artist
where subsequence($films/actor/data(@id),1,2) =
$actors/data(@id)
return <actor>
{concat(
$actors/data(first_name), ' ', $actors/data(last_name), ' as
', $films/actor[@id=$actors/data(@id)]/data(@role)
)} </actor>
}
<et-al/> </result>
} </results>
2
Nadjah KARA
M2 GIL Gr.B
BD NoSQL/TP2
1.4. Lister par ordre alphabétique les titres et les années de tous les
films réalisés par Clint Eastwood après 1990
<results>
{
for $film in doc('movies_alone')/movies/movie
let $realisateur_id:= $film/director/@id
let $realisateur := doc('artists_alone')/artists/artist[@id=$realisateur_id]
where ( data($realisateur/first_name)='Clint' and
data($realisateur/last_name)='Eastwood' and $film/year>=1990)
order by $film/title
return<result>{ ( $film/title, $film/year)
} </result>
}
</results>
3
Nadjah KARA
M2 GIL Gr.B
BD NoSQL/TP2
1.5. Lister par ordre alphabétique les titres et les années de tous les
films réalisés par Clint Eastwood avant 1990
C’est le même code que celui de la réponse précédente, sauf que pour
la condition $film/year > 1990, mais le résultat est nul car il n'existe pas de
film réalisé par Clint Eastwood avant 1990
2. XQuery sur [Link] et [Link]
2.1. Le nom et prénom des acteurs du film “Blade Runner”
<results>
{
let $film := doc('films')/FILMS/FILM[TITRE='Blade Runner']
for $rol in $film/ROLES/ROLE
return<acteur>{
( $rol/PRENOM, $rol/NOM, $rol/INTITULE)
}</acteur>
}
</results>
PS: Il faut tenir compte des majuscules et minuscules
4
Nadjah KARA
M2 GIL Gr.B
BD NoSQL/TP2
2.2. La liste des titre des films avec années de sortie en attribut
<results>
{
for $f in doc('films')/FILMS/FILM
return<film>{
$f/@annee
}
<titre>{
$f/TITRE/text()
}
</titre>
</film>
}
</results>
2.3. La liste des titre des films triés selon leurs date de sortie par ordre
décroissant et par ordre alphabétique selon le titre si la date de sortie est la
même
<results>{
for $f in doc('films')/FILMS/FILM
order by $f/@annee descending , $f/TITRE
return<film>{ $f/@annee }
<titre>{ $f/TITRE/text()}
</titre>
</film>}</results>
5
Nadjah KARA
M2 GIL Gr.B
BD NoSQL/TP2
2.4. La liste des titres des films d’action avec le nom du premier rôle et le nom
du metteur en scène
<results>{
let $film:=doc('films')/FILMS/FILM
let $artist := doc('artistes')/ARTISTES/ARTISTE
for $f in $film
where $f[GENRE="Action"]
return<film>{ $f/TITRE,
<role1>{$f/ROLES/ROLE[1]/PRENOM/text()
}</role1>,
<mes>{
for $m in $artist
where $f/MES/@idref=$m/@id
return $m/ACTNOM/text()
}</mes> }</film>
}</results>
6
Nadjah KARA
M2 GIL Gr.B
BD NoSQL/TP2
2.5. Le nombre de films sortis avant 1990 et le nombre de films sortis après
1990
<results>{
<avant_1990>{
count(doc('films')/FILMS/FILM[@annee<1990])
}</avant_1990>,
<apres_1990>{
count(doc('films')/FILMS/FILM[@annee>=1990])
}</apres_1990>
}</results>
2.6. Liste des films avec toutes les informations en excluons le résumé
<results>{
for $film in doc('films')/FILMS/FILM
return <FILM annee="{$film/@annee}">{$film/*[not(self::RESUME)]}</FILM
}</results>
7
Nadjah KARA
M2 GIL Gr.B
BD NoSQL/TP2
2.7. Liste des films avec toutes les informations en excluons le résumé et les
rôles
<results>{
for $film in doc('films')/FILMS/FILM
return <FILM annee="{$film/@annee}">{$film/*[not(self::RESUME) and
not(self::ROLES)]}</FILM>
}</results>
8
Nadjah KARA
M2 GIL Gr.B
BD NoSQL/TP2
2.8. Liste des titres des films ou ont joué ensemble Harison Ford et Rutger
Hauer
<results>{
for $film in doc('films')/FILMS/FILM
where data($film/ROLES/ROLE/PRENOM/text())='Harrison'
and data($film/ROLES/ROLE/NOM/text())='Ford'
and data($film/ROLES/ROLE/PRENOM/text())='Rutger'
and data($film/ROLES/ROLE/NOM/text())='Hauer'
return <film>{
$film/TITRE
}</film>
}</results>
2.9. Les rôles joués par John Travolta dans ses films avec
le titre et l’année
<results>{
for $film in doc('films')/FILMS/FILM
for $role in $film/ROLES/ROLE
where ($role/PRENOM = 'John' and $role/NOM = 'Travolta')
return <FILM annee="{$film/@annee}">{$film/TITRE,
$role/INTITULE}</FILM>
}</results>
2.10. Le nom du metteur en scène du film Alien
<results>{
let $film:=doc('films')/FILMS/FILM
let $realisateur_id:=$film[TITRE='Alien']/MES/@idref
let $artist := doc('artistes')/ARTISTES/ARTISTE[@id= $realisateur_id]
return<realisateur>{
<nom>{
9
Nadjah KARA
M2 GIL Gr.B
BD NoSQL/TP2
$artist/ACTNOM/text()
}</nom>,
<prenom>{
$artist/ACTPNOM/text()
}</prenom>
}</realisateur>
}</results>
2.11. La liste des metteurs en scène impliqués dans au moins 1 film
<results>{
for $mes_id in distinct-values(doc('films')/FILMS/FILM/MES/@idref)
let $mes := doc('artistes')/ARTISTES/ARTISTE[@id = $mes_id]
let $film :=doc('films')/FILMS/FILM[ROLES/ROLE/NOM=
$mes/ACTNOM][ROLES/ROLE/PRENOM = $mes/ACTPNOM]
where count($film) >= 1
return $mes
}</results>
10
Nadjah KARA
M2 GIL Gr.B
BD NoSQL/TP2
2.12. La liste acteurs par ordre alphabétique avec la liste des films dans
lesquels chaque acteur a joué
<results>{
<ACTORS>{
let $artists := doc('artistes')/ARTISTES/ARTISTE
for $artist in $artists
order by $artist/ACTNOM, $artist/ACTPNOM
return <ACTOR> {
<NOM>{$artist/ACTPNOM/text(),' ', $artist/ACTNOM/text()}</NOM>,
<FILMS>{
for $film in doc('films')/FILMS/FILM
where $film/ROLES/ROLE/PRENOM = $artist/ACTPNOM and
$film/ROLES/ROLE/NOM = $artist/ACTNOM
return <FILM>{$film/TITRE}</FILM>
}</FILMS>}</ACTOR>
}</ACTORS>
}</results>
11