TP noté n°2 — Rattrapage

XML — Licence Pro BDISE — ?? ??????? 2017 — 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 \!indent=yes -o <fichierProduit>.xml <requeteXQuery>.xq

Énoncé

Le but de ce TP est de mettre en forme des informations sur les établissements d'enseignement supérieur à partir du document XML etablissements.xml.
Cette mise en forme s'effectue en deux étapes: une extraction des données dans un XML au format adapté puis sa transformation en une page HTML contenant du SVG.

Partie 1 – Extraction des données avec XQuery

Bien qu'asssez gros (environs 64000 lignes), on peut ouvrir etablissements.xml dans un éditeur de texte et observer sa structure. On peut aussi s'aider de sa DTD qui est fournie.
Le but de cette partie est d'obtenir un document XML respectant cette nouvelle DTD, comme le résultat attendu (donné comme exemple et pour vous permettre de passer à la partie suivante indépendamment).
On remarque que les données en sortie sont dans deux parties différentes; on va donc avoir dans un seul fichier .xq plusieurs requêtes (peut être constituées de sous-requêtes) qui vont chacune s'occuper d'une partie. Ainsi, hormis la première, les questions suivantes sont indépendantes et peuvent être traitées dans un ordre quelconque.

  1. Construire la structure générale du fichier Partie1.xq.
  2. On veut pour la première partie récupérer les informations sur les établissements en les rangeant par académie puis, au sein de chaque académie, par département. Plusieurs choses sont néanmoins à remarquer:
    • Les académies et les départements sont rangées par ordre alphabétique.
    • Le nom de l'académie ou du département est un attribut de celui-ci.
    • Chaque établissement dispose d'un identifiant (en attribut) formé de la manière suivante: UAI_<valeur de l'UAI>_<ordre dans le fichier original>. Par exemple, le premier établissement dans le fichier original dont l'UAI est 0672689J a l'identifiant UAI_0672689J_1 dans le résultat attendu.
    • Toutes les information de l'établissement ne sont pas reprises, et elles ne sont pas exactement dans le même ordre. En particulier, l'académie, la région et le département ont disparu et l'adresse a été structurée; de plus les coordonnées GPS ont été rassemblées dans un seul élément.
  3. Pour la deuxième partie, on souhaite savoir pour chaque tutelle la liste des régions où elle est présente. Les tutelles sont classées par ordre alphabétique inverse tandis que les régions sont classées par ordre alphabétique.

Partie 2 – Transformation en HTML

En partant cette fois du fichier théoriquement obtenue à la fin de la première partie, on veut construire une page HTML affichant ces informations de manière lisible. On pourra regarder la source de cette page pour bien voir la structure attendue.
Encore une fois, les différentes parties des informations sont indépendantes et peuvent donc être traitées indépendamment. Il faut cependant gérer la racine auparavant.

  1. Récupérer la transformation vide fournie pour ce TP; c'est de celle-ci qu'il faut partir pour cette partie.
  2. Modifier adéquatement la première template (qui d'ailleurs pour l'instant vous fait des erreurs...) pour
    • que l'erreur actuelle disparaisse;
    • que votre nom apparaisse dans la balise meta de clef auteur;
    • que la page comporte un titre et soit englobée dans un div;
    • permettre la division en plusieurs parties séparées par une règle horizontale (balise hr);
    • appeler les templates de ces deux parties.
  3. Première partie: les établissements.
    • Pour les établissements, mettre un titre à cette partie, qui sera elle même dans un div dédié. Ensuite, chaque académie, dans son div disposera de son titre, au sein duquel seront tous les départements, encore une fois dans un div, avec un titre (notez que l'on est alors au niveau 4 des titres!).
      On veut également que chacun de ces div dispose d'une classe et d'un identifiant adapté. Pour les département, cet identifiant prendra la forme dep-<numéro du département>. On remarque que le numéro du département est toujours au début de son nom. On précise qu'il existe une fonction XSLT substring-before (voir la documentation).
    • Dans chaque département est une liste des établissements. Après son nom et éventuellement son sigle entre parenthèses (on ne veut pas de parenthèses vides!), vient une liste d'informations: un lien vers la fiche ONISEP, un adresse précédée d'un lien vers OpenStreetMap, et les autres informations.
      Le lien OpenStreetMap est structuré de la manière suivante: http://www.openstreetmap.org/#map=<zoom>/<latitude>/<longitude>.Un zoom de 16 semble adapté à nos besoins aujourd'hui. Quant à'image pour le lien, elle se code de la manière suivante (il faut avoir téléchargé l'image osm.jpeg pour que cela s'affiche effectivement): <img src="osm.jpeg" height="22px" alt="OpenStreetMap logo" title="Voir sur la carte (avec OpenStreetMap)."/>
      L'adresse elle même est un tableau sur deux lignes avec la voie sur la première ligne et le code postale et la ville sur la seconde.
      Les autres informations sont dans une liste de description. On ne veut pas d'entête pour une information qui n'est pas présente, mais attention, l'élément existe toujours dans le XML, il est en revanche parfois vide.
  4. Seconde partie: les informations sur les tutelles.
    Cette partie récupère des informations concernant les tutelles et les régions dans lesquelles ces tutelles ont des établissements.
    Compléter la template à trou (<xsl:template match="liste_tutelles">...) pour que XSLT calcule les valeurs demandées. Notez que l'on n'utilise pour cette question que la partie liste_tutelles de notre document XML, et que l'on n'a pas besoin d'aller regarder la liste complète des établissements.

Corrigé

  1. Partie1.xq
  2. Partie2.xsl