35
1 PARTIE 2 Transformation des documents XML Le langage XSLT

PARTIE 2 Transformation des documents XML Le langage XSLT

  • Upload
    tyson

  • View
    34

  • Download
    0

Embed Size (px)

DESCRIPTION

PARTIE 2 Transformation des documents XML Le langage XSLT. Données de mise en forme. Processeur. Question de style. Intérêt de séparer le fond et la forme d’un document (rappel) : Pour se focaliser soit sur les données, soit sur leur présentation - PowerPoint PPT Presentation

Citation preview

Page 1: PARTIE 2 Transformation des documents XML Le langage XSLT

1

PARTIE 2Transformation des documents XML

Le langage XSLT

Page 2: PARTIE 2 Transformation des documents XML Le langage XSLT

2

Question de style

• Intérêt de séparer le fond et la forme d’un document (rappel) :– Pour se focaliser soit sur les données, soit sur leur présentation

• L’ingénierie des connaissances et la publication sont deux métiers différents

– Pour restructurer et présenter les données de différentes manières• En fonction du type de terminal (écran de PC, écran de Palm,

imprimante)• En fonction du type de sortie (textuelle, graphique, sonore, mixte)• En fonction de la charte graphique (sobre, colorée, délirante)

Processeur

Données demise en forme

Page 3: PARTIE 2 Transformation des documents XML Le langage XSLT

3

Exemple complet (1)

• Transformations successives à partir d’un document XML :

– Première transformation (structurelle) à l’aide d’une feuille XSL• Permet d’obtenir (dans notre cas) un document HTML « ultra-

sobre »

– Seconde transformation (de surface) à l’aide d’une feuille de style CSS

• Permet d’appliquer un style (polices, couleurs, etc.) au document HTML

1 2

Page 4: PARTIE 2 Transformation des documents XML Le langage XSLT

4

Exemple complet (2)

• Voilà notre document XML de départ :

<?xml version="1.0"?> <?xml:stylesheet type="text/xsl" href="waffles.xsl"?>

<breakfast>

<food><name>Belgian Waffles</name><price>$5.95</price><description>Two of our famous Belgian Waffles ... </description><calories>650</calories>

</food>

<food><name>Strawberry Belgian Waffles</name><price>$7.95</price><description>Light Belgian Waffles covered with ... </description><calories>900</calories>

</food>

</breakfast>

Page 5: PARTIE 2 Transformation des documents XML Le langage XSLT

5

Exemple complet (3)

• Voilà la feuille de XSL opérant la première transformation :

<?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/"><HTML>

<HEAD><LINK rel="StyleSheet" href="waffles.css" type="text/css" media="screen"/>

</HEAD> <BODY>

<xsl:apply-templates/></BODY>

</HTML></xsl:template>

<xsl:template match="food"><DIV class="title">

<SPAN class="name"><xsl:value-of select="name"/></SPAN>(<xsl:value-of select="price"/>)

</DIV><DIV class="description">

<xsl:value-of select="description"/><SPAN class="calories">

(<xsl:value-of select="calories"/> calories per serving)</SPAN>

</DIV></xsl:template>

</xsl:stylesheet>

Page 6: PARTIE 2 Transformation des documents XML Le langage XSLT

6

XSL (XML Stylesheet Language)

• Plus que des feuilles de style : un langage de transformation– La mise en forme n’est qu’un aspect de la transformation :

• Créer des graphiques à partir des valeurs contenues dans un document XML • Générer automatiquement des sommaires et des tables des matières, etc.• Modifier un document à partir de critères d’extraction, de tri, etc.

• Les recommandations XSL sont organisées en plusieurs parties :– XSLT : XML Style Language Transformation

• Puissant mécanisme de transformation des documents XML• Langage Xpath : un formalisme de parcours d'arborescence et de pattern-

matching

– XSLFO : XML Style Language Formatting Objects• Né de la fusion entre XSLT et CSS2 (Cascading Style Sheets)• Dédié à la mise en page complexe de documents « papier »• FOP (Apache) concerne la génération de documents PDF via XSLFO

• XSL est fondé sur le modèle XML– XSL possède sa propre DTD– Beaucoup d'outils logiciels (éditeurs, parseurs, etc.) implémentent la

