Cours de formation sur XSL
Le langage XSLT
Transformation de fichiers XML
• Présentation générale
• Règles élémentaires
• Construction du document résultat
• Structures itératives et conditionnelles
• Variables XSL
• Règles paramétrées, et avec noms
• Autres aspects
• Conclusion
Présentation (1)
l XSL = XML Stylesheet Language
l XSL est un langage de feuilles de styles.
l XSLT-1.0 est une Recommandation du W3C composée de :
? XSLT: un langage de transformation
? XPath: déjà étudié, sélection de noeuds
? XSL-FO: un jeu d'instructions de formatage en XML destiné a la présentation
?
Présentation (2)
l XSLT permet de transformer un document XML en un autre document XML ou bien dans un autre format, à des fins de:
? affichage: on peut obtenir un document HTML pour la visualisation (comparable à CSS). On peut également produire des fichiers textes, PDF, …
? adaptation: on veut adapter les données contenues dans le document pour obéir à une DTD donnée …
XPath, XSL-FO
lXPath: XSLT permet de spécifier un certain nombres d’opérations à exécuter lorsqu’on rencontre un élément particulier.
=> On utilise XPath pour désigner les parties du documents sur lesquelles on veut travailler. l XSL-FO: la partie formatage comporte :
? le modèle de formatage: boites, positionnement, ordonnancement , de quelle manière les pages sont organisées et comment l’information « coule » d’une page à une autre
? des propriétés d'affichage: text-align, margin-left, background, fontes, …
XSLT = XSL Transformations
Processeur XSLT (1)
l Un évaluateur de feuille de style lit un document XSLT, un document XML et produit un document en sortie en appliquant les instructions/spécifications données dans la feuille de style
l L’évaluateur peut être intégré à un butineur : Firefox, Explorer...
l ou bien intégré au serveur, pour la création dynamique de pages Web, e.g. le projet Apache XML Cocoon:
/
Processeur XSLT
l L’évaluateur peut être un exécutable « standalone » utilisé depuis la ligne de commande. Par exemple en utilisant Xalan :
java .Process -IN -XSL -OUT …
l Quelques processeurs classiques :
- Xalan
- Xerces
- Saxon- Sablotron
- ...
• Présentation générale
• Règles élémentaires
• Construction du document résultat
• Structures itératives et conditionnelles
• Variables XSL
• Règles paramétrées, et avec noms
• Autres aspects
• Conclusion
Structure d’une feuille de style
l Une feuille de style est un document XML de la forme
"; version="1.0">
…
[description du template]
…
l L’espace de noms associé au langage XSLT est l Le préfixe usuel est xsl.
l On peut utiliser xsl:transform au lieu de xsl:stylesheet
Modèle d’exécution
l Une feuille de style XSLT est constituée d’un prélude suivi d’une séquence de règles de transformation de la forme :
… transformations …
l Une règle comporte deux parties :
? un modèle de chemin exprimé en termes du langage XPath (identifie un ensemble de nœuds)
? une transformation sous la forme d’une séquence de caractères ou d’éléments dont certains sont des instructions XSLT
Modèle d’exécution
l L’évaluation d’un template se fait à partir d’un noeud contexte. Le noeud contexte initial est le nœud racine
l À partir d’un nœud contexte, l’évaluation se déroule de la manière suivante:
? on cherche le template ayant le modèle de chemin le plus précis et qui matche le nœud contexte
? on instancie le template retenu à l’étape précédente. La transformation peut créer un fragment du document résultat (en insérant du texte dans le flot de sortie) et instantier de nouveaux templates. L’évaluation continue ensuite récursivement.
l Un ensemble de nœud est évalué en prenant chacun des nœuds de l’ensemble comme nœud contexte puis en concaténant les résultats obtenus.
Règles prédéfinies (= par défaut)
l Les règles prédéfinies s’appliquent en l’absence de règles applicables définies dans la feuille de style. Elles ont une priorité plus faible que celles-ci.
l Exemple: pour les nœuds racine et éléments on poursuit le traitement sur les nœuds fils du nœud contexte :
l Exemple: pour les nœuds textes et attributs on recopie leurs valeurs dans le flot de sortie :
Balise template
Cet élément définit un modèle à appliquer à un nœud et à un contexte spécifiques. Utilisation :
match="expressionXPath" mode="nomMode">
• name : associe un nom au modèle (optionnel)
• match : indique quel nodeset sera affecté par le modèle (obligatoire)
• mode : permet à un même élément d'avoir plusieurs modèles, selon le contexte (optionnel)
• priority : utilisé en cas de conflit entre deux règles ayant la même condition (optionnel)
Un Premier Exemple
l Application d’une feuille de style XSL à un document XML pour l’afficher dans un navigateur web :
1/ instruction de traitement dans le fichier XML
2/ choix d’un noeud de départ dans la feuille de style
3/ balise de base
Un Premier Exemple (2)
Présentation HTML de
Groupe de travail,
Le :
Présentation de
Titre:
Nicolas Baudru Netcharts et HMSC 102 |
• Présentation générale
• Règles élémentaires
• Construction du document résultat
• Structures itératives et conditionnelles
• Variables XSL
• Règles paramétrées, et avec noms
• Autres aspects
• Conclusion
Construction du document résultat
Plusieurs opérations possibles :
• insérer la valeur d’un noeud du document d’entrée
• copier un fragment du document d’entrée
• insérer un nouvel élément de valeur ‘statique’
• insérer un nouvel élément de valeur ‘dynamique’
Balise xsl:value-of
Cet élément permet d'insérer la valeur d'un nœud dans la transformation.
Ce nœud est sélectionné par une expression XPath.
Cette expression peut correspondre à un élément, à un attribut ou à tout autre nœud contenant une valeur :
• select : la valeur de l’attribut select est évaluée, et c’est cette évaluation qui sera insérée lors de la transformation. (obligatoire)
• pour un noeud x de type élément, la valeur retournée est la concaténation des noeuds textes du sous-arbre enraciné en x
• pour un ensemble de noeuds, seule la valeur du premier est retournée.
Copie d’un fragment
l path"/>
? Recopie dans le flot de sortie le fragment du document à transformer sélectionné par la requête XPath à partir du noeud contexte.
? Ce fragment peut être constitué de plusieurs noeuds.
Exemple :
Recopie les éléments expose désignés et leur contenu..
Fragment résultat élément
l ...
construit un noeud élément de nom balise avec les attributs et contenus définis dans le corps de l’élément xsl:element
Exemple :
Crée une balise p contenant le texte présent dans l’élément para du document d’origine.
Fragment résultat attribute
valeur construit un attribut nommé “att”
(à utiliser à l’intérieur d’un élément xsl:element) Exemple :
....
Crée une balise image, ayant un attribut src dont la valeur est celle de l’attribut adresse de l’élément d’origine :
< image src ="">
Syntaxe courte
l Dans une feuille de style, on peut en fait insérer directement de nouvelles balises :
l ...
l Pour faire référence au document d’origine, un élément peut contenir dans ses attributs des « expressions attributs » de la forme {path}, où path est une expression XPath qui est évaluée vers une chaîne de caractères :
l l Inconvénients de la syntaxe courte ?
- dure à relire si les expressions XPath sont longues
- automatisation plus complexe
Syntaxe courte/Syntaxe longue ?
On peut utiliser la syntaxe courte seulement si le nom de l’élément est «statique». On peut quand même avoir des attributs «dynamiques».
La syntaxe longue est obligatoire pour automatiser la construction d’éléments «dynamiques».
La syntaxe courte est plus concise, mais elle peut être plus difficile à relire si les expressions XPath sont complexes.
Exemple
Document XMLFeuille de style XSLT
Le Romantique
ESSAI XSL
Cabourg
Calvados
BONJOUR LE GROUPE XML
SUIVEZ LE GUIDE
Les TroisGros
Roanne
Restaurant :
Loire
• Présentation générale
• Règles élémentaires
• Construction du document résultat
• Structures itératives et conditionnelles
• Variables XSL
• Règles paramétrées, et avec noms
• Autres aspects
• Conclusion
Balise xsl:apply-templates
On a besoin, à l’intérieur d’une règle, de faire appel à d’autres règles.
Cette balise permet de déclencher l’application de règles sur un ensemble de noeuds (les règles appliquées sont choisies selon le principe décrit précédemment).
l
? La liste des nœuds à traiter est constituée des nœuds fils du nœud contexte.
l select="path"/>
? La liste des nœuds à traiter est constituée des nœuds atteints par le chemin path depuis le nœud contexte.
Ajouter un mode à une template
l On peut associer un mode à une instruction xsl:template et activer une règle en utilisant un nom de mode spécifique dans xsl:apply-templates :
Balise xsl:for-each
l ... instructions ...
applique les instructions à tous les noeuds désignés par le chemin XPath.
Exemple :
- Titre : .
Tri des résultats
l Par défaut on suit l’ordre du document
l On peut trier les noeuds d’un node-set en spécifiant un ou plusieurs axes de tri dans les instructions
xsl:apply-templates et xsl:for-each
l Attributs possibles:
? order : ascending | descending
? Lang : "..."
? data-type : text | number
? case-order : upper-first | lower-first
Expressions conditionnelles (1)
l On peut tester la valeur (booléenne) d’une expression XPath et exécuter un template si la valeur est vraie :
(en pratique on teste souvent l’existence d’un noeud)
…
Exemple classique :
.
Ce livre est en français.
Expressions conditionnelles (2)
Equivalent du switch en C : (sur un exemple)
Ce livre est en français.
Ce livre est en anglais.
Ce livre est dans une langue non répertoriée.
• Présentation générale
• Règles élémentaires
• Construction du document résultat
• Structures itératives et conditionnelles
• Variables XSL
• Règles paramétrées, et avec noms
• Autres aspects
• Conclusion
Variables
l Une variable est un nom associé à une valeur (ce sont des variables non-mutables).
l La valeur peut être obtenue par une expression XPath ou bien par le contenu de l’élément xsl:variable.
l Pour obtenir la valeur d’une variable $nom_var
l Exemples :
3
Variables (2)
l Une variable a une portée : l'élément dans lequel elle est déclarée et ses descendants.
l Exemple :
l On peut aussi enregistrer dans une variable un fragment du document d’entrée.
l Exemple :
• Présentation générale
• Règles élémentaires
• Construction du document résultat
• Structures itératives et conditionnelles
• Variables XSL
• Règles paramétrées, et avec noms
• Autres aspects
• Conclusion
Templates comme fonctions
l On peut aussi donner un nom à une règle et l’appeler comme un fonction:
...
nom"/>
l C’est une méthode qui permet d’utiliser plusieurs fois les mêmes éléments dans un document.
Paramètres (1)
l Un template peut avoir des paramètres (encore une fois comme une fonction).
l On déclare au début de la fonction les paramètres qu’elle utilise :
l S’utilise en combinaison avec l’instruction
Paramètres (2)
l Un exemple : définition de la fonction à un paramètre
select="2*$variable_x*$variable_x+(-5)*$variable_x+2" />
l Puis appel à la fonction :
Paramètres (3)
l Un paramètre est très similaire à une variable. La seule différence est que sa valeur peut être modifiée.
l Un paramètre a un nom, une portée et une valeur par défaut. Pour obtenir sa valeur $param
expr"/>
• Présentation générale
• Règles élémentaires
• Construction du document résultat
• Structures itératives et conditionnelles
• Variables XSL
• Règles «fonctions», et paramétrées
• Autres aspects
• Conclusion
Autres instructions
l Sur des ensembles de noeuds :
? numérotation,
? construit un noeud instruction de traitement.
l attribute-set: pour grouper des déclarations d’attributs
l fonctions XPath additionnelles (dans le cas de documents multiples): document, format-number, current, ...
Exemple
2004
Fragment résultat littéraux
l Un fragment résultat littéraux est un élément permettant d’émettre une chaîne de caractères (une constante) dans
le flot de sortie. On peut émettre du texte, sans caractères de contrôle, mais aussi des éléments n’appartenant pas au namespace XSL
...
l Ou directement le texte à l’intérieur du template
(il doit être au moins dans une balise)
du texte …
l On peut également insérer des commentaires
...
Gestion des espaces inutiles
l On peut indiquer les éléments contenant des espaces inutiles en ajoutant l’instruction suivante:
path"/>
l Cette instruction indique à XSL « d’omettre » tous les nœuds textes se trouvant en-dessous de path et qui contiennent uniquement des espaces. Le comportement pour les nœuds contenant des caractères autre que des espaces n’est pas modifié
l On peut également se débarrasser des espaces se trouvant « aux extrémités » des nœuds textes:
Utilisation dans un butineur
l Les documents XML qui doivent être « directement transformés » au niveau du butineur peuvent contenir une instruction de traitement (P.I.) xml-stylesheet indiquant
où trouver la feuille de style nécessaire
l Si la feuille de style est un document XSLT la valeur du pseudo-attribut type doit être application/xml
l Remarque: Microsoft Internet Explorer utilise type="text/xsl" bien que text/xsl ne soit pas un type de média MIME valide.
Exemple
Le montant numéro vaut .
Exemple 2
Exercice 1 Les compositions sont :
• Présentation générale
• Règles élémentaires
• Construction du document résultat
• Structures itératives et conditionnelles
• Variables XSL
• Règles «fonctions», et paramétrées
• Autres aspects
• Conclusion
Quelques instructions vues
• xsl:template : définition d’une règle
• xsl:value-of, xsl:copy-of : insérer (valeur d’) un noeud
• xsl:element, xsl:attribute : création de noeuds
• xsl:apply-templates, xsl:call-template : manipulations de règles
• xsl:for-each : boucles
• xsl:if, xsl:when, xsl:choose : tests
• xsl:text, xsl:comment, xsl:processing-instruction : insertion de noeuds spéciaux
• xsl:variable, xsl:parameter
TrAX
l Il n’existe pas d’API standard pour manipuler des feuilles de style XSLT qui soit utilisable sur plusieurs plateformes ou avec différents langages
l Il existe des API propriétaires comme par exemple
TrAX (Transformations API for XML), inclus dans
JAXP
? existe uniquement pour Java
? n’est pas supporté par tous les engins XSLT
XSL 2.0
l Recomandation W3C du 23 janvier 2007
l Utilisation de XPath 2.0, ce qui implique l’utilisation de séquences et des Schémas XML
l Possibilité d’avoir de multiples document résultats
template
l Output method pour XHTML
l Validation pour les schémas
Conclusion XSLT
• XML = format de présentation de données facilement échangeables sur le web
• production d’une source unique en XML• XSLT permet d’adapter la présentation des données à n’importe quelle application • XSLT peut être vu comme le “langage de programmation” de XML