Académique Documents
Professionnel Documents
Culture Documents
Feuille de TD n2
XPath et XQuery
EXERCICE 1 : Requtes sur un document XML avec XPath
Le fichier films.xml vous est fourni. Ce document contient un ensemble d'informations
concernant des films. Appliquez ce document les expressions XPath pour rpondre aux
requtes suivantes :
a) La liste des titres de films.
/films/film/titre
c) Le rsum d'Alien.
/films/film[titre='Alien']/resume
k) Quel est le titre du film qui prcde immdiatement Shining (dans l'ordre du document).
/
films/film[titre='Shining']/preceding::film[position()=last()]/tit
re
m) Donnez les titres des films qui contiennent un V (utiliser la fonction contains).
/films/film[contains(lower-case(titre),'v')]/titre
n) Donner les nuds qui ont exactement trois descendants (utiliser la fonction count).
//films/*[count(descendant::*)=3]
$i in /films/film
return $i/titre
for
$i in /films/film/titre
return $i
b) for
$i in /films/film
where $i/@annee = '1990'
return $i/titre
c) for
$i in /films/film
where $i/titre = 'Alien'
return $i/resume
d) for
$i in /films/film
where $i/roles/role/prenom='Bruce' and
$i/roles/role/nom='Willis'
return $i/titre
e) for
$i in /films/film
where count($i/resume) != 0
return $i
f) for
$i in /films/film
where count($i/resume) = 0
return $i
g) for
$i in /films/film
where (year-from-dateTime(current-dateTime())-$i/@annee)>30
return $i/titre
h) for
$i in /films/film
where $i/titre='Reservoir dogs'
return (for
$j in $i/roles/role
where $j/prenom='Harvey' and $j/nom='Keitel'
return $j)
for
where
$i in /films/film/roles/role
$i/ancestor::film/titre='Reservoir dogs' and
i) for
$i in /films/artiste
$j := (for
$j in /films/film
where $j/titre='Reservoir dogs'
return $j/mes)
where $i/@id = $j/@idref
return fn:concat($i/actpnom, ' ', $i/actnom)
let
j) for
$i in /films/film
where $i/position() = /films/film/last()
return $i
k) for
$i in /films/film
where $i/following::film[position()=1]/titre='Shining'
return $i/titre
l) for
$i in /films/artiste
$j := (for
$j in /films/film
where $j/titre='Vertigo'
return $j/mes)
where $i/@id = $j/@idref
return fn:concat($i/actpnom, ' ', $i/actnom)
let
m) for
$i in /films/film
where fn:contains(fn:lower-case($i/titre),'v')
return $i/titre
n) for $i in //*
where count($i/descendant::*)=3
return $i
o) for $i in //*
where contains($i/name(),'tu')
return $i
q) Retourner les metteurs en scne avec le nombre de films quils ont ralis, comme suit :
<MES>
<NOM>Alfred Hitchcock</NOM>
<NUM_FILMS>4</NUM_FILMS>
</MES>
for $x in doc("films")//artiste
let $films:=count(//film/mes[@idref=$x/@id])
where $x/@id=//film/mes/@idref
return element MES{element NOM{concat($x/actnom,' ',
$x/actpnom)},element NUM_FILMS{$films}}