Représentation et manipulation de données structurées

BE2 - Transformations XSLT

Florian CLERC - Gauthier CORNU

Note : Une version en ligne de notre travail est disponible en suivant ce lien. Le compte-rendu qui y est présent n'a rien de plus que cette version, si ce n'est que le lien associé au logo de validation du W3C est cette fois corretement renseigné, et permet d'avoir confirmation, directement sur le site du W3C, que le présent document est valide.

Introduction

Nous avions réalisé, lors du précédent BE, une première application XML afin de découvrir ses principaux mécanismes, et saisir sa facilité d'utilisation dans le domaine de la représentation des données. Cependant, lorsqu'il s'est agi de manipuler ces données en créant une feuille de style pour les présenter de manière agréable, nous avons très rapidement senti la nécessité d'un nouvel outil fin de remplir cette tâche. En effet, en utilisant simplement des feuilles de style de type CSS, nous étions vite limités par la structure immuable du document créé (une application XML permettant de gérer une bibliothèque doit répondre à certaines contraintes métier et de logique qui ne doivent en aucun cas être altérées sous prétexte d'en afficher le contenu...donc impossible d'utiliser certaines méthodes bie appréciées des designers html comme les div englobantes,...).
Ainsi, ce BE va employer une méthode tout à fait différente à travers des "feuilles de style" qui vont cette fois appliquer des transformations au document XML. On utilisera pour cela XSLT, une application XML. Un traitement préalable est donc apppliqué au document XML pour le transformer en un autre document XML bien formé, qui lui sera plus pratique à gérer pour l'affichage des données : il contiendra exactement les informations que l'on souhaite afficher (même les attributs), dans l'ordre que l'on souhaite, et avec une structure maîtrisée pour le design. La structure générée dans ce BE correspondra à chaque fois à un document au format XHTML1.0.
Plus concrètement, l'application XML que nous allons utiliser ici représente l'organisation des modules d'option d'une école, contenant des professeurs et des élèves (tous considérés de la même manière comme étant des "personne"), ainsi qu'un certain nombre de cours. Chaque cours a un professeur attitré et des élèves inscrits, dont on connaît les principales informations relatives à ce cours. A chaque fois, nous afficherons du mieux possible les données qui concernent cet environnement.

I. Première feuille de style : affichage de la liste des personnes

On débute avec une application simple qui ne va exploiter qu'une partie des données présentes dans notre application : celles qui concernent les personnes présentes dans l'application. Pour chacune d'entre elles, on dispose de leurs nom, prénom, adresse email, numéro de téléphone, adresse et ville. Chaque individu a également des attributes précisant sa civilité et son ID, mais nous ne les utilisons pas ici. Dès cette première application nous allons pouvoir réaliser une mise en forme qui aurait été (quasi-)impossible avec du CSS pur : disposer les informations sous forme d'un tableau.
Voici une description de la feuille de style XSLT, consultable en suivant ce lien, que nous avons réalisée afin d'arriver au résultat final :

La feuille de style CSS associée est très simple et se contente d'effectuer des traitements de base notamment pour afficher les bordures du tableau Le résutat final est visible en suivant ce lien. Le document qui est créé bien formé. Nous avons en effet pu le vérifier de deux manières :

A noter que le document obtenu ne se contente pas d'être bien formé, il est également valide : il suit les standards du XHTML1.0

II. Transformations avancées : Résultats des élèves en cours

Nous allons maintenant réaliser deux feuilles de style XSLT un peu plus complexes, où nous allons utiliser les liens qui existent entre un cours et les personnes qui y participent, élèves et professeurs. Dans le document XML, cela se traduit par l'existence d'un ID pour chacune des personnes, et des références sont faites depuis les cours vers ces IDs.

II.1. Fiches de note des élèves

Le but est ici d'obtenir un document final qui permettra de visualiser, élève par élève, les cours auquel il participe ainsi que ses appréciations, notes et son nombre d'absences. Voici la manière dont nous avons procédé pour obtenir la feuille de style XSLT présente ici :

On peut observer le résultat final de cette transformation à cette adresse. Cette fois encore le document généré est bien formé (on le vérifie de deux manières différentes), et valide XHTML1.0

II.2. Récapitulatifs de cours

On va maintenant créer une fiche pour chaque cours, qui nous permettre d'afficher les informations relatives à ce cours : son intitulé, le professeur responsable ainsi que les élèves y participant et leurs informations vis-à-vis de ce cours. Voici la feuille XSLT réalisée, et quelques détails concernant sa réalisation :

Le résultat de cette troisième feuille de style peut être visualisé ici. Ce document est à la fois bien formé et valide XHTML1.0

III. Génération d'un document SVG : représentation graphique des résultats

Dans cette partie, nous allons utiliser une feuille de style XSLT pour transformer notre document XML en un document SVG. Concrètement, nous allons créer une représentation graphique des résultats des différents élèves dans les deux cours. Nous allons donc dessiner les différents éléments de chaque histogramme, avec cette feuille dont nous détaillons le fonctionnement :

Finalement, on a pu dessiner facilement un histogramme en SVG grâce à une feuille de transformation XSLT, le résultat peut être visualisé ici. Pourtant, cet histogramme n'est pas très esthétique il n'est possible de le styliser comme on pourrait le faire avec un document HTML et une feuille de style CSS. Toute modification stylistique demande donc une modification de la feuille XSLT. On pourrait imaginer construire d'autres représentations des notes des étudiants, en prenant par exemple comme origine non pas un cours mais un étudiant et étudier ses résultats dans les cours qu'il suit.

Conclusion

Après avoir réalisé différentes feuilles de style permettant de manipuler un document XML en vue de son affichage, il apparaît au final qu'aucune comparaison n'est possible entre l'utilisation de feuilles CSS seules et l'utilisations de documents XSLT pour la mise en forme de documents XML. Par exemple, l'utilisation d'éléments HTML de base tels que les tableaux nous a grandement facilité la tâche pour afficher certaines séries de données. Le développeur dispose d'une liberté totale pour générer la structure du document qu'il veut afficher, et il est ensuite beaucoup plus facile d'appliquer des propriétés CSS pour arriver à un résultat voulu. Par ailleurs, l'aspect générique du langage XML nous a également permet de réutiliser plusieurs "briques" de nos feuilles de transformation tout au long de ce BE.
Dans le cas de ce BE nous avons dupliqué pour des raisons pratiques le fichier source contenant les données pour lui associer à chaque fois une nouvelle feuille de style. Cette méthode serait bien entendu à proscrire dans le cas de fichiers plus importants en taille, et il faudrait alors utiliser l'appel à des entités externes (même si ces appels peuvent parfois poser problème avec certains navigateurs...).

Valid XHTML 1.0 Strict