eXtensible Stylesheet Language |
|
|
XSL (eXtensible Stylesheet Language) est une recommandation du W3C depuis janvier 2000. XSL est souvent considéré comme l'équivalent des feuilles de style CSS pour le HTML. Pourtant XSL est bien plus puissant que cela.
Il ne permet pas seulement de faire de la mise en forme de données mais permet également d'intervenir au niveau de la structure logique d'un document. L'objectif de XSL est de définir un langage de présentation de document, indépendant des systèmes et des logiciels. On pourra ainsi mettre en forme grâce à XSL des données XML aussi bien sous forme Web (HTML, WML..) que sous forme imprimable (PDF, RTF, PostScript...).
XSL présente l'avantage de respecter toutes les règles du XML. On peut donc avec XSL :
- réutiliser des données
- présenter d'une multitude de manières un même jeu de données
- standardiser facilement des styles
- libèrer les auteurs de contenu des contraintes de style et de présentation
XSL comprend en fait plusieurs spécifications sous-jacentes pour la transformation et la présentation d’un document XML :
XSL est basé sur des sélections d'objets typés (xsl:apply-templates) auxquels on applique une transformation (xsl:template). La transformation par défaut effectue une copie de la source vers la cible.
La sélection d'objets typés est réalisée en utilisant le langage XPath, initialement conçu pour ce seul besoin.
Précisons également que les mises en forme de données seront réalisées grâces à XSL-FO.
Nous ne présenterons ici que la technologie principale : XSLT car c'est la principale.
Le langage XSLT permet de dériver des documents XML à partir de feuilles de style qui contiennent les règles de transformation (les template rules).
Pour cela un composant logiciel prend en entrée un fichier de données XML et lui applique des transformations pour fournir un autre document en sortie : c'est le processeur XSLT. Le document de sortie ne contient plus que des instructions de formatage.
Le processeur XSLT manipule en fait 3 arbres. Nous verrons chacun d'eux en utilisant un exemple basique.
- l'arbre correspondant au document XML source fourni en entrée
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> |
<?xml-stylesheet type="text/xsl" href="message1.xsl"?> |
|
<prenom>Guillaume</prenom> |
|
<email>gcharpen@etudiant.univ-mlv.fr</email> |
|
- l'arbre qui contient les règles de transformation.
<?xml version="1.0" encoding="ISO-8859-1"?> |
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> |
|
<td><xsl:value-of select="personne/prenom"/></td> |
|
<td><xsl:value-of select="personne/nom"/></td> |
|
<td><xsl:value-of select="personne/nom"/></td> |
|
- et l'arbre correspondant au document résultat réalisé à partir des deux arbres précédents : c'est à dire ici l'arbre HTML
|
<td>gcharpen@etudiant.univ-mlv.fr</td> |
|
on le voit donc, pour déclarer une feuille XSL dans un fichier XML on utilise la syntaxe suivante :
<?xml-stylesheet href="feuille.xsl" type="text/xsl"?>
|
On utilise les namespaces dans une feuille XSL; le préfixe xsl étant utilisé pour toutes les instructions d'XSLT. Comme on l'a vu, pour un formatage des données en HTML, le code HTML est directement intégré dans la feuille de style. Il en serait de même pour un autre format éléctronique de sortie (par exemple WML). Pour un format de sortie "papier", on utiliserait XSL-FO.
Remarque : comme pour l'affichage des fichiers XML sous forme d'arbre, il peut paraître surprenant que les données associées à une feuille XSL apparaissent correctement formatées lors de leur visualisation dans un navigateur. En effet nous n'avons pas réalisé l'étape de transformation du document et pourtant elle a manifestement été effectuée. C'est simplement car les browsers récents intégrent des processeurs XSLT en interne.
Les processeurs XSLT les plus connus sont XT de James Clark et surtout Xalan d'Apache.
Transformation XML vers HTML |
On peut synthétiser la phase de transformation d'un document XML avec une feuille XSL par le schéma suivant :

L'utilisation des techonologies XML/XSL permet donc une séparation de la partie données et de la partie présentation; cela apporte une meilleure structuration du développement et permet d’optimiser les échanges réseaux, entre le poste client et le serveur.
En effet la feuille de style XSL (qui représente un fichier d ’environ 10 Ko) est un fichier statique qui pourra être chargée par le navigateur au premier appel de la page puis conservé dans son cache. Ainsi, seules les données seront recalculées et transmises au client à chaque appel.
De plus la maintenance et l'évolutivité de fichiers XML/XSL est beaucoup plus grande. On a d'un côté les données dans un fichier XML grande et de l'autre les règles de présentation dans un fichier XSL; le changement de présentation est donc aisé.
Enfin on peut facilement réutiliser des fichiers de données ou de présentation pour obtenir des rendus bien différents en fonction des besoins.
On peut également imaginer une récupération des données dans une base pour ensuite les intégrer dans des fichiers XML (ou de directement utiliser des outils spécifiques comme XSP ou XSQL), et ensuite rendre disponible ces données sous différents formats en leur appliquant différentes feuilles de styles.
Cela est synthétisé sur le schéma suivant :

Elaborons un fichier XML référençant les matières enseignées en IR3 -I2000 UMLV avec leur professeur respectifs et les coeficients.
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> |
|
<intitule>Génie Logiciel</intitule> |
|
<nom>REVUZ</nom>intitule> |
|
<prenom>Dominique</prenom> |
|
<email>dr@univ-mlv.fr</email> |
|
<intitule>Traitement du signal</intitule> |
|
<nom>LOUBATON</nom>intitule> |
|
<prenom>Philippe</prenom> |
|
<email>Philippe.Loubaton@univ-mlv.fr</email> |
|
Si on visualise ce fichier dans un navigateur, on a une arborescence des données.
Elaborons maintenant une feuille de style permettant de mettre en forme ces informations. On utilisera dans celle si des boucles. On récupérera ainsi toutes les informations pour chaque matière et nous les mettrons en forme dans un tableau.
Remarque : Il faut savoir qu'il est également possible de définir des types de tests sur des valeurs d'éléments...
Ajoutons maintenant au fichier précédent une référence vers la feuille de style que nous venons de créer. Pour cela on ajoute à l asuite du prologue la ligne suivante :
<?xml-stylesheet type="text/xsl" href="ir3.xsl"?> |
|
Si on visualise le fichier ainsi modifié on constate que les données apparaissent sous forme de tableau :

De même si on reprend maintenant l'exemple du message (en mettant cette fois ci plusieurs messages dans le fichier), on peux faire une mise forme similaire avec une autre feuille de style.
On obtient le rendu suivant :

On a pris ici deux mises en forme relativement semblables, simplement pour montrer que l'on peut assez facilement formater de manière similaire différents fichiers de données de structure différente. Néanmoins il faut bien voir que les possibilités offertes par xsl sont quasi infinies; on peut effectuer toutes les mises en forme que l'on désire (style, couleur, police, place des éléments...).