Références XSLT

De Wikilabus.


Sommaire

Les éléments de XSLT :

xsl:stylesheet ou xsl:transform

La racine d'une feuille de style xsl doit obligatoirement être soit xsl:stylesheet ou xsl:transform. Par convention, on utilisera plus xsl:transform pour tout ce qui est feuille de transformation et xsl:stylesheet pour celle de formatage.

Attributs :

Attributs Explications
version="version" Version la version du langage XSL utilisé
id="IDREFS" Permet de définir un identifiant
extension-element-prefixes="prefixes" Représente une liste de préfixes d'espace de noms
exclude-result-prefixes="prefixes" Exclut une liste de préfixes d'espaces de noms
<xsl:transfrom
	version="2.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.w3.org/1999/XSL/Transform http://www.w3.org/2007/schema-for-xslt20.xsd"
	xmlns:stag="http://www.ressource-toi.org/xml/stagiaires/">

sommaire

xsl:output

Directement après la racine, cet élément sert à déterminer le format de sortie du document.

Attributs :

Attributs Explications
method="xml | html | text ( | xhtml )" Permet de définir le type de document (visiblement xhtml existe pour saxon pas forcément pour tous)
version="version" Permet de définir la version
encoding="type_encodage" Permet de définir l'encodage du document
omit-xml-declaration="yes|no" Permet de définir si la déclaration xml doit être présente ou non
standalone="yes|no" Permet de définir si le document se suffit à lui-même ou s'il requiert une DTD
doctype-public="identifiant" Permet de spécifier une doctype public
doctype-system="identifiant" Permet de spécifier une doctype system
cdata-section-elements="nom" Spécifie une liste des noms d'éléments dont les enfants de noeud textuels devraient être produits en utilisant des sections CDATA.
indent="yes|no" Permet de spécifier si une indentation peut-être appliquée ou non
media-type="type" Permet de spécifier le mime/type du document
<xsl:output method="xhtml" indent="yes"
		doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
		doctype-public="-//W3C//DTD XHTML 1.1//EN"/>

sommaire

xsl:template

Cet élement permet de définir un template. Il existe des templates nommés que l'on peut "appeler" avec xsl:call-template ou des modèles qui doivent correspondre à une expression X-Path.

Le template peut prendre soit l'attribut "match" , soit prendre l'attribut "name". En plus de ces deux attributs, il existe l'attribut "priority" qui permet de définir une priorité entre les différents templates qui pourrait correspondre au noeud. L'attribut "mode", lui, peut être présent sur l'élément xsl:apply-templates ce qui limiterait l'application de templates aux seuls templates qui ont la même valeur dans leur attribut mode. Bien entendu mode ne s'utilise qu'avec un template "match" et non "name".

<xsl:template match="/stagiaires/stagiaire[@sex='M']" mode="mode2" priority="3">
	<!-- Ce template ne sera appliqué que s'il y'a un xsl:apply-templates mode2 et il n'affectera que les stagiaires de sexe masculin -->
   ...
</xsl:template>
<xsl:template name="name">
	<!-- Ce template ne sera appliqué que s'il y'a un xsl:call-template name -->
   ...
</xsl:template>

sommaire


xsl:apply-templates

Lorsque cet élément est inséré, il parcourt les enfants du noeud courant et tente de trouver un template à leur appliquer parmi les templates match. Il est possible de restreindre la recherche de template avec un attribut "mode" comme expliqué précédemment. Il est aussi possible de restreindre les enfants avec un attribut "select" qui prend une expression X-Path. Enfin, il est possible aussi de lui attribuer un noeud enfant xsl:sort pour trier les noeuds enfants sur un critère ou un noeud xsl:with-param qui passe un paramètre au xsl:template.

<xsl:apply-templates select="pattern" mode="mode">
      <xsl:sort.../>
      <xsl:with-param...>...</xsl:with-param>
</xsl:apply-templates>

sommaire


xsl:call-template

Il appelle l'utilisation d'un template nommé sur le noeud courant. Lui aussi, peut prendre comme enfant un xsl:with-param pour passer un paramètre au template.

<xsl:call-template name="nom_template">
   ...
</xsl:call-template>

sommaire


xsl:param

Cette balise permet de déclarer un paramètre. Dans un template, chaque paramètre passé par xsl:with-param doit être déclaré juste après la balise xsl:template, mais il est aussi possible d'initialiser soi-même le paramètre avec une valeur soit comme corps de balise, soit avec l'attribut select qui prend une expression X-Path.

xsl:param peut aussi être utilisé après la balise xsl:stylesheet ou xsl:transform de manière à déclarer des paramètres accèssibles dans toute la feuille de style sinon leur portée par défaut est limitée au template courant.

<xsl:param name="nom"/>
<xsl:param name="nom">
   Valeur...
