TUTORIELS 
XSL et XSLT
Le langage XML a son langage de présentation: XSL. A quoi correspond-il exactement, et comment fonctionnent les transformations des documents XML auxquels sont appliquées les règles de style ?  (19 mars 2001)
 

Grosso modo, XSL (eXtensible Style Language), est au XML ce que CSS (Cascading StyleSheet) est au HTML. Pourtant, l'analogie est trompeuse car XSL est comparativement bien plus puissant et riche que ne l'est CSS. Et ce pour une raison très simple: là ou CSS définit la présentation d'élements définis en tant qu'objets ayant une sémantique précise, XSL définit la présentation d'éléments sans sémantique, c'est-à-dire que le langage peut également spécifier ce qu'est l'élément, à savoir disposer d'un vocabulaire pour convertir le contenu d'un document XML en objets.

Le W3C définit XSL comme l'agrégation de trois éléments:

- un langage de transformation des documents XML, XSLT;
- un vocabulaire pour formater le contenu d'un document XML: XSL FO, ou XSL Formatting Objects;
- une syntaxe pour l'accès à des parties spécifiques d'un document: XPath.

Qu'est-ce que cela signifie? Un document XSL (qui est en fait un document XML particulier), contient les spécifications relatives à une classe de documents XML pour qu'une instance de cette classe soit convertie en document XML qui utilise le vocabulaire de formatage. Un processeur XSL utilise donc un document XSL contenant les règles de présentation et le vocabulaire (règles de formatage) et un "arbre source" résultant de l'analyse syntaxique d'un document XML (tout document XML "bien construit" pouvant être représenté par un arbre qui contient sa structure - voir par ailleurs). Le processeur renvoie un "arbre résultant" qui représente non plus une structure logique (comme l'arbre source), mais une structure de présentation. Le document XML résultant précise donc comment présenter le document XML source.
A noter que l'arbre résultant n'est pas forcément composé d'objets "formatés". Le document XSL ne peut contenir que les règles de présentation (par exemple pour transformer un document XML en document HTML). De fait, nombre d'implémentations d'XSL se limitent au seul langage XSLT. (Cela est en partie dû à l'incomplétude actuelle des spécifications relatives aux objets formatés).

Un exemple permet de clarifier tout cela. Voici un document XML très simple:

<?xml version='1.0' ?>
<doc>
<title>Exemple de document</title>
<para>Voici un <em>court</em> document XML</para>
<figure>
<title>Exemple d'image</title>
<graphic fileref="image.gif"/>
</figure>
</doc>

Et voici un exemple de document XSL (sans objets formatés) qui transforme ce type de document XML (une partie de ce dernier pour être tout à fait exact):

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template pattern="doc">
<HTML>
<HEAD>
<TITLE>A Document</TITLE>
</HEAD>
<BODY>
<xsl:process-children/>
</BODY>
</HTML>
</xsl:template>
<xsl:template pattern="title">
<H1> <xsl:process-children/> </H1>
</xsl:template>
</xsl:stylesheet>

On le voit, ce document XSL fait usage des "espaces de noms" (namespaces) XML: pour aller vite, comme il n'y pas de "mots-clés réservés" dans le langage XLS, il est nécessaire d'utiliser des préfixes (ici "xsl:", préfixe associé par "xmlns:" à "http://www.w3.org/TR/WD-xsl"). Ainsi "xsl:template" et "template" sont distingués.

L'examen des deux documents ci-dessus se passe de commentaires supplémentaires: la structure du document XML contient des éléments pour lesquels (ou certains desquels ici) des règles de présentation sont définis dans le document XSL.

Il reste à se pencher sur les "objets formatés" du langage, qui nous permettront de préciser les différences entre XSL et CSS, et sur XPath. L'article suivant aborde ces sujets.

 
[ Jérôme MorlonJDNet
 
Accueil | Haut de page