TP noté n°2

XML — Licence Pro BDISE — 14 février 2014 — Durée: 2h

Préambule

Rappels des commandes de compilation

Validité vis-à-vis d'une DTD

xmllint --dtdvalid <doctype>.dtd <arbre>.xml

XSLT

xsltproc -o <page>.html <transformation>.xsl <arbre>.xml

XQuery

saxon-xquery -o <fichierProduit>.xml >requeteXQuery>.xq

Création d'une archive .tar.gz

tar -cvzf <archive>.tar.gz <dossier>/

Feuille XSLT "vide"

Une feuille de style XSLT "vide" (de XML vers HTML) est disponible.

Énoncé

Tout au long de l'énoncé, nous allons travailler à partir du fichier RerD.xml qui contient des informations sur des gares traversées par le RER D.

  1. Pour commencer, écrire une DTD pour le fichier RerD.xml. On précise qu'il y a toujours au moins un train qui passe par chaque gare.
  2. On veut maintenant afficher le contenu du fichier en HTML via une transformation XSLT.
    • Tout d'abord, prévoir l'affichage d'un titre général avant de s'occuper du traitement de chaque gare.
    • Chaque gare sera contenue dans un div.
    • Écrire en titre (h2) le nom de la gare. En sous-titre (h3), on indiquera la zone dans laquelle elle se trouve.
    • Un deuxième sous-titre indiquera les coordonnées GPS de la gare. Ce sous-titre sera également un lien vers l'emplacement sur OpenStreeMap (OSM). Rappel de la syntaxe des URL d'OSM: http://www.openstreetmap.org/#map=16/<latitude>/<longitude> Le 16 correspond à un niveau de zoom; cette valeur est adaptée ici.
      Bonus: faire en sorte que la valeur du zoom dépende de la zone (afin de zoomer plus en zone 1 — qui est de la ville — qu'en zone 5 — qui est en campagne): prendre zoom = 19 - zone.
    • Présenter les trains qui desservent chaque gare dans une liste à puces.
    • Le HTML produit devra être valide.
    • Un exemple de résultat obtenu est fourni.
  3. On souhaite utiliser XQuery pour faire un pré-traitement sur les données de RerD.xml. On veut cependant garder la même structure, ce qui signifie entre autre que
    • le fichier produit satisfait la même DTD que le fichier original (par exemple celle de la première question);
    • on pourrait utiliser la même feuille XSLT que celle de la question précédente pour afficher du HTML.
    • Notez qu'il n'est pas besoin d'avoir répondu aux questions précédentes pour traiter cette question. Il ne s'agit que d'indications.
    Écrire les requêtes qui permettent d'obtenir...
    1. ... la même liste de gares, mais rangées du nord au sud et d'ouest en est (en cas d'égalité). NB: plus la latitude est grande, plus on est au nord. Plus la longitude est petite, plus on est à l'ouest.
    2. ... la même liste de gares sauf celles desservies par les trains SOVA.
    3. ... la liste des gares rangées par zone puis par ordre alphabétique au sein d'une même zone, tout en classant les trains desservant chaque gare par ordre alphabétique.
  4. On souhaite maintenant changer la manière dont les données sont présentées: au lieu d'avoir une liste de gare qui ont chacune une liste de trains, on veut une liste de trains qui ont chacun une liste de gares. On va pour cela utiliser XQuery.
    • On veut pour chaque code de train (et une fois seulement pour chaque code) et par ordre alphabétique, récupérer la liste des gares desservies classées du nord au sud (puis d'ouest en est en cas d'égalité).
    • La structure du document produit devra se conformer à cette DTD. Le résultat obtenu est également disponible.
  5. On veut pour finir mettre en forme le XML obtenu à la question précédente en HTML, avec une feuille XSLT.
    • Après avoir mis un titre principal, on mettra chaque train dans un div, le code du train dans le titre (h2).
    • Pour chaque train, on affiche la liste des arrêts dans un span.
    • Dans cette liste, les gares sont séparées par une flèche vers la droite:
      <xsl:text disable-output-escaping="yes"> &amp;rarr; </xsl:text>
    • On prendra soin de ne mettre cette flèche que si ce n'est pas le premier arrêt. Indice: un arrêt qui n'est pas le premier a un grand frère qui est un arrêt.
    • On mettra un point après le dernier arrêt; on fera attention aux espaces (il n'y en a pas avant le point).
    • Bonus: en cas de changement de zone, l'indiquer au sein de la flèche. Attention à l'échappement des caractères des entités HTML (cf au dessus).
      Code HTML pour mettre du texte "au sein de la flèche": &ndash;&lsaquo;texte&rsaquo;&rarr; donne –‹texte›→
    • Un exemple de résultat obtenu est fourni.

Corrigé

  1. Question1.dtd
  2. Question2.xsl
    1. Question3.1.xq
    2. Question3.2.xq
    3. Question3.3.xq
  3. Question4.xq
  4. Question5.xsl

Questionnaire d'évaluation du cours

Afin d'améliorer ce cours d'XML, accepteriez vous de répondre à un enquête anonyme?

Vous n'êtes pas obligés de la faire maintenant, le formulaire sera fermé le 24 février. Ne le faites pas pendant le temps du TP noté!