Comment Ca Marche l'informatique ?
Accueil
Forum
Aide
bordure
Page d'accueil
Ajouter aux favoris
Signalez une erreur
Ecrire à Jean-Francois Pillou
Introduction
Structure du document
DTD
Définition
Entités
Styles XML
Espaces de noms
XSL
XSLT - Introduction
XSLT - Transformation
Liens XML
XLink/XPointer
Parser XML
Introduction
A voir aussi
XML et PHP
Version 2.0.3
XML - Mise en page avec XSL (eXtensible StyleSheet) Page précédente Page suivante Retour à la page d'accueil

Introduction à XSL

XML est un langage de structuration des données, et non de représentation des données. Ainsi XSL (eXtensible StyleSheet Language) est un langage recommandé par le W3C pour effectuer la représentation des données de documents XML. XSL est lui-même défini avec le formalisme XML, cela signifie qu'une feuille de style XSL est un document XML bien formé.

XSL est un langage permettant de définir des feuilles de style pour les documents XML au même titre que les CSS (Cascading StyleSheets) pour le langage HTML ou bien DSSSL (Document Style Semantics and Specification Language) pour le SGML. XSL est d'ailleurs inspiré de DSSSL dont il reprend beaucoup de fonctionnalités et est compatible avec les CSS (il s'agit d'un sur-ensemble des CSS).

Toutefois, contrairement aux CSS, XSL permet aussi de retraiter un document XML afin d'en modifier totalement sa structure, ce qui permet à partir d'un document XML d'être capable de générer d'autres types de documents (PostScript, HTML, Tex, RTF, ...) ou bien un fichier XML de structure différente.

Ainsi la structuration des données (définie par XML) et leur représentation (définie par un langage tel que XSL) sont séparées. Cela signifie qu'il est possible à partir d'un document XML de créer des documents utilisant différentes représentations (HTML pour créer des pages web, WML pour les mobiles WAP, ...).

XSLT et XSL/FO

XSL possède deux composantes :

