TP noté n°2 (rattrapage)

XML — Licence Pro BDISE — 30 mars 2015 — Durée: 1h45

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>/

Énoncé

Nous allons aujourd'hui travailler sur un document XML CroixRouge.xml qui contient la liste des bureaux et centres ("structures") de la Croix Rouge Française. Ce document obéit à cette DTD.

  1. On souhaiterait mettre de l'ordre dans cette liste en rangeant les structures selon leur activité (le contenu de Activite_Structure) . Le résultat de la requête devra se conformer à la DTD fournie. On fournit également le résultat obtenu. On remarque:
    • Que chaque activité n'apparaît plus qu'une seule fois, avec potentiellement plusieurs structures.
    • Les structures sont ensuites groupées par département; on peut s'aider pour cela du code postal (CP_Structure)...
    • L'adresse postale a été obtenue à partir des différents morceaux d'adresse (Adresse_Structure, Adresse_Cplt_Structure, LieuDit_Structure, CP_Structure,Ville_Structure). On peut utiliser string-join((str1,...strn),' ') pour s'affranchir des problèmes d'espaces.
    • Le code de la structure, le n°SIRET et le code postal sont devenus des attributs.
    • Le reste des informations (et en particulier les "actions") est à récupérer tel quel.
    • L'ordre des attributs n'ayant pas d'importance, il est choisi arbitrairement par le compilateur XQuery et peut varier entre le résultat attendu et le XML que vous obtiendrez.
  2. On souhaite à présent formater ces informations sur une page HTML, à l'aide d'une feuille XSLT. La transformation s'appliquera sur le fichier CroixRougeRange.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 sous le titre il y a un petit paragraphe introductif contenant quelques statistiques. Le texte à trou est déjà présent dans une template qu'il convient de compléter afin de calculer:
      • le nombre total de structures;
      • le nombre des activités;
      • le nombre de structures dont l'un des groupe d'actions est 'Urgence et Secourisme';
      • le nombre de structures dont l'un des groupe d'actions est 'Actions Sociales';
      • le nombre de structures dont l'un des groupe d'actions est 'Urgence et Secourisme' et un autre est 'Actions Sociales';
      • le nombre de structures de type 'UNITE LOCALE' ou 'IMPLANTATION LOCALE' dans le 77;
      • le nombre de structures dont l'activité est 'Service de soins infirmiers à domicile' dans le 77.
    • Que chaque activité est dans un div de classe activite.
    • Le nom de l'activité est dans un h1.
    • Bonus: on peut également remarquer que chaque activité dispose également d'un identifiant basé sur son titre. 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 cet identifiant pour faire du CSS.
    • Au sein de chaque activité, chaque structure est elle aussi dans un div, de classe structure. Le nom (Libelle_Structure) est dans un titre de niveau 2.
    • Pour chaque structure vient sous le titre le type de cette structure, puis les services proposés (titre en h3) sous la forme d'une liste à plusieurs niveaux: les services sont en effet rangés dans divers Groupe_Actions.
    • Ensuite vient les informations de contact sous la forme d'une liste de description. Remarquons que le site web est également un lien.
    • On remarque que toutes les structures ne proposent pas de services, et que dans ce cas le titre même "Services proposés" n'apparaît pas; il en est de même pour le site web.
    • Enfin, on va ajouter avec du SVG un logo devant le nom de chaque structure.
      • Cette croix est constituée de deux rectangles (rouges).
      • En bas à droite est le numéro du département dans lequel se trouve la structure.
      • Bonus: on va animer cette croix pour donner l'illusion d'une rotation autour de la branche verticale. Pour cela, il suffit d'agir sur la branche horizontale de la croix qui se rétrécit puis s'agrandit.
      • NB: Pour ne pas donner accès aux sources, ce logo n'est pas dans le résultat attendu; on peut cependant le voir ci dessous:
        Logo de la croix rouge. Logo de la croix rouge pendant l'animation.

Corrigé

  1. Question1.xq
  2. Question2.xsl