</xsl:param>
<xsl:param name="nom" select="expression"/>

sommaire


xsl:with-param

Utilisé avec xsl:call-template ou xsl:apply-template, cette balise permet de d'initialiser un paramètre qui pourra être utilisé dans le template.

<xsl:call-template name="montemplate">
   <xsl:with-param name="monparam">
      Valeur
   </xsl:with-param>
</xsl:call-template>
<xsl:template name="montemplate">
	<xsl:param name="monparam"/>
	<xsl:value-of select="$monparam"/>
</xsl:template>

sommaire


xsl:variable

Cette balise fonctionne exactement comme xsl:param excepté que la valeur définie dans xsl:variable n'est pas une valeur par défaut que l'on peut écraser par xsl:with-param. sommaire


xsl:element

Xsl:element permet de déclarer un nouveau noeud dans le document résultant. Il a obligatoirement un attribut name qui sera le nom de la balise, il peut prendre un attribut "namespace" et un attribut "use-attribute-sets" qui permet de faire référence à des listes d'attributs définies dans des xsl:attribute-set.

Il peut contenir aussi des éléments xsl:attribute pour déclarer ses attributs.

<xsl:element name="nom" namespace="URI" 
	use-attribute-sets="nom_jeu_attributs">
   ...
</xsl:element>

sommaire


xsl:attribute

Xsl:attribute insère un attribut avec le nom indiqué dans l'arborescence d'un document résultant. Comme pour xsl:element il a besoin d'un attribut name et peut prendre un attribut namespace.

<xsl:attribute name="nom" namespace="URI">
   ...
</xsl:attribute>

sommaire


xsl:attribute-set

Cet élément permet de regrouper différents xsl:attribute en un seul set nommé qui peut être réutilisé plus tard.

<xsl:attribute-set name="nom">
	<xsl:attribute name="nom" namespace="URI">...</xsl:attribute>
	<xsl:attribute name="nom" namespace="URI">...</xsl:attribute>
</xsl:attribute-set>

sommaire


xsl:if

Placé autour d'autre éléments, son contenu ne sera lu que si les tests effectués dans son attribut "test" est vérifié.

<xsl:if test="@sex='M'">
	...
</xsl:if>

sommaire


xsl:choose

Utilisé comme conteneur d'alternative, il sert à limiter une zone dans laquelle différentes conditions xsl:when peuvent être présentes et maximum une condition xsl:otherwise.

<xsl:choose>
	<xsl:when test="@sex='M'">
		...
	</xsl:when>
	<xsl:when test="@sex='F'">
		...
	</xsl:when>
	<xsl:otherwise>
		...
	</xsl:otherwise>
</xsl:choose>

sommaire


xsl:when

Utilisé à l'intérieur d'une zone d'un xsl:choose, permet de définir une alternative qui comme pour xsl:if sera utilisée quand le test de son attribut "test" est vérifié.

sommaire

xsl:otherwise

Utilisé à l'intérieur d'une zone d'un xsl:choose, permet de définir une alternative qui sera utilisée quand aucun xsl:when n'a pu être vérifé.

sommaire

xsl:for-each

Il permet de parcourir tous les noeuds d'une sélection X-Path définie dans son attribut "select". Il peut prendre comme premier enfant un xsl:sort qui permet de trier sur un certain critère.

<xsl:for-each select="/stagiares/stagiaire[@sex='M']">
	<xsl:call-template name="male"/>
</xsl:for-each>

sommaire


xsl:sort

