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’afcher 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>