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