Il permet de trier les noeuds d'une sélection selon un certain critère défini dans son attribut "select". On peut ajouter l'attribut "data-type" qui peut prendre comme valeur "text","number" ou nom qualifié (le comportement en cas de nom qualifié n'est pas standard et dépend du parser). L'attribut "order" qui prend comme valeur soit "ascending" soit "descending" définit le sens du tri et l'attribut "case-order" qui prend comme valeur "upper-first" ou "lower-first" définit la préférence des majuscules ou des minuscules. Un attribut "lang" peut aussi ajouter de l'information sur la langue dans laquelle s'effectuera le tri.

<xsl:for-each select="/stagiares/stagiaire[@sex='M']">
	<xsl:sort select="firstName" order="ascending"/>
	<xsl:call-template name="male"/>
</xsl:for-each>

sommaire


xsl:value-of

Il permet de prendre la valeur d'un élément désigné par un X-Path dans l'attribut "select". Il est aussi possible d'utiliser des variables ou paramètres avec la syntaxe $monparam.

Un attribut "disable-output-escaping" qui prend la valeur yes ou no permet d'activer ou de désactiver le remplacement des caractères spéciaux par leur entité XML.

<xsl:value-of select="firstName/text()"/>

sommaire


xsl:comment

Il permet d'insérer des commentaires dans le document XML résultant.

sommaire

xsl:processing-instruction

Il permet d'insérer une processing-instruction dans le document XML résultant. Il prend comme attribut obligatoire "name". sommaire


xsl:text

Il permet d'insérer des données textuelles dans un document XML résultant et prend comme attribut optionnel "disable-output-escaping" qui a le même effet qu'avec xsl:value-of.

sommaire

xsl:number

Il permet d'insérer un nombre formaté. Par défaut, sans aucun paramètre, le nombre est calculé en fonction de la position de l'élément courant dans l'arbre.

Attributs :

Attributs Explications
level Définit quel niveau doit être pris en compte. Il peut avoir comme valeur : single, multiple ou any et prend par défaut single
count Sélectionne les éléments à numéroter ave un pattern X-Path
from Indique où commencer la numérotation avec un pattern X-Path
value Permet de spécifier la valeur à formater
format Définit le format à utiliser
lang Donne une indication sur la langue dans laquelle doit être formaté le nombre
letter-value Peut prendre les valeurs alphabetic ou traditional pour désigner un type de numérotation
grouping-separator Indique le caractère de groupement
grouping-size Indique la taille d'un groupe

Pour des exemples : http://www.zvon.org/xxl/XSLTreference/Output/xslt_number.html

sommaire

xsl:decimal-format

Déclaré juste après la racine, il permet de déclarer un format de nombre, qui sera utilisé par la fonction X-Path format-number(), référencé par son nom.

<xsl:decimal-format name="fr" decimal-separator="," grouping-separator=""/>
<xsl:decimal-format name="eur" decimal-separator="," grouping-separator="."/>
<xsl:decimal-format name="us" decimal-separator="." grouping-separator=","/>
<xsl:value-of select="format-number(100110429.5, '# ###,00', 'fr')"/>
<xsl:value-of select="format-number(100110429.5, '#.###,00', 'eur')"/>
<xsl:value-of select="format-number(100110429.5, '#,###.00', 'us')"/>

sommaire


xsl:strip-space et xsl:preserve-space

Juste après la racine, xsl:strip-space définit dans son attribut "elements" une liste de noms d'éléments du document source qui doivent être normalisés alors que xsl:preserve-space définit dans son attribut "elements" la liste de noms d'éléments qui ne doivent pas être normalisés.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:strip-space elements="titre texte auteur"/>
	<xsl:preserve-space elements="codes"/>
  ...

sommaire


xsl:namespace-alias

A placer juste après la racine, il permet de préciser un alias pour un espace de noms. Il prend comme attributs "stylesheet-prefix" et "result-prefix" qui prennent tous deux comme valeur soit un préfixe soit "#default" pour spécifier l'espace de noms par défaut.

En fait, le préfixe spécifié par stylesheet-prefix sera remplacé par le préfixe de result-prefix dans le document résultant.

sommaire


xsl:message

Il permet de définir un message pour le parser dont l'interprétation en est totalement dépendante.

sommaire


xsl:copy

Xsl:copy est utilisé pour recopier le noeud courant dans l'arborescence du document XML résultant. Il peut prendre comme attribut "use-attribute-sets" pour rajouter des attributs définis dans un attribute-set au moment de la copie.

sommaire


xsl:copy-of

Xsl:copy-of est utilisé pour recopier des noeuds sélectionnés par une expression X-Path de l'attribut "select" dans l'arborescence du document XML résultant. sommaire


xsl:import et xsl:include

A déclarer juste après la racine, ils perment d'importer une autre feuille de style xsl. Ils prennent comme attribut "href" qui spécifie l'URI à utiliser pour trouver la feuille à importer. Attention que la dernière feuille de style importée écrase les valeurs déjà déclarées précédemment.

sommaire


xsl:apply-imports

Il fonctionne de la même manière que xsl:apply-templates mais restreint sa recherche de pattern aux fichiers importés.

sommaire

xsl:key

A utiliser juste après la racine, il permet de déclarer des raccourcis à utiliser avec la fonction X-Path key(). Il prend un attribut "name" qui sert d'identifiant, un attribut "match" qui prend un pattern X-Path et un attribut "use" qui sert à identifier une valeur.

	<xsl:key name = "cle1" match = "element" use = "@size" />
	<xsl:template match = "/" >
		<xsl:apply-templates select = "key('cle1','10')" />
	</xsl:template>

Utilisé sur un document comme celui-ci :

<root>
	<element size="10">a</element>
	<element size="12">b</element>
	<element size="14">c</element>
	<element size="10">d</element>
	<element size="9">e</element>
	<element size="10">f</element>
	<element size="10">g</element>
</root>

Ne devrait s'appliquer qu'aux noeuds "element" dont l'attribut "size" a une valeur de 10 (a,d,f,g).

sommaire

Outils personnels
STE-Formations ULg fapse