Technologies internet


Introduction à XSLT


Voir liens.


Objectifs

La norme DSSSL de l'ISO définit les concepts nécessaires à la présentation d'un document : il est nécessaire de transformer l'arbre, avant de pouvoir le formater.

transformation xslt

Une transformation exprimée en XSLT décrit les règles pour transformer un arbre source en un arbre résultat. La structure de l'arbre résultat peut être complètement différente de la structure de l'arbre source. Pendant la construction de l'arbre résultat, des éléments de l'arbre source peuvent être filtrés et réordonnés, et des structures arbitraires peuvent être ajoutées.

Plus spécifiquement, les transformations incluent :

L'objectif d'XSLT, dans le cadre du Web, est d'être la recommandation de transformation liée à des processus de formatage. Cependant, puisqu'il transforme un document XML en un autre document XML (un arbre d'objets de formatage), XSLT peut être utilisé pour beaucoup d'autres besoins de transformation et, cela, même si, dans la volonté de ses concepteurs, il est spécialisé dans la présentation.

Principes

Une feuille de styles XSLT contient un ensemble de règles modèles ("template rules"). Une règle modèle est constituée de deux parties : un motif ("pattern") qui sert à identifier des noeuds de l'arbre source et un modèle ("template") pouvant être instancié afin de constituer une partie de l'arbre résultat. Ceci permet à une feuille de styles d'être applicable à une large catégorie de documents ayant des structures d'arbres source similaires.

Un modèle est instancié pour un élément source particulier afin de créer une partie de l'arbre résultat. Un modèle peut contenir :

La création d'un fragment de l'arbre résultat par le traitement des éléments descendants se fait en trouvant la règle modèle applicable et en instanciant son modèle. L'arbre résultat est construit en prenant la règle modèle du noeud racine et en instanciant son modèle.

L'instruction xsl:apply-templates est utilisée pour sélectionner les noeuds auxquels on applique une transformation xsl:template.

Les sélections sont effectuées à partir de la racine (/) du document source.

Exemple : si le document source est un ensemble de lettres commerciales, la transformation suivante fournira une liste de tous les titres et auteurs des lettres contenues :

<xsl:stylesheet ...>
  <xsl:template match="/">
    <!-- faire un traitement sur les objets typés lettre -->
    <xsl:apply-templates select="lettre"/>
  </xsl:template>
  <!-- définition du traitement des lettres -->
  <xsl:template match="lettre">
    <!-- générer un paragraphe -->
    <fo:block>
      <!-- prendre le contenu caractères de l'objet titre contenu dans la lettre -->
      <xsl:value-of select="titre"/>
      <!-- ajouter du texte de liaisons -->
      <xsl:text> ; auteur : <xsl:text>
      <!-- prendre le contenu caractères de l'objet auteur contenu dans la lettre -->
      <xsl:value-of select="auteur"/>
    </fo:block>
  </xsl:template>
</xsl:stylesheet>

La sélection de noeuds est réalisée en utilisant le langage XPath. Le vocabulaire d'XSLT permet de :

À ce vocabulaire sont ajoutés, outres les fonctions de XPath, un certain nombre de nouvelles fonctions permettant, d'une part, de mieux sélectionner et, d'autre part, de mieux contrôler le contenu de l'arbre cible.

La version 2.0 (recommandation 2007, tutoriel) contient de nouvelles possibilités :

Dans la pratique

XSLT est un langage a priori difficile d'accès :

Une fois cet apprentissage réalisé, le langage devient extrêmement puissant.

Exemple : écrire un programme de validation du fait que toutes les références bibliographiques d'un livre existent n'est pas, avec un langage de programmation usuel, quelque chose de trivial. Avec XSLT, l'opération est aisée à écrire :

<xsl:stylesheet ...>
  <!-- les items de bibliographie (bib-item) ont un attribut nom d'identification -->
  <xsl:key name="itemDeBiblio" match="bib-item" use="./@nom"/>
  <xsl:template match="/">
    <!-- BIBREF réalise la référence, au travers d'un attribut lien -->
    <xsl:for-each select="//BIBREF">
      <xsl:choose>
        <!-- le test permet de savoir si le résultat de recherche dans
        la clé existe et correspond à la valeur de l'attribut lien -->
        <xsl:when test="key('itemDeBiblio',@lien)/@nom=@lien">
        <xsl:text>Tout va bien</xsl:text>
        <xsl:when>
        <xsl:otherwise>
        <xsl:text>Tout va mal</xsl:text>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

Feuille de style XSLT

Les feuilles de style XSLT n'exécutent pas la meme fonction que les feuilles CSS.

Exercices

Exercices 1-4