Tutoriel Transformation et Formatage de documents XML
Les technologies XML
Cours 2 : Transformation et Formatage de documents XML : Cours 2.2 : XSLT
Novembre 2010
- Version 3.2 -
SOMMAIRE DU COURS
TRANSFORMATIONS DE DOCUMENTS XML
Introduction à XSL
Noeuds et arbre XML
XSLT en bref
Objectifs
Principes
Exemple XML + XSL ? XHTML
XSL en résumé
Structure d'un document XML
Règles de transformation
Variables et paramètres
Fonctions
Conclusion
Les outils destinés à transformer les documents XML représentent ceux-ci comme un arbre de nœuds XML.
XSL est le langage qui permet d’écrire des feuilles de style. Une feuille de style est constituée d’un ensemble de règles de transformations, s’appliquant chacune à un ou plusieurs nœuds de l’arbre et permettant de transformer ce nœud en un nouveau nœud de l’arbre résultat.
XSL est plus riche que CSS :
XSL supporte toutes les fonctionnalités de la norme CSS1 et a été conçu dans la perspective de pouvoir facilement "traduire" une feuille de style CSS en feuille de style XSL (et vice-versa pour des feuilles XSL simples).
XSL apporte des mécanisme de sélection des cibles stylistiques plus performant que celui de CSS ainsi que des mécanismes de ré-organisation des données.
Il existe décomposé en trois parties :
XSL Transform (XSLT)
XSL Formatting Object (XSL-FO) XML Path Language (XPATH)
XSL : eXtensible Stylesheet Language.
Objectifs : Ce langage déclaratif permet de transformer un document XML en :
un autre document texte ou XML (XHTML, ) via XSLT
audio, etc. via XSL-FO
RAPPEL : LES DIFFERENTS
TYPES DE NOEUDS 1/2
Exemple de fichiers XML :
RAPPEL : LES DIFFERENTS
TYPES DE NOEUDS 2/2
Arbre correspondant :
Principes :
Le langage XSLT décrit des règles pour transformer un document XML.
Ces règles de transformations s’appliquent chacune à un ou plusieurs nœuds de l’arbre et spécifient la transformation à effectuer sur un nœud pour le transformer en un nouveau nœud de l’arbre résultat.
Un processeur XSLT lit d’une part un document XML et d’autre part un document XSLT et génère un nouveau document en appliquant les règles de transformation.
Fonctions de base (transformations) offertes par une feuille de style XSLT : extraction de données génération de texte suppression de contenu (noeuds) déplacement de contenu (noeuds) duplication de contenu (noeuds) tri de données
Site de référence :
Dans l’exemple qui suit, on souhaite transformer un document XML en document HTML :
Document XML source:
Durand
Martineénom>
Document HTML cible :
Durand Martine
Document XSLT correspondant :
Un exemple complet: XML & XSL
Le fichier (eXtensible Markup Language) :
Livre
50
Un article très recherché
CD 23
Un exemple complet: production HTML
le traitement des fichiers , , donne le fichier suivant:
Stock de la société
Produit Livre
Prix : 50 en Francs
Un article très recherché
Produit CD
Prix : 23 en Euros
Un exemple complet: XSL
Le fichier (eXtensible Style Language) :
xmlns:xsl="; version="1.0">
Stock de la société
Produit
Prix :
en
STRUCTURE D’UN DOCUMENT XSLT
1/6
Structure d’un document XSLT :
xmlns:xsl=";>
set>
STRUCTURE D’UN DOCUMENT XSLT
2/6
L’élément racine :
L’attribut version indique la version de XSLT exigées par la feuille de styles
L’attribut xmlns:xsl indique l’URI de l’espace de nom xsl (il est nécessaire pour indiquer à un éventuel processeur XSL que notre fichier est du XSL valide).
Les éléments fils de sont appelés éléments de premier niveau
DOCUMENT XSLT 3/6
et permettent d’inclure des règles d’un document XSLT dans un autre.
La différence entre ces 2 instructions résident dans la gestion des conflits en terme d’application des règles :
? avec xsl:import les règles importées ont une préséance moindre que celles du programme importateur (l’ordre d’importation est important)
? avec xsl:include il n’y a pas de notion de préséance xsl:import doit être le premier élément de premier niveau du programme.
DOCUMENT XSLT 4/6
permet de définir le format de sortie.
Exemple :
Cette déclaration précise que : ?le document cible est le format HTML,
? le fichier cible sera indenté,
? les caractères du fichier XML d’entrée sont encodé selon la norme iso-8859-1.
XHTML est du xml, donc method=“xml” !!
DOCUMENT XSLT 5/6
(suite) :
La notion d’encoding a son importance si le fichier XML contient des caractères
accentués et est déclaré avec l’entête .
En effet le fichier XML sera correctementtransformé si l’on déclare le même encodageau niveau du XML et du XSLT.
DOCUMENT XSLT 6/6
et :
permet la suppression des espaces blancs superflus pour les éléments énumérés dans la liste.
? Exemple :
elements="liste_éléments"/> permet de préserver les espaces blancs tels quels pour des éléments énumérés dans une liste.
? Exemple :
TRANSFORMATION 1/11
définit une règle XSLT :
Un document XSLT se compose d’un ensemble de règles (template) permettant de construire le résultat.
L’application d’une règle produit un fragment du document résultat.
L’ordre des règles n’a pas d’importance.
Une règle s’applique dans le contexte d’un nœud de l’arbre.
Le corps d’une règle se compose d’un ensemble d’instructions.
TRANSFORMATION 2/11
xsl:templatematch="pattern" name= "qname"> :
L'attribut match est un motif (XPath) qui identifie le ou les nœud(s) source pour lesquels la règle s'applique. Cet attribut est exigé à moins que l'élément ait un attribut name.
Exemple :
Si un template contient du texte ou des éléments XML (autres que des instructions XSL), ces éléments seront écrits sur la sortie.
TRANSFORMATION 3/11
Les fonctions de création de noeuds:
Création d’un élément :
xsl:element name=qname> Création d’un attribut :
xsl:attribute name=qname> valeur Création de texte :
xsl:text> texte
Création d’instructions de traitement :
xsl:processing-instruction name=qname> Création de commentaires :
xsl-comment> text
TRANSFORMATION 4/11
et
crée un nœud de type texte correspondant au résultat de l’évaluation de l’expression.
?Syntaxe : ? Exemples :
fournit un moyen simple pour copier le nœud courant.
?Syntaxe : ? Exemple :
TRANSFORMATION 5/11
Les instructions et :
L’attribut test spécifie une expression. Après évaluation de cette expression, le résultat est converti en booléen. Si le résultat est vrai alors le contenu du modèle est appliqué, sinon rien. Exemples :
TRANSFORMATION 6/11
L’instruction de répétition :
Cet élément permet d'appliquer des règles de style sur chaque nœud identique d'un template. Le contenu de cette instruction est un modèle.
Exemple :
TRANSFORMATION 7/11
permet d'effectuer un tri sur des données selon des critères spécifiés:
Lorsqu'un élément ou
a un ou plusieurs fils , les nœuds sélectionnés sont triés et traités en fonction des clés de tri spécifiés. Lorsque des éléments xsl:sort sont utilisés dans xsl:for-each, ils doivent apparaître en premier.
Exemple :
TRANSFORMATION 8/11
permet d’appliquer un modèle de manière récursive aux fils du nœud courant:
En l'absence de l'attribut select, l'instruction traite tous les fils du nœud courant, y compris les nœuds textuels. Exemple :
xsl:template match="personne">
/xsl:template>
xsl:template match="nom">
/xsl:template>
TRANSFORMATION 9/11
Il existe trois façons d’appeler un template :
Sélectionner les nœuds à traiter à l’aide d’une requête XPath et leur appliquer les templates correspondants :
Appliquer les templates correspondants à tous les fils du nœud courant :
Appeler un template grâce à son nom (à la manière d’un sous-programme). Contrairement aux deux méthodes précédentes, on ne l’applique pas à un ensemble de sous-éléments du nœud courant mais à ce même nœud (pas de changement de contexte).
TRANSFORMATION 10/11
Sélection d’une règle parmi plusieurs règles candidates:
Il existe des priorités implicites qui permettent au processeur de choisir
On peut aussi donner explicitement une priorité
Lorsque le choix est impossible, le processeur s’arrête.
Priorités implicite : plus c’est spécifique, plus c’est prioritaire
Priorité - 0.5 : Les motifs simples (autres qu’un nom d’élément ou d’attribut) tels que * par exemple.
Priorité 0 : Les motifsconstitués d’une seule étape XPath, avec un nom d’élément ou d’attribut et sans prédicat. Priorité 0.5 : Tous les autres (prédicats, plusieurs étapes)
TRANSFORMATION 11/11
Les modes:
Leur raison d’être réside dans le fait qu’un même nœud peut être traité par plusieurs règles (un chapitre par exemple peut être traité une fois pour construire l’index et une autre fois pour publier le contenu). Pour distinguer les deux règles, on les distinguera par mode.
xsl:template match=“CHAPITRE"mode="INDEX">
VARIABLES ET PARAMETRES 1/2
définit une variable XSLT :
Syntaxe de la déclaration :
0
Syntaxe de l’invocation :
Max :{$MAX} La portée d’une variable est limitée à l’élément dans lequel elle a été définie.
Une fois déclarée, la valeur d’une variable ne peut être modifiée par la suite.
VARIABLES ET
PARAMETRES 2/2
définit un paramètre XSLT:
Syntaxe de la déclaration :
0
La principale différence entre une variable et un paramètre est qu’un paramètre peut être passé comme argument à un template. Cela se fait de la manière suivante :
0
FONCTIONS XSLT 1/2
XSLT fournit un certain nombre de fonctions :
La fonction format-number convertit son premier argument en une chaîne utilisant le motif de formatage spécifié par le second argument.
Ce motif de formatage est composée d’un préfixe optionnel, d’un motif de formatage et d’un suffixe optionnel. Le motif de formatage est une séquence de caractères spéciaux définis dans le tableau ci-dessous :
Exemples :
FONCTIONS XSLT 2/2
Caractères de formattage de la fonction format-number :
CONCLUSION SUR XSLT
Avantages d’XSLT :
A partir d’un même document XML, on peut générer plusieurs formats en sortie (HTML, WML…)
Inconvénients d’XSLT :
Bien que la version 1.0 ait été stabilisée, les outils implémentant XSLT ne respectent pas tous la recommandation (fonctionnalités manquantes, ajout de fonctionnalités et d’éléments propriétaires).
XSLT versus CSS :
XSLT peut tout à fait être utilisé de manière combinée avec les CSS, en particulier quand la cible est du HTML4 ou du XHTML1.