TP noté n°2 — Rattrapage
XML — Licence Pro BDISE — ?? ??????? 2017 — Durée: 2h
Préambule
- Les deux parties sont indépendantes. L'ordre présenté est l'ordre logique des transformations mais il est tout a fait possible de commencer par la seconde partie.
- Commencer par créer un dossier
TPsolo2votreLogin
dans lequel vous effectuerez tout le TP. - Pour chaque question, nommer le fichier concerné avec le nom de la question et l'extension adaptée:
Partie1.xq
etPartie2.xsl
. - À l'issue du TP, supprimer les fichiers générés (par exemple la sortie HTML de l'application d'une feuille XSLT sur un document XML) ainsi que les fichiers fournis dans l'énoncé.
Surtout faites bien attention de ne pas supprimer un fichier que vous avez écrit! (Bien les nommer permet d'éviter cela facilement...) - À l'issue du TP, envoyer les fichiers de chaque question (et uniquement ceux-ci, c'est à dire pas de fichiers généré) à mathieuDOTsassolasATu-pecDOTfr
- Les seuls documents autorisés sont les notes de cours et vos productions de TD/TP. Il est également autorisé d'utiliser le site W3Schools ou la norme SVG comme aide mémoire.
- Le non respect de ces consignes pourra entraîner le retrait de points.
- Il ne faut pas copier-coller le XML affiché par le navigateur mais toujours l'enregistrer. Utiliser
wget
est aussi possible.
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.
- Construire la structure générale du fichier
Partie1.xq
. - 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.
- 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.
- Récupérer la transformation vide fournie pour ce TP; c'est de celle-ci qu'il faut partir pour cette partie.
- 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.
- 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 sondiv
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 cesdiv
dispose d'une classe et d'un identifiant adapté. Pour les département, cet identifiant prendra la formedep-<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 XSLTsubstring-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'imageosm.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 lavoie
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.
- Pour les établissements, mettre un titre à cette partie, qui sera elle même dans un
- 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 partieliste_tutelles
de notre document XML, et que l'on n'a pas besoin d'aller regarder la liste complète des établissements.