Les fonctions XSLT

Définition des espaces de nom

La définition des espaces de nom ne se pose pas lorsque l’on génère du HTMl ou du XML simple. Elle se pose rapidement lorsque l’on traite du XML plus complexe (par exemple, celui d’OpenDocument). L’instruction simplifiée {_Xns permet d’indiquer les espaces de nom à inclure dans l’élément racine <xsl:stylesheet>. Cette instruction doit être placée au tout début du fichier (seuls des espaces blancs avant sont tolérés). Les espaces de nom sont définis sous la forme préfixe = nom complet. Plusieurs espaces de noms peuvent être définis à la suite séparés par une virgule. L’espace de nom principal (attribut @xlmns) doit être accolé à _Xns. Par exemple, {_Xns=http://www.desmodo.net} donne xmlns="http://www.desmodo.net"

L’instruction propose des séries d’espaces de noms prédéfinis. Il suffit d’indiquer le raccourci. Les espaces de noms prédéfinis sont les suivants :

Ainsi l’écriture suivante :

{_Xns,_odt}

donnera ceci :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

et

{_Xns=http://www.w3.org/2000/svg, dsmd=http://www.desmodo.net}

donne

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/2000/svg" xmlns:dsmd="http://www.desmodo.net">

Les éléments de premier niveau

Les éléments de premier niveau sont ceux qui figurent au début du fichier XSLT et qui ne font pas partie de règles. Ce sont des éléments de déclaration, comme par exemple l’élément <xsl:import> qui permet l’importation d’un autre fichier XSLT. À chaque élément, correspond une instruction.

Lorsqu’un élément XSLT de premier niveau a un seul attribut (par exemple, <xsl:include> possède uniquement l’attribut @href), la valeur de cet attribut est indiqué directement séparé d’un signe égal du nom de l’instruction. Ainsi, {_Xinclude = common.xsl} se traduit par <xsl:include href="common.xsl">.

Lorsqu’un élément XSLT de premier niveau a plusieurs attributs, c’est l’attribut principal qui est indiqué directement, les autres attributs sont indiqués à la suite sous la forme de couples nom de l’attribut/valeur de l’attribut. Par exemple, l’attribut principal de l’élément XSLT <xsl:output> est l’attribut @method, cet élément peut cependant avoir l’attribut @encoding. Ainsi, {_Xoutput = html, encoding=UTF-8} se traduit par xsl:output method="html" encoding="UTF-8">.

Instruction simplifiéeÉquivalent XSLTRemarques
{_Ximport = fichier}<xsl:import href="fichier">On peut définir plusieurs fichiers à la suite en les séparant avec une virgule (_Ximport = fiche.xsl, fonctions.xsl, commun.xsl)
{_Xinclude = fichier}<xsl:include href="fichier">Comme pourt _Ximport, on peut définir plusieurs fichiers à la suite (_Xinclude = fiche.xsl, fonctions.xsl, commun.xsl)
{_Xoutput = méthode(, encoding=...)(,doctype=...)}<xsl:output method="méthode" (encoding=...)>doctype n’est pas un attribut de l’élément <xsl:output, c’est un raccourci pour les attributs @doctype-public et @doctype-system. La seule valeur actuelle est strict indiquant que c’est du HTML strict.

Il est possible de rassembler des instructions correspondant à des éléments de premier niveau.

Par exemple,

{_Xoutput=html, encoding=UTF-8, doctype=strict; _Xinclude= fonctions.xsl, cadre.xsl}

devient

<xsl:output method="html" encoding="UTF-8" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd"/>
<xsl:include href="fonctions.xsl"/>
<xsl:include href="cadre.xsl"/>

Variables et paramètres

Les déclarations de variables de paramètres peuvent appartenir au premier niveau ou à une règle. La syntaxe est la même dans les deux cas : le nom de la variable (attribut @name) est l’attribut principal.

Instruction simplifiéeÉquivalent XSLT
{_XV= nom de la variable, select=...}<xsl:variable name="nom de la variable" select="...">
{_XP= nom du paramètre, select=...}<xsl:param name="nom du paramètre" select="...">

Par exemple,

{_XV=Corpus, select= /extraction/extraitcorpus/@corpus}
{_XP=Lang, select= "'fr'"}

deviennent :

<xsl:variable name="Corpus" select="/extraction/extraitcorpus/@corpus"/>

<xsl:param name="Lang" select="'fr'"/>

L’instruction simplifiée n’est possible pour une variable que lorsque sa valeur est déterminée par l’attribut @select. Il n’existe pas d’instruction simplifiée pour lorsque la variable est définie dans le corps de l’élément comme dans l’exemple ci-dessous :

<xsl:variable name="PageName">
  <xsl:text>page</xsl:text>
  <xsl:if test="boolean(/extraction/extraitcorpus)">_corpus</xsl:if>
</xsl:variable>

Élément XSLT qui ne peut être simplifié

Éléments appartenant aux règles

{_X_s} : insère un espace avec <xsl:text> </xsl:text>
{_X_n} : insère un saut de ligne avec <xsl:text>&#xA;</xsl:text>
{_X_t} : insère une tabulation avec <xsl:text>&#x9;</xsl:text>
{_X_ = "chaîne", doe} : insère <xsl:text>chaîne</xsl:text>, doe est facultatif et donne la valeur yes à l'attribut disable-output-escaping
{_XVO = "chaîne",doe} : insère <xsl:value-of select="chaîne"/>, doe est facultatif et donne la valeur yes à l'attribut disable-output-escaping

{_XT} : règle (template}. A deux syntaxes différentes :
{_XT= "chaîne",mode="chaîne"} : règle avec l'attribut match = <xsl:template match="chaîne" mode="chaîne2">, mode est facultatif
{_XT,name="chaîne"} indique une règle nommée. Il peut y avoir également l'attribut priority.
{_XAT = "select", mode=""} : règle xsl:apply-templates avec select et mode, peut-être suivi d'instructions indiquant l'ordre de tri ou les paramètres à appliquer.
[_XCT="name", mode=""} : règle xsl:call-template avec name et mode,

Les instructions conditionnelles

Il est possible de traduire des instructions conditionnelles {IF} {ELSE} {FI} en instruction <xsl:if> <xsl:choose>… Pour cela il faut que la clause de la condition commence par _X.

Exemple :

{IF _X $NbrePartenaire =1}
{_XVO=$LOC/lib[@key='partenaire_1']}
{ELSE}
{_XVO=$LOC/lib[@key='partenaire_2']}
{FI}

donne :


<xsl:choose>

<xsl:when test="$NbrePartenaire =1">
  <xsl:value-of select="$LOC/lib[@key='partenaire_1']"/>
</xsl:when>

<xsl:otherwise>
  <xsl:value-of select="$LOC/lib[@key='partenaire_2']"/>
</xsl:otherwise>

</xsl:choose>

Lorsqu’une instruction {IF} est une instruction XSLT, toutes les instructions {ELIF} sont considérées comme des instructions XSLT et doivent commencer par _X. Il n’est pas possible de mélanger clause XSLT et clause non XSLT.