TP XQuery

Environnement de travail

Le TP se déroulera dans un petit atelier XQuery. Pour le lancer, cliquer sur le lien suivant: Interface XSLT/XQuery. Le cas échéant lancer le fichier la commande

java -jar atelier-xquery.jar

Cet atelier contient un ensemble de documents xml qui peuvent être chargés en double-cliquant dans le petit cadre de gauche.

Le cours sur XQuery n'ayant pas eu lieu dans son intégralité, il est demandé de commencer par lire ce petit résumé.

Voici quelques liens complémentaires sur XPath et XQuery:

Questions

Avant de répondre, consulter la DTD pour la réponse attendue, donnée après la liste de questions.

  1. Donner la liste des titres de tomes dont le numéro est inférieur ou égal à 3 (Document: Collection).
  2. Donner la liste des titres des tomes de la série “Lanfeust de Troy” (Document: Collection).
  3. Donner la liste des titres de livres (Document: Ventes livres). Attention à la balise title qui devient titre.
  4. Donner la liste des personnages (SPEAKER) de la pièce Hamlet (Document Hamlet). Attention à la DTD. On utilisera la fonction distinct-values(expr) pour éviter les doublons.
  5. Donner la liste des personnages de la pièce Hamlet qui parlent dans l'acte I (ACT I) (Document Hamlet).
  6. Donner, pour chaque personnage, le nombre de lignes dites par ce personnage dans la pièce (Document Hamlet).
  7. Donner la liste des personnages dont la description via les éléments PERSONA est différente de la dénomination via SPEAKER (Document Hamlet).
  8. Ecrire une fonction prenant un film du document et renvoyant sa représentation via un élément film conforme à la 3eme DTD ci-dessous. Utiliser cette fonction pour transformer le premier film du document Films.
  9. Utiliser la fonction précédente pour afficher une liste de films dans un élément films. Cette liste contiendra tous les films dont un des réalisateur a joué comme acteur (Document Films).
  10. Faire une présentation HTML du document Films. On triera les films par année, puis par titre. Le code suivant donne le résultat attendu si on se restreint aux films Wall-E et Gran Torino:
    <?xml version="1.0" encoding="UTF-8"?>
    <html>
       <head>
          <title>Des films</title>
       </head>
       <body>
          <h1>Gran Torino (2008)</h1>
          <h2>Realisateur(s)</h2>
          <ul>
             <li>Clint Eastwood</li>
          </ul>
          <h2>Acteur(s)/Actrice(s)</h2>
          <ul>
             <li>Clint Eastwood</li>
             <li>Bee Vang</li>
             <li>Christopher Carley</li>
          </ul>
          <h1>Wall-E (2008)</h1>
          <h2>Realisateur(s)</h2>
          <ul>
             <li>Andrew Stanton</li>
          </ul>
          <h2>Scenariste(s)</h2>
          <ul>
             <li>Andrew Stanton</li>
          </ul>
       </body>
    </html>

DTDs

Questions 1, 2, 3:

<!ELEMENT titres (titre*)>
<!ELEMENT titre (#PCDATA)>

Questions 4, 5, 6, 7:

<!ELEMENT personnages (personnage*)>
<!ELEMENT personnage (#PCDATA)>
<!ATTLIST personnage nb_lignes CDATA #IMPLIED>

Questions 8, 9:

<!ELEMENT film (titre,annee?,realisateur*,scenariste*,acteur*)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT annee (#PCDATA)>
<!ELEMENT realisateur (#PCDATA)>
<!ELEMENT scenariste (#PCDATA)>
<!ELEMENT acteur (#PCDATA)>
<!ELEMENT films (film*)>