XSLT et XSL/FO

  • le langage de transformation des données (XSLT, eXtensible Stylesheet Transformation) permettant de transformer la structure des éléments XML.

    Un document XML peut être représenté comme une structure arborescente. Ainsi XSLT permet de transformer les documents XML à l'aide de feuilles de style contenant des règles appelées template rules (ou règles de gabarit en français).

    Le processeur XSLT (composant logiciel chargé de la transformation) crée un structure logique arborescente (on parle d'arbre source) à partir du document XML et lui fait subir des transformations selon les template rules contenues dans la feuille XSL pour produire un arbre résultat représentant, par exemple, la structure d'un document HTML. Les composants de l'arbre résultat sont appelés objets de flux.

    Chaque template rule définit des traitements à effectuer sur un élément (noeud ou feuille) de l'arbre source. On appelle "patterns" (en français motifs, parfois "éléments cibles") les éléments de l'arbre source.

    template rules et patterns

    L'arbre source peut être entièrement remodelé et filtré ainsi qu'ajouter du contenu à l'arbre résultat, si bien que l'arbre résultat peut être radicalement différent de l'arbre source.

  • le langage de formattage des données (XSL/FO), c'est-à-dire un langage permettant de définir la mise en page (affichage de texte ou de graphiques) de ce qui a été créé par XSLT.

    Une fois l'arbre source créé, XSL/FO permet de formatter le résultat, c'est-à-dire d'interpréter l'arbre résultat, ou plus exactement les objets de flux le composant en leur appliquant des objets de mise en forme afin d'en faire une représentation visuelle (papier, écran, ...)

Structure d'un document XSL

Un document XSL étant un document XML, il commence obligatoirement par la balise suivante :

<?xml version="1.0" encoding="ISO-8859-1"?>
D'autre part, toute feuille de style XSL est comprise entre les balises <xsl:stylesheet ...> et </xsl:stylesheet>.

La balise xsl:stylesheet encapsule des balises xsl:template définissant les transformations à faire subir à certains éléments du document XML.

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet

xmlns:xsl="http://www.w3.org/TR/WD-xsl"

xmlns="http://www.w3.org/TR/REC-html40"

result-ns="">



	<xsl:template ... >

		<!-- traitements à effectuer -->

	</xsl:template >



</xsl:stylesheet>

Association d'une feuille XSL à un document XML

Une feuille de style XSL (enregistré dans un fichier dont l'extension est .xsl) peut être liée à un document XML (de telle manière à ce que le document XML utilise la feuille XSL) en insérant la balise suivante au début du document XML :

<?xml version="1.0" encoding="ISO-8859-1"?>

<?xml-stylesheet href="fichier.xsl" type="text/xsl"?>

Les template rules (règles de gabarit)

Les template rules sont des balises XSL permettant de définir des opérations à réaliser sur certains éléments du document XML utilisant la page XSL, c'est-à-dire généralement de transformer un tag XML en au moins un tag HTML (généralement plusieurs).

Ainsi le tag XML suivant :

<personne>

<nom>Pillou</nom>

<prenom>Jean-François</prenom>

</personne>



<personne>

<nom>VanHaute</nom>

<prenom>Nico</prenom>

</personne>



<personne>

<nom>Andrieu</nom>

<prenom>Seb</prenom>

</personne>
pourra être transformé en les tags HTML suivants :
<ul>

<li>Pillou - Jean-François</li>

<li>VanHaute - Nico</li>

<li>Andrieu - Seb</li>

</ul>

L'attribut "match" de la balise <xsl:template> permet de définir (grâce à la notation XPath) le ou les éléments du document XML sur lesquels s'applique la transformation.

La notation Xpath permet de définir des patterns, c'est-à-dire des chaînes de caractères permettant de repérer un noeud dans le document XML. Les principaux patterns sont :

Pattern Exemple Signification
| Gauche|Milieu Indique une alternative (un noeud ou bien l'autre (ou les deux))
/ personne/nom Chemin d'accès aux éléments (personne/bras/gauche) au même titre que l'arborescence utilisée généralement pour les fichiers (/usr/bin/toto)
* * Motif "joker" désignant n'importe quel élément
// //personne Indique tous les descendants d'un noeud
. . Caractérise le noeud courant
.. .. Désigne le noeud parent
@ @valeur Indique un attribut caractéristique (dans l'exemple l'attribut value
La transformation peut être réalisée

  • soit par ajout de texte,
  • soit en définissant des éléments de transformation, c'est-à-dire des éléments permettant de définir des règles de transformation à appliquer aux éléments sélectionnés par l'attribut match

Voici un exemple de feuille XSL permettant d'effectuer la transformation XML vers HTML décrite ci-dessus :

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet

xmlns:xsl="http://www.w3.org/TR/WD-xsl"

xmlns="http://www.w3.org/TR/REC-html40"

result-ns="">



	<xsl:template match="/index.php3">

		<HTML>

        <HEAD>

          <TITLE>Titre de la page</TITLE>

        </HEAD>

        <BODY BGCOLOR="#FFFFFF">

		<xsl:apply-templates/>

		</BODY>

		</HTML>

	</xsl:template >



	<xsl:template match="personne" >

		<ul>

			<li>

			<xsl:value-of select="nom"/>

			-

			<xsl:value-of select="prenom"/>

			</li>

		</ul>

	</xsl:template >



</xsl:stylesheet>
Voici la signification de cette feuille XSL
  • Le premier tag <xsl:template> permet d'appliquer une transformation à l'ensemble du document (la valeur "/" de l'attribut match indique l'élément racine du document XML). Ce tag contient des balises HTML qui seront transmises dans l'arbre résultat
  • L'élément <xsl:apply-templates/> indique le traitement de tous les enfants directs de la racine.
  • La balise <xsl:template match="personne" > permet d'aller traiter les éléments de type personne
  • Enfin les deux éléments <xsl:value-of select="nom"/> et <xsl:value-of select="prenom"/> permettent de recuperer les valeurs des balises nom et prenom

Les éléments de transformation

Les éléments de transformations permettent de sélectionner et effectuer des opérations sur les éléments du document XML. Voici une petite liste des éléments de transformation :

Elément Utilité
xsl:apply-templates Indique au processeur XSL de traiter les éléments enfants directs en leur appliquant les template rules définies dans la feuille XSL. L'attribut select permet de spécifier certains éléments enfants auxquels la transformation doit être appliquée
xsl:attribute-set Permet de nommer une liste d'attributs, pouvant être appliqués à un élément particulier
xsl:choose Structure conditionnelle de type "case"
xsl:comment Crée un commentaire dans l'arbre résultat
xsl:for-each Permet d'appliquer


Page précédente Page suivante

Ce document issu de CommentCaMarche.net est soumis à la licence GNU FDL. Vous pouvez copier, modifier des copies de cette page tant que cette note apparaît clairement.