Feuille XML

Transcription

Feuille XML
Feuille exercices XML
Mars 2007
Exercice 1
Document
-
Instruction
Java
ins1
Element
B
Attr
att1
a1
Comment
CommFin
Element
A
Element
B
Element
D
Element
D
Text
Texte1
Text
Texte2
Attr
att1
a2
Element
D
Element
C
Attr
att2
a3
Attr
att3
15
Text
Texte3
following::node()
/A/B/D
/descendant::node()/@att2
/A/*
/A/B//text()
/comment()
/A/B/descendant::text()[1]
Exercice 2
Écrire les requêtes suivantes en XPath.
Requête1: tous les titres de lms.
Requête 2: cherchez le genre du lm Alien.
Requête 3: cherchez les titres de tous les lms d'horreur.
Requête 4: cherchez les titres de tous les lms du même genre que le lm
Vertigo.
Requête 5: titre des lms dramatiques (GENRE='Drame') de Hitchcock
Requête 6: lms sans acteurs ?
Requête 7: quel est le dernier lm du document ?
Requête 8: quel est le lm qui précède immédiatement le lm Shining
(dans l'ordre du document).
Requête 9: donnez les titres des lms qui contiennent un 'V' (utilisez la
fonction contains(str1, str2) qui retourne 'true' si str1 contient la chaîne
str2)
Requête 10: donner les lms avec trois rôles (utiliser la fonction count).
Exercice 3 (os uniquement)
Pour les cas suivants, dites quel(s) est(sont) le(s) nœud(s) adressé(s) par
l’expression XPath (le nœud grisé représente le nœud contexte):
child::D
@att1
parent::A
descendant::node()
ancestor::node()
preceding-sibling::node()
Écrire les requêtes suivantes en XQuery.
Requête 1: construire une liste de restaurants par Ville
Requête 2: adresses des hotels dans des villes ayant des restaurants trois
étoiles
Requête 3: combien de restaurants y-a-t-il en collection ?
Requête 4: lister le nom de chaque restaurant avec le prix moyens des
menus proposés
Requête 5: lister les bons restaurants de Paris
Requête 6: lister les bons restaurants de Paris par ordre alphabétique
Exercice 4
Écrire la feuille de style XSLT qui permet d’afcher le résultat suivant à
partir du chier XML lms.xml.
Exercice 1
Nœud D sous le nœud contexte
Attribut att1 a2
Élement A au dessus du nœud contexte
Élement D sous le nœud contexte et ls text Texte3
Élement A au dessus du nœud contexte et nœud racine
Élement B à gauche du nœud contexte
Document
-
Instruction
Java
ins1
Comment
CommFin
Element
A
Element
B
Element
C
Element
B
Document
-
Attr
att1
a1
Instruction
Java
ins1
Attr
att1
a1
Element
D
Text
Texte1
Nœud contexte
Element
D
Attr
att1
a2
Text
Texte1
Text
Texte2
Element
D
Element
C
Attr
att1
a2
Element
D
Attr
att2
a3
Attr
att3
15
Attr
att2
a3
Attr
att3
15
Text
Texte3
Document
-
Instruction
Java
ins1
Text
Texte3
Text
Texte2
Element
D
Comment
CommFin
Element
A
Element
B
Element
D
Comment
CommFin
Element
A
Element
B
Element
B
Element
C
Document
-
Attr
att1
a1
Instruction
Java
ins1
Attr
att1
a1
Element
B
Element
D
Element
D
Text
Texte1
Text
Texte2
Attr
att1
a2
Element
D
Text
Texte1
Text
Texte2
Attr
att1
a2
Element
D
Comment
CommFin
Element
A
Element
B
Element
D
Element
D
Text
Texte3
Element
C
Attr
att2
a3
Attr
att3
15
Text
Texte3
Attr
att2
a3
Attr
att3
15
Document
-
Instruction
Java
ins1
Comment
CommFin
Element
A
Element
B
Attr
att1
a1
Document
-
Element
B
Element
D
Element
D
Text
Texte1
Text
Texte2
Attr
att1
a2
Element
D
Instruction
Java
ins1
Element
C
Attr
att2
a3
Attr
att3
15
Element
B
Attr
att1
a1
Text
Texte3
Comment
CommFin
Element
A
Element
B
Element
D
Element
D
Text
Texte1
Text
Texte2
Attr
att1
a2
Element
D
Element
C
Attr
att2
a3
Attr
att3
15
Text
Texte3
Document
-
Exercice 2
Instruction
Java
ins1
Element
B
Attr
att1
a1
Comment
CommFin
Element
A
Element
B
Element
D
Element
D
Text
Texte1
Text
Texte2
Attr
att1
a2
Element
D
Text
Texte3
Element
C
Attr
att2
a3
Attr
att3
15
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
//FILM/@titre
//FILM[@titre='Alien']/GENRE
//FILM[GENRE='Horreur']/@titre
//FILM[GENRE=//FILM[@titre='Vertigo']/GENRE]/@titre
//FILM[GENRE='Drame' and MES='Hitchcock']/@titre
//FILM[not(.//ROLE]
//FILM[last()]
//FILM[@titre='Shining']/preceding::FILM[1]
//FILM[contains(@titre, 'V')]
//FILM[count(.//ROLE)=3]
Exercice 3
1. for $c in
distinct(collection(“Restaurants”)/Restaurant//Ville)
return
<Ville>{$c}</Ville>
<Restaurants>
{for $r in collection(“Restaurants”)/Restaurant
where $r//Ville = $c
return {$r}}
<Restaurants>
2. for $h in collection(“Hotels”)/Hotel
where $h/Adresse/Ville in
for $r in collection(“Restaurants”)/Restaurant
where $r/@categorie = "***"
return {$r/Adresse/Ville/text()}
return {$h/Adresse}
3. let $R := collection(“Restaurants”)/Restaurant
return
<NombreRestaurant > {count ($R)}
</NombreRestaurant>
where (contains($r/Comments, "Excellent”)
or contains($r/Comments, "Good”))
and $r/Adresse/Ville = “Paris”
return {$r/Nom}
orderby ($r/Nom descending)
Exercice 4
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1"/>
5. for $r in collection(“Restaurants”)//Restaurant
where contains ($r/Comments, “Bon”)
or contains ($r/Comments, “Excellent”)
and $r/Adresse/Ville = “Paris”
return {$r/Nom}
<xsl:template match="/">
<html>
<body>
<h1>Liste des Films</h1>
<table border='1'>
<tr>
<th>Titre</th>
<th>Genre</th>
<th>Pays</th>
<th>Metteur en Scène</th>
<th>Roles</th>
</tr>
<xsl:apply-templates select="FILMS/FILM">
<xsl:sort select="TITRE"/>
</xsl:apply-templates>
</table>
</body>
</html>
</xsl:template>
6. for $r in
unordered(collection(“Restaurants”)//Restaurant)
<xsl:template match="FILM">
<tr>
4. for $r in collection(“Restaurants”)//Restaurant
let $a := collection(“Restaurants”)//
[Restaurant = $r]//Menu/@Prix
return
<resultat>
{$r/Nom}
<avgPrix>{AVG($a)}</avgPrix>
</resultat>
<xsl:if test="position() mod 2">
<xsl:attribute name="bgcolor">lightgrey</xsl:attribute>
</xsl:if>
<td>
<a name="lm_{@titre}"><xsl:value-of select="@titre"/></a>
</td>
<td>
<xsl:value-of select="GENRE"/>
</td>
<td>
<xsl:value-of select="PAYS"/>
</td>
<td>
<xsl:value-of select="MES"/>
</td>
<td>
<table border='0'>
<xsl:apply-templates select="ROLES/ROLE"/>
</table>
</td>
</tr>
</xsl:template>
<xsl:template match="ROLE">
<tr>
<td>
<a href="Artistes.xml#artiste_{@acteur}">
<xsl:value-of select="."/>
</a>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>