recommandation et sont donc utilisables avec XSL

Page 7: PARTIE 2 Transformation des documents XML Le langage XSLT

7

xsl:stylesheet

– Une feuille de style XSLT est un avant tout un document XML

– Tous les éléments standards XSLT sont dans l’espace de nommage http://www.w3.org/1999/XSL/Transform

• Le préfixe associé aux éléments standards XSLT est « xsl »

– Le numéro de version est un attribut obligatoire. La version 1.0 est largement utilisée, la recommandation pour la version la plus récente, 2.0, a été publiée le 23 janvier 2007.

Syntaxe :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!–- éléments top-level -->

</xsl:stylesheet>

Description :Elément racine de toute feuille de style XSLT ; contient les éléments top-level, généralement une suite d’éléments <xsl:template>

Page 8: PARTIE 2 Transformation des documents XML Le langage XSLT

8

xsl:template

– L’attribut « match » contient un motif qui va permettre de sélectionner des nœuds dans l’arborescence XML

• Ce motif utilise la syntaxe XPath des « chemins de localisation »

– Si un nœud correspond au motif, le contenu du modèle est instancié et inséré dans le document résultant

– Le modèle est généralement un fragment d'arbre « bien formé » qui peut comprendre d'autre éléments XSL. Ceux-ci seront interprétés et, selon l'élément, auront un effet sur l'exécution ou généreront un sous-fragement de l'arbre de sortie

– Une template peut aussi être appelé explicitement par un nom

Syntaxe :<xsl:template match="pattern">

<!-- Modèle à instancier -->

</xsl:template>

Description :Élément top-level qui instancie un modèle sur la base d’un pattern-matchingConstitue la « clé de voûte » du fonctionnement de XSLT

Page 9: PARTIE 2 Transformation des documents XML Le langage XSLT

9

Syntaxe XPath abrégée (1)

• Les chemins de localisation les plus simples sont :

– Le symbole « / » : Sélectionne le « nœud document ». C’est un chemin de

localisation absolu car il est relatif au document que l’on est en train de traiter

– Un nom unique d’élément :• Sélectionne les sous-éléments ayant le nom spécifié. Les

éléments sélectionnés dépendent du nœud courant (context node) : c’est un chemin de localisation relatif

– Un nom préfixé du symbole @ :• Sélectionne l’attribut du même nom de l’élément courant (ex :

@make)

– Les sélecteurs « comment() » et « text() » :• Sélectionnent respectivement les éventuels nœuds

commentaires et nœuds textuels enfants du nœud courant

Page 10: PARTIE 2 Transformation des documents XML Le langage XSLT

10

Syntaxe XPath abrégée (2)

• Les sélectionneurs d'expression régulières (jokers) permettent de mieux spécifier la sélection :

– Le symbole « * » :• Correspond à tout les nœuds éléments quelque soit leur nom. Il

ne sélectionne pas les attributs, les nœuds de texte et les commentaires

– L'expression « @* » :• Correspond à tout les nœuds attributs quelque soit leur nom

– Le sélecteur « node() » :• Correspond à tous les nœuds (éléments, attributs, textes, etc.)

• Sélection multiple avec le connecteur « | » :– Permet de sélectionner plus d’un type d’élément ou d’attribut :

• Exemple : « * | @* » sélectionne les éléments et les attributs

Page 11: PARTIE 2 Transformation des documents XML Le langage XSLT

11

Syntaxe XPath abrégée (3)

• Les chemins de localisation composés :

– La barre oblique « / » permet de combiner différentes étapes de localisation pour construire un chemin de localisation composé

• Chaque étape de localisation est relative à celle qui la précède• Si l’expression commence par « / » le chemin de localisation est

absolu• Si l’expression se termine par « text() » un contenu textuel est

sélectionné

– La double barre « // » permet de sélectionner des nœuds parmi tous les descendants du nœud contextuel

• Exemple : « //@* » sélectionne tous les attributs du document.

– Les sélecteurs « .. » et « . » :• Sélectionnent respectivement l’élément parent et le nœud

courant

Page 12: PARTIE 2 Transformation des documents XML Le langage XSLT

12

Syntaxe XPath abrégée (4)• Utilisation de prédicats pour restreindre une sélection :

– Les prédicats contiennent des expressions booléennes qui seront testées pour chaque nœud de la liste de nœuds contextuels (sélectionnés par la première partie d'une expression XPath)

– Les prédicats sont placés entre crochets : [@make = "Peugeot"]– Opérateurs booléens : [@make = "Peugeot" or @make = "BMW"]– On peut combiner les prédicats : [@make="Peugeot"][year > 2000]

• XPath n’est pas dispensé des règles de XML concernant la forme des documents ; ainsi le symbole < sera remplacé par l’entité &lt;

– Le prédicat peut ne pas être explicitement un booléen, une évaluation « à la C » est effectuée :

• Les nombres sont vrais s’ils correspondent à la position du nœud courant• Les chaînes de caractères sont vraies si elles ne sont pas vides• Les noms sont vrais si un fils du nœud courant a ce même nom

Page 13: PARTIE 2 Transformation des documents XML Le langage XSLT

13

Syntaxe XPath abrégée (5)

• Exemples de sélections d’éléments avec le langage XPath :– Lignée de noms : /cars/car

/cars/car/year

//year

Contrainte de présence d’un sous-élément (fils) :/cars/car[country]/year

– Contrainte sur la valeur d’un élément : /cars/car[year=2000]

/cars/car[year!=2000]

/cars/car[year=2000]/year

– Contrainte sur la valeur d’un attribut : /cars/car[@make="Peugeot"]

– Position dans la fratrie : /cars/car[1]

/cars/car[last()]

/cars/car[last() – 1]

– À tester : /*

– À tester : //*

– À tester : //@*

Page 14: PARTIE 2 Transformation des documents XML Le langage XSLT

14

xsl:apply-templates

– Cet élément impose au processeur de chercher et d’appliquer un modèle pour chaque nœud identifié par l’attribut « select »

– L’attribut « select » contient une expression XPath retournant un ensemble de nœuds et chaque nœud sera traité par le processeur• Remarque : il est possible d’effectuer un tri préalable sur l’ensemble

de nœuds en utilisant l’élément <xsl:sort> expliqué ultérieurement

L’attribut « select » est facultatif. Il prend comme valeur par défaut la collection de modèles qui s’appliquent aux fils du nœud courant. Lorsqu'il est absent, le processeur appliquera donc les modèles des enfants (descendants directs) du nœud contexte

Syntaxe : <xsl:apply-templates/><xsl:apply-templates select="expression"/>

Description :Utilisé dans les éléments <xsl:template> ; indique au processeur d’aller visiter les fils du nœud courant ou sélectionnés par une expression XPath

Page 15: PARTIE 2 Transformation des documents XML Le langage XSLT

15

xsl:value-of

– Cet élément calcule la valeur textuelle de l’expression XPath et l’insère dans le document résultant

– Si cette expression est un chemin de localisation :• Vers un nœud texte : insertion du texte• Vers un nœud élément : insertion du contenu textuel sans l'arbre

de sortie• Vers un nœud attribut : insertion de la valeur de l’attribut

– Si cet expression est une expression générale :• Insertion du résultat de l’évaluation de l’expression

Syntaxe : <xsl:value-of select="expression"/>

Description :Évalue une expression XPath et insère le résultat dans l’arbre résultant ; l’expression peut être un chemin de localisation ou une expression générale

Page 16: PARTIE 2 Transformation des documents XML Le langage XSLT

16

Expressions XPath générales (1)

• Arithmétique :– Les nombres sont au format IEEE754 (correspond au type Java

double)– XPath fournit cinq opérateurs arithmétiques + , – , * , div , mod et six

opérateurs de comparaison = , != , < , > , >= , <=

• Chaînes de caractères :– Séquences de caractères Unicode (entre guillemets ou apostrophes)– Les opérateurs = , != , < , > , >= , <= sont utilisables sur les

chaînes (attention aux chaînes qui représentent des nombres)

• Booléens :– Souvent créés par des comparaisons et utilisés comme prédicats

dans un chemin de localisation, dans un <xsl:if> ou dans un <xsl:when>

– Pas de représentation littérale : les fonctions true() et false() remplissent ce besoin

Page 17: PARTIE 2 Transformation des documents XML Le langage XSLT

17

Expressions XPath générales (2)

• XPath 1.0 définit 27 fonctions utilisables dans les expressions– Les autres formalismes qui utilisent XPath (comme XSLT ou XPointer)

étendent cette liste avec des fonctions qui leur sont spécifiques

• Chaque fonction XPath retourne l’un des quatre types suivants :– Booléen, nombre, chaîne de caractères, liste de nœuds ordonnés– XPath est faiblement typé : si on passe un argument du mauvais type, il

sera généralement converti vers le type approprié

• Quelques fonctions sur les chaînes de caractères :– number string-length(string s): taille de la chaîne s– string concat(string s1, string s2, … ) : concaténation des n chaînes– boolean start-with(string s1, string s2) : vrai si s1 commence par s2– boolean contains(string s1, string s2) : vrai si s1 contient s2– etc.

Page 18: PARTIE 2 Transformation des documents XML Le langage XSLT

18

Expressions XPath générales (3)

• Quelques fonctions sur les nombres :

– number round(number x) entier le plus proche de x– number floor(number x) plus grand entier <= x– number ceiling(number x) plus petit entier >= x– etc.

• Quelques fonctions sur les nœuds et listes de nœuds :

– number position() position du nœud courant– string local-name() nom du nœud courant– string name() nom préfixé (par l'espace ds noms) du nœud

courant– number last()taille de la liste de nœuds courante– number count(node-set nodes) taille de la liste de nœuds

Page 19: PARTIE 2 Transformation des documents XML Le langage XSLT

19

Les modèles implicites (1)

• La feuille XSLT la plus simple qu’on puisse imaginer :

• Résultat de la transformation (obtenu avec MSXML) :

– Comment cela est-ce possible ?• Toutes les balises ont été supprimées• Les éléments textuels ont été recopiés dans leur ordre d’arrivée

<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>

<?xml version="1.0" encoding="UTF-16"?>

520i2000232.860Germany307 1.4 HDi2000105.700806 2.0 16v2001170.100

simple.xsl

Page 20: PARTIE 2 Transformation des documents XML Le langage XSLT

20

Les modèles implicites (2)

• Des modèles implicites sont intégrés aux processeurs :– La spécification XSLT 1.0 préconise que dans les moteurs XSLT les

modèles suivants soient implicites (built-in templates rules) :

• Assurer la récursivité à partir des éléments non prévus :– Si le nœud courant est le « nœud document » ou n’importe quel autre

élément, alors aller visiter ses éléments fils

• Réaliser l’affichage des contenus textuels :– Si le nœud courant est un « nœud textuel », alors l’afficher dans l’arbre

résultant

– Il est possible d’écraser de tels modèles en les redéfinissant– Les modèles intégrés sont placés au début de la feuille de style– En cas de modèles concurrents, le processeur doit appliquer le dernier

<xsl:template match="/ | *"> <xsl:apply-templates/></xsl:template>

<xsl:template match="text()"> <xsl:value-of select="."/></xsl:template>

Page 21: PARTIE 2 Transformation des documents XML Le langage XSLT

21

Fonctionnement du processeur

• Algorithme (simplifié) de la transformation récursive :

1. Un pointeur « nœud courant » est positionné au « nœud document »2. Le processeur cherche à faire correspondre un modèle3. Si une correspondance est trouvée, le processeur applique le modèle

• Si le processeur rencontre la balise <xsl:apply-templates/> il va appliquer cet algorithme (à partir de l’étape 2) à tous les fils du nœud courant

• Si le processeur rencontre la balise <xsl:apply-templates select="xxx"/> il va appliquer cet algorithme (à partir de l’étape 2) à tous les éléments xxx

• Si le processeur rencontre la balise <xsl:value-of select="."/> il va écrire dans l’arbre résultant la valeur textuelle du nœud courant

• Si le processeur rencontre la balise <xsl:value-of select="xxx"/> il va écrire dans l’arbre résultant la valeur textuelle du nœud identifié par xxx

• Si le processeur rencontre la balise <xsl:copy-of select="xxx"/> il va dupliquer dans l’arbre résultant le fragment de l’arbre identifié par xxx

• Etc. etc.

Page 22: PARTIE 2 Transformation des documents XML Le langage XSLT

22

xsl:element

– Le nom de l’élément est donné par la valeur de l’attribut « name »• Revient à écrire littéralement les balises <nom> … </nom> dans la feuille de

style mais la solution <xsl:element name="nom"> est plus jolie !

– Le contenu de l’élément est déterminé en instanciant le modèle– Des attributs peuvent être ajoutés via des enfants <xsl:attribute>

Syntaxe :<xsl:element name="nom-de-l’élément">

<!–- Modèle à instancier -->

</xsl:element>

Description : Insère un élément dans l’arbre résultant

Page 23: PARTIE 2 Transformation des documents XML Le langage XSLT

23

xsl:attribute

– Peut être utilisé à l’intérieur d’un élément <xsl:element>– Peut être utilisé après un élément littéral (une balise littérale)

– Dans tous les cas, cet élément doit précéder tous les éléments littéraux et les autres instructions insérant du contenu dans l’arbre résultant

Syntaxe :<xsl:attribute name="nom-de-l’attribut">

<!–- Modèle pour la valeur de l’attribut -->

</xsl:attribute>

Description :Ajoute un attribut au dernier élément créé dans l’arbre résultant ; peut être utilisé conjointement avec l’élément <xsl:element>

Page 24: PARTIE 2 Transformation des documents XML Le langage XSLT

24

xsl:attribute (suite)

• Document source XML et feuille de style XSLT :

• Résultat de la transformation (obtenu avec MSXML) :

...<xsl:template match="lien"> <xsl:element name="A"> <xsl:attribute name="href"> <xsl:value-of select="@protocol"/>:<xsl:value-of select="."/> </xsl:attribute> <xsl:value-of select="."/> </xsl:element></xsl:template>...

<lien protocol="mailto">[email protected]</lien>

<A href="mailto:[email protected]"> [email protected]</A>

Page 25: PARTIE 2 Transformation des documents XML Le langage XSLT

25

xsl:text

– Le contenu de l’élément <xsl:text> doit toujours être bien formé : tout les caractères < ou & doivent être écrits &lt; et &amp;

– Cependant, quand le document est sérialisé, ces appels sont remplacés par les caractères représentés

Syntaxe :<xsl:text>

<!–- #PCDATA -->

</xsl:text>

Description :Utilisée pour indiquer que le contenu doit être produit comme un texte

Page 26: PARTIE 2 Transformation des documents XML Le langage XSLT

26

xsl:if

– Si l’expression est un chemin de localisation, elle sera considérée comme vraie s’il existe au moins un nœud sélectionné par l’expression

Syntaxe :<xsl:if test="expression-booléenne">

<!–- Modèle -->

</xsl:if>

Description :Instancie le modèle si et seulement si l’expression XPath est vraie ; il n’existe pas de « sinon » (utiliser l’élément <xsl:choose> à la place)

Page 27: PARTIE 2 Transformation des documents XML Le langage XSLT

27

xsl:choose

– Cet élément doit contenir au moins un élément <xsl:when> dont la syntaxe est identique à celle de l’élément <xsl:if>

– L’élément optionnel <xsl:otherwise> contient le modèle par défaut

– S’il n’y a pas d’élément <xsl:otherwise> et qu’aucune condition de test des éléments <xsl:when> n’est vraie, cet élément de produit rien

Syntaxe :<xsl:choose>

<!–- (xsl:when+, xsl:otherwise?) -->

</xsl:choose>

Description :Structure de sélection dans un liste de choix possibles ; à utiliser conjointement avec <xsl:when> et <xsl:otherwise>

Page 28: PARTIE 2 Transformation des documents XML Le langage XSLT

28

xsl:sort

– Pour effectuer un tri à plusieurs clés, utiliser plusieurs <xsl:sort>

Syntaxe :

<xsl:apply-templates select="expression">

<xsl:sort select="clé-du-tri" data-type="number" | "text" order="ascending" | "descending"/>

</xsl:apply-templates>

Description :Permet d’appliquer un tri préalable à des éléments sélectionnés par <xsl:templates> ; la clé du tri est une expression XPath

Page 29: PARTIE 2 Transformation des documents XML Le langage XSLT

29

xsl:for-each

– C’est une solution alternative à <xsl:templates> pour sélectionner un ensemble de nœud et appliquer un modèle

• L’utilisation de <xsl:template> est plus souple car plus déclaratif

Syntaxe :<xsl:for-each select="expression">

<!–- (xsl:sort*, modèle) -->

</xsl:for-each>

Description :Itère sur les nœuds sélectionnés par l’expression XPath et applique le modèle

Page 30: PARTIE 2 Transformation des documents XML Le langage XSLT

30

xsl:call-template

– Le nœud courant est le même dans les modèles appelé et appelant

– Les modèles peuvent être appelés récursivement :• Un élément <xsl:template> peut contenir un élément <xsl:call-template> le réinstanciant

• On dispose alors d’un véritable langage de programmation fonctionnel

Syntaxe :<xsl:call-template name="nom-du-template">

<!-- xsl:with-param* -->

</xsl:call-template>

Description :Invoque un modèle par son nom en lui passant éventuellement des paramètres

Page 31: PARTIE 2 Transformation des documents XML Le langage XSLT

31

xsl:with-param

– Cet élément peut aussi contenir un modèle qui sera instancié et passé comme valeur du paramètre

• Dans ce cas, il ne doit pas y avoir d’attribut « select »

– Pour passer plusieurs paramètres, utiliser plusieurs <xsl:with-param>

– Les paramètres seront récupérés via des éléments <xsl:param>

Syntaxe :<xsl:call-template name="nom-du-template">

<xsl:with-param name="paramètre" select="expression"/>

</xsl:call-template>

Description : Permet de passer un paramètre nommé à un modèle

Page 32: PARTIE 2 Transformation des documents XML Le langage XSLT

32

xsl:param

– L’élément <xsl:param> peut aussi être un élément top-level• En position top-level, cet élément fournit une valeur par défaut si le

paramètre du même nom n’est pas indiqué quand un modèle est appelé

Syntaxe :<xsl:template name="nom-du-template">

<xsl:param name="nom-du-paramètre"/>

</xsl:template>

Description :Permet de récupérer un paramètre nommé dans un modèle ; la valeur est mémorisée dans une variable « $nom-du-paramètre »

Page 33: PARTIE 2 Transformation des documents XML Le langage XSLT

33

Fonctions utilisateur (1)

• Appeler une fonction Javascript dans une transformation :– Code spécifique à Microsoft Internet Explorer :

<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://mycompany.com/mynamespace"> <msxsl:script language="JScript" implements-prefix="user"><![CDATA[

function date() {return new Date().getDate();

}]]></msxsl:script>

<xsl:template match="date">Nous sommes le <xsl:value-of select="user:date()"/>

</xsl:template></xsl:stylesheet>

Page 34: PARTIE 2 Transformation des documents XML Le langage XSLT

34

Fonctions utilisateur (2)

– Code spécifique à Sablotron (transformation « server-side ») :• L’interprète PHP doit être compilé avec l’option --javascript

<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:func="http://www.exslt.org/functions" xmlns:user="http://mycompany.com/mynamespace" extension-element-prefixes="func" exclude-result-prefixes="user">

<func:script implements-prefix="user" language="javascript"><![CDATA[

function antispam(str) {return str.replace(/@/g, " @ ");

}]]></func:script>

<xsl:template match="email"><xsl:value-of select="user:antispam(string(.))"/>

</xsl:template></xsl:stylesheet>

Page 35: PARTIE 2 Transformation des documents XML Le langage XSLT

35

Transformation des documents (1)

• Processeur « Instant Saxon » de Michael Kay :– http://users.iclway.co.uk/mhkay/saxon/– Ligne de commande : saxon –o sortie.out source.xml style.xsl

• Processeur « MSXML » de Microsoft :– http://msdn.microsoft.com/xml/– Ligne de commande : msxsl source.xml style.xsl –o sortie.out

• Processeur « XT » de James Clark :– http://www.jclark.com/xml/xt.html– Ligne de commande : java com.jclark.xsl.sax.Driver

source.xmlstyle.xsl > sortie.out

• Processeur « Xalan » du projet Apache XML :– http://xml.apache.org/xalan-j/– Ligne de commande : java org.apache.xalan.xslt.Process –in

source.xml –xsl style.xsl –out sortie.out