Cours Transformation de documents XML avec XSLT
4.Transformation de documents XML avec XSLT
XSL (eXtensible Stylesheet Language)
• XSL (eXtensible Stylesheet Language) est une famille de spécifications comprenant:
o XSLT (pour XSL Transformations, langage de transformations) o XSL-FO (XSL Formating Objects, langage de présentation).
• XSLT est un langage permettant de produire un document XML ou texte à partir d’un autre document en appliquant des règles de transformation.
• XSL-FO ( Extensible Stylesheet Language Formatting Objects ) est une DTD XML qui définit la présentation d’un texte sur un document papier (PS, GV, PDF, DPS).
XSLT (extensible Stylesheet Langage Tansformations)
• Le langage XSLT est un dialecte XML permettant la transformation de documents
à Extraire un contenu d’un document pour le mettre dans un format reconnu par une application de publication particulière
• Permet la génération d’autres contenus à partir d’un fichier XML, par exemple:
o du HTML (bien formé) o du XML plus compliqué (tables de matière + règles de formattage XSL/FO) o des extraits en XML ou HTML ....
o du SVG, X3D ou toutes sortes d’autres formats à partir de XML
Transformation typique
• A partir de ceci:
• On veut produire:
Comment? En XSL
• Une feuille de style XSL est un document XML
Transformer un document
• XSLT permet de construire un nouveau document (en XML, HTML, etc) à partir d’un document XML existant en le transformant
• Extraire des fragments d’un document et les assembler différemment dans une structure nouvelle.
o À l’aide des feuilles de style: un document XML qui contient un ensemble de règles (template)
o Chaque règle décrit une transformation à appliquer à certains composants
• XSLT opère sur l’arbre (ordonné) du document source.
Feuille de style
• Chaque feuille de style XSL doit commencer par l'élément racine xsl:stylesheet.
o Les fichiers XSLT ont l’extension *.xsl o L'attribut version='1.0' (obligatoire) précise la version de la spécification XSL(T).
o Attribut xmlns:xsl : espace de nom XSL o La feuille de style est contenue dans l'élément racine xsl:stylesheet.
Feuille de style
Feuille de style
• Élément <xsl:output>: Format de sortie du document résultat
o Attribut method: type de document en sortie o Attribut encoding: codage du document o Attribut indent: indentation en sortie
• Différents types de document en sortie:
o Xml: vérifie que la sortie est bien formée (sortie par défaut) o Html: accepte les balises manquantes, génère les entité HTML. (Sortie par défaut si XSL reconnait l’arbre de sortie HTML4)
o Text: tout autre format textuel: du code Java, Latex, etc.
Règles
• Une feuille de style contient une suite de règles
(xsl:template)
• L’application de la feuille de style consiste à:
o Parcourir le document source en partant de la racine
o Pour chaque nœud rencontré dans ce parcours, chercher la règle à appliquer
o L’application d’une règle produit un fragment du document résultat
Modes d’utilisation
• Navigateurs (coté client)
o Doivent être dotés d’un processeur XSLT
• Processeurs en ligne de commande (et/ou API)
o programmes appelés manuellement. Ces programmes prennent comme paramètres le fichier XML source, le fichier XSLT et produisent le fichier résultant de la transformation.
o Xalan du projet Apache o Saxon o msxsl (un processeur XSLT pour Windows)
Processeur XSLT
• Etapes du processus
Lorsqu'un processeur XSLT est invoqué, plusieurs traitements sont effectués :
construction
• à partir du document XML source, transformation construction de l'arbre correspondant ;
• création d'un nouvel arbre par application de règles de transformation sur l'arbre initial ;
• production du document résultat par sérialisation du nouvel arbre.
Définition d’une Règle XSLT
• <xsl:template> (enfant de <xsl:stylesheet>): permet de définir une règle et précise par un motif XPath, les nœuds sur lesquels elle s’applique.
Syntaxe:
• Le Pattern permet d’atteindre des nœuds cibles de la transformation. S’exprime sous forme d’une expression XPath (l’attribut match).
• Le modèle de transformation décrit ce par quoi il faut remplacer le sous-arbre que le pattern désigne (ou les sous-arbres si le motif en désigne plusieurs).
Exemple simple
19
Les patterns (motifs)
• Un pattern est une expression qui, évaluée par rapport à un certain noeud contexte, désigne un certain ensemble de noeuds de l’arbre XML d’un document.
• On ne peut pas associer n’importe quelle expression XPath à l’attribut match
o Certaines expressions seraient trop complexes à évaluer o L’expression doit toujours désigner un ensemble de nœuds
• Les axes possibles:
o Childà les nœuds enfants d’un élément o Attribute à les attributs d’un élément
o // à les descendants d’un élément ou lui-même (descendant-or-self::node() ) o Dans un prédicat, aucun type d’axe de localisation n’est interdit
Modèle de transformation
• Décrit ce par quoi il faut remplacer le sous-arbre que le motif désigne (ou les sous-arbres si le motif en désigne plusieurs).
àConstruction de l’arbre résultat
• Comprend du texte et différentes instructions XSLT
o Instruction fondamentale xsl:apply-templates o Instructions de constructions de noeuds
Instruction xsl:apply-templates
• Permet d’appliquer explicitement une règle sur une séquence de nœuds.
• Syntaxe:
• Sans attributs: les règles seront appliquées à tous les fils du nœud contexte
• Attributs select: contenant une expression Xpath: règles appliquées sur les nœuds sélectionnés par l’attribut select
• Attribut mode
o Permet de choisir explicitement une des règles parmi celles qui sont candidates àUn nœud peut être traité plusieurs fois pour générer un résultat différent à chaque fois
àProduire plusieurs résultats à partir d’un noeud
Exemple
Exemple
Construction de contenu
• Chaque application de règle de la feuille de style produit un fragment du résultat.
• Ce fragment est construit à partir du contenu de l'élément xsl:template et d'autres éléments permettant d'insérer d'autres nœuds calculés.
• Construction de contenu
o Noeud textuel par Xpath o Texte brut
o Nœuds élément et attribut
o Liste d’attributs o Copie de nœuds
o Commentaire et instruction de traitement o etc
Nœud textuel par XPath
• Une règle XSLT utilisant l’instruction <xsl:value-of> • Syntaxe:
• <xsl:value-of select="…" />est remplacée lors de l’instanciation du modèle par la valeur textuelle de ce qui est désigné par l’attribut select (obligatoire).
à Extraction du contenu de l’arbre en entrée
• disable-output-escaping (optionnel): pour le traitement des caractères spéciaux. Par exemple ">" sera affiché ">" si cette propriété est à "yes"
Exemple
Instruction xsl:value-of et type noeud
• Le nœud sélectionné est un élément
o Concaténation de tous les textes qui se trouvent comme contenu de cet élément et de ses descendants.
• Le nœud est un nœud text o Texte du nœud lui-même
• Le nœud est un Attribut
o Valeur de l’attribut
• Le nœud est une instruction de traitement
o Valeur de l’instruction de traitement
• Le nœud est un commentaire
o Le texte du commentaire (sans les marques <!– et--> )
Exemple
• En entrée:
•
• En sortie:
Exemple
• En entrée:
• Règle:
• En sortie:
Exemple
• En entrée:
• Règle:
• En sortie:
Texte brut
• L'élément <xsl:text> utilise son contenu pour créer un nœud textuel dans le document résultat.
Exercice • • family. xsl
Nœud élément
• Quand on ne connait pas le nom de l’élément à insérer
• <xsl:element> Crée un élément de sortie et lui donne le nom spécifié (nom calculé dynamiquement).
Syntaxe:
o Name (attribut obligatoire): nom de l’élément à créer o Namespace (optionnel): URI d'espace de noms de l'élément créé.
o Use-attribute-sets: Liste d'ensembles d'attributs, séparés par des espaces
Exemple
Résultat
Nœud attribut
• <xsl:attribute> Crée un nœud d'attribut et le joint à un élément de sortie.
Syntaxe:
o Name (attribut obligatoire): nom de l’attribut à créer o Namespace (optionnel): URI d'espace de noms de l‘attribut créé.
Liste d’attributs
• <xsl:attribute-set>: Définit un ensemble nommé d'attributs.
• Utilité : regrouper les définitions d’attributs pour les réutiliser associées à plusieurs éléments (tableaux, paragraphes, images, etc.)
• Syntaxe:
o Name (attribut obligatoire): nom de l’ensemble d’attributs
o Use-attribute-sets: Liste d'ensembles d'attributs, séparés par des espaces
• Les listes sont définies en dehors des règles.
Copie de nœud
• Copie du nœud courant (sans attributs) dans le document résultat:
• Copie de nœuds:
est instanciée comme une copie conforme des éléments sélectionnés o permet de copier des nœuds sélectionnés ainsi que tous les descendants de ces nœuds (nœuds d'attributs, espaces de noms et les enfants du nœud d'élément) dans le document résultat.
Exemple • •
Commentaire
<xsl:comment> Génère un commentaire dans la sortie.
Priorité entre règles
• Quelle règle choisir dans le cas de plusieurs règles éligibles?
• La priorité peut être spécifiée explicitement avec l’attribut priority.
• Sinon c’est la règle la plus spécifique qui est choisie
XSLT: fonctions étendues
• Les instructions de transformation: o Parcours itératifs: xsl:for each o Tri: xsl:sort
• Les instructions de programmation:
o Traitement conditionnel: xsl:if, xsl:choose, xsl:when o Variables: xsl:variable o Templates nommés
Instruction xsl:for-each
Structure de répétition xsl:for-each
o parcourir un ensemble de noeuds sélectionnés avec select o Les instructions sont appliquées successivement à chaque noeud sélectionné
Pas de variable, donc pas d’incrémentation
Syntaxe:
Exemple
Tri: xsl:sort
• Instruction de tri
• Permet de trier de nœuds sélectionnés par les instructions xsl:applytemplates ou xsl:for-each
• À placer après la balise ouvrante de xsl:for-each ou xsl:apply-templates.
• Par défaut, l’ordre du tri est croissant (éléments ordonnés suivant l’ordre lexicographique de la valeur textuelle de chaque élément)
• En l’absence d’une instruction <xsl:sort/>,<xsl:for-each> et <xsl:applytemplates> constituent une liste des éléments à traiter, basée sur l’ordre naturel de lecture du document XML.
Critères de Tri: xsl:sort
• Syntaxe
• Utilisation des attributs: select, order, case-order, etc.
o Select: définit la clé du tri. Prendra comme valeur une expression XPath (valeur par défaut (.) qui est la valeur textuelle du nœud courant).
o Order: définit l’ordre du tri (ascendant ou descendant). Peut prendre l’une des 2 valeurs ascending (valeur par défaut) ou descending.
o Case-ordre: définir la relation d’ordre entre les lettres minuscules et majuscules. Peut prendre les valeurs upper-first ou lower-first. (valeur par défaut dépend de la langue utilisée).
Exemple
Instructions de programmation
Traitement conditionnel : xsl:if
• Permet le traitement conditionnel d’un nœud
• Syntaxe: <xsl:if test="condition-booléenne"> Instructions... </xsl:if>
• Génère une virgule après chaque nom sauf pour le dernier
• Pas de else
Instructions de programmation
Traitement conditionnel : xsl:choose
• Test à choix multiples (équivalent au switch/case du C)
• <xml:choose> avec : <xsl:when> et <xsl:otherwise>
Exemple
• Le fragment de feuille de style retourne le contenu de l'enfant title de nœud courant si cet enfant existe ou construit un titre avec un numéro sinon.
Variables et paramètres
• Variables:
o Les variables servent à stocker des valeurs (atomique, un nœud ou une suite de ces valeurs). o Elles peuvent être utilisées dans les expressions XPath.
o Élément: < xsl:variable>
• Paramètres: o servent à transmettre des valeurs aux règles (l'élément xsl:param) .
o L'élément xsl:with-param permet d'instancier un paramètre lors de l'appel à une règle.
• La principale différence entre une variable et un paramètre est qu’un paramètre peut être passé comme argument à un template.
Variables : xsl: variable
• XSLT permet de définir des variables pouvant stocker des valeurs.
• Les variables sont visibles dans toute la sous arborescence
• Une variable, en XSLT comme dans tout autre langage, est l’association d’un nom et d’une valeur. Néanmoins, en XSLT, cette association est indestructible : il est impossible de changer la valeur d’une variable, une fois qu’on l’a déterminée.
• L'attribut name détermine le nom de la variable. La valeur est donnée soit par une expression XPath dans l'attribut select soit directement dans le contenu de l'élément xsl:variable
Exemple
àAttribut select avec la valeur (une constante)
àAttribut select avec une expression XPath
à Valeur = contenu du fils de ENSEIGNANTS dans l’arbre
Exemple
Paramètres : xsl: param
• les paramètres représentent un type particulier de variables
• Servent à transmettre des valeurs à la feuille de style et aux règles
• L’élément param peut être enfant de l'élément racine xsl:stylesheet ou des éléments xsl:template
• L’exemple déclare un paramètre bg-color avec une valeur par défaut égale à la chaîne de caractères white
• Ou
Passage de Paramètres : xsl: with-param
• Transmet un paramètre à un modèle
• Fils de <xsl:apply-templates> et <xsl:call-template>
• Syntaxe:
o Name: Obligatoire. Le Noms qualifiés du paramètre.
o Select: Une Expression à comparer au contexte actuel. Il n'y a pas de valeur par défaut. En l'absence de contenu, une chaîne vide est générée.
Templates nommés et fonctions
• XSL permet de nommer un template et de l’appeler explicitement à n’importe quel endroit à Factorisation de code
• Déclaration de fonction:
• Appel de fonction
• On peut passer des paramètres avec xsl:param
Déclaration de feuilles de style
• Importation de feuilles XSL
Cette déclaration doit figurer en tête d'une feuille de style.
Les règles importées sont moins prioritaires que les règles définies dans la feuille courante.
Syntaxe
• Inclusion de feuilles XSL
o Syntaxe
o Href: Obligatoire. Référence URI (Uniform Resource Identifier) identifiant le fichier XSLT à inclure.
o <xsl:include> est enfant de l'élément <xsl:stylesheet>
Conclusion
• XSLT est un vrai langage de règles pour la transformation de documents
• Basé sur le langage XPath
• Une feuille de style pour un document (ou une classe de documents)
Liens utiles
• XSLT recommandation W3C:xslt/
• XSLT version 2.0
• Les éléments XSLT:
• Support de Cours en ligne Elisabeth Murisasco
• Jacques Le Maitre, Description et manipulation de documents XML, supports de cours en ligne