TP noté n°2
XML — Licence Pro BDISE — 10 février 2015 — Durée: 2h
Préambule
- Le sujet comporte plusieurs questions indépendantes, auquel on peut répondre dans un ordre quelconque.
- Les question Bonus sont a priori plus difficiles ou du moins assez longues; le nombre de points attribué à ces question étant relativement faible, il vaut mieux éviter de perdre du temps dessus à moins d'avoir fini le reste du sujet.
- Commencer par créer un dossier
TPsolo1votreLogin
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:
Question1.xq
,Question2.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...) - Faire une archive (
.tar.gz
) à votre nom à partir du dossier contenant vos réponses et la soumettre via Eprel. En cas d'oubli de votre identifiant EPREL, voici la liste (mot de passe par défaut: date de naissancejjmmaaa
). - 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 -o <fichierProduit>.xml <requeteXQuery>.xq
Création d'une archive .tar.gz
tar -cvzf <archive>.tar.gz <dossier>/
Énoncé
Nous allons aujourd'hui travailler sur un document XML Ministres.xml
qui contient la liste des ministres depuis la Libération. Ce document obéit à cette DTD
- On remarque tout d'abord que ce fichier est un peu désordonné. En effet, les mêmes personnes apparaissent plusieurs fois, et dans un ordre arbitraire. On souhaiterait mettre de l'ordre dans tout ça à l'aide d'une requête Xquery. Le résultat de la requête devra se conformer à la DTD fournie. On fournit également le résultat obtenu. On remarque:
- Que chaque personne (
ministre
) n'apparaît plus qu'une seule fois, avec potentiellement plusieursmandat
s. - Les personnes sont classées par ordre alphabétiques et leurs mandats sont classés par ordre chronologique (il est suffisant de se baser sur la date de
debut
duposte
, qui est au format iso donc très pratique). - Dans chaque mandat il y a la fonction dont le contenut provient du
poste
, puis les informations concernant legouvernement
, lepresident
et leregime
qui sont à récupérer telles quelles.
- Que chaque personne (
- On souhaite à présent formater ces informations sur une page HTML, à l'aide d'une feuille XSLT. La transformation s'appliquera sur le fichier
MinistresRanges.xml
fourni. On fournit également une feuille XSLT qui contient déjà quelques templates utiles. Le résultat que l'on shouhaite obtenir est ici. On remarque:- Que chaque personne est dans un
div
de classeministre
. - Le nom du ministre est dans un
h2
. - Chaque mandat dispose d'un
div
(de classemandat
) et la fonction est placée dans un titre de niveau 3 (h3
). - Pour chaque mandat viennent ensuite quelques informations formatées correctement: date du début et de fin, gouvernement, et président.
- Bonus: on peut également remarquer que chaque mandat dispose également d'une classe correspondant au président et une autre correspondant au régime. Il ne faut ici pas simplement récupérer les valeurs mais également retirer les caractères spéciaux (accents, cédilles, apostrophes, espaces...) qui seraient ennuyeux si on voulait par exemple se servir de ces classes pour faire du CSS.
- On peut remarquer qu'à la toute fin du document produit se trouvent quelques statistiques. Construire les templates permettant de les calculer.
- On précise que les Premiers ministres sont parfois désignés comme "Président du ..." (que ce soit conseil, conseil, des ministres, gouvernement, ou autre).
- On appréciera bien la différence entre les deux dernières statistiques.
- Bonus On arrondira la moyenne du nombre de mandats dix-millième; notez qu'il existe une fonction d'arrondi, mais qu'elle donne un entier...
- Enfin, on va s'occuper de la représentation graphique de la "carrière" des ministres, en utilisant du SVG. Le concept est le suivant: puisque les mandats s'étalent de 1944 à 2014, il y a 852 mois représentés chacun par une "unité" (ici le navigateur verra cette unité comme un pixel). Chaque mandat sera donc un rectangle de hauteur fixe mais de largeur et de position dépendant des dates (en mois) du début et de la fin du mandat (une template faisant la conversion existe déjà). Soyons un peu plus précis (on peut regarder le code généré pour se faire une idée):
- On commence par créer le canevas SVG que l'on prend un peu plus grand que là où seront les mandats (862 de large), et on choisit 70 de haut (ceci est assez arbitraire, mais cela donne un bon résultat).
- On ajoute un
title
à l'image, par exemple en reprenant le nom du minstre concerné. - On crée ensuite un groupe (
g
) légèrement décalé du coin pour que ce soit joli et sans qu'on doive se poser la question des coordonées par raport au canevas complet. - On crée ensuite un rectangle pour chaque mandat; bien que ce soit un rectangle, il est plus aisé vu les coordonées dont nous disposons de tracer un chemin qui aura une forme rectangulaire (une hauteur de 30 semble bien). On pourra commencer par tous les remplir de rouge.
- On va maintenant s'arranger pour que chaque mandat soit d'une couleur différente de son voisin. Pour cela, on définit dans l'entête différentes "couleurs"
mandat0
,mandat1
, etc qui sont des dégradés à une seule couleur (on aurait pu faire effectivement un dégrdé mais vu la taille à l'écran ce n'est pas très lisible). Il faut maintenant faire en sorte que chaque mandat appelle une couleur différente. Par exemple, le n-ième mandat peut être rempli de la couleur n mod 7 puisqu'on dispose de 7 couleurs de 0 à 6. - On définit maintenant la "légende" dans un groupe tout au début de la page, et on la réutilise pour chaque "carrière". On peut soit le faire à la main (copier-coller depuis le le html généré) ou (Bonus) créer une template qui prend en paramètre une année et retourne l'élément
text
correspondant (ley
est constant, seul lex
est à calculer, mais il est à utiliser également dans la définition de la rotation).
- Que chaque personne est dans un