XSL eXtensible Stylesheet Language
Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0 et XPATH 2.0 : nouvelles recommandations du W3C XSLT 2.0 est plus simple et le traitement associé plus efficace
XSL : principe général
XSL "Un moyen de niveau balisage qui fournit une solution déclarative à la plupart des exigences de présentation." J.C. Bernadac & F. Knab Un langage de transformation et de style
XSL Composé de : Un langage de transformation de documents (XSLT) Un langage de mise en forme de documents ( XSL Formatting, XSL FO) Un langage d'adressage (XPath)
Structure d'une feuille de style Un prologue Un fichier XSL doit commencer par les lignes indiquant le numéro de version XML et l'encodage de caractères utilisé : La définition de l'élément xsl:stylesheet La déclaration peut contenir des attributs : la déclaration d'espace de noms le numéro de version, … L'élément contient la déclaration de règles de réécriture
Applications de règles de réécriture Le principe de fonctionnement de XSL est l'application de règles ou "templates" ou modèles Une règle permet de déterminer le texte qui doit être réécrit à la place d'un "motif"/d'un "pattern" (élément, attribut, texte, …)
Réorganiser Présenter Document pdf Document html Document XML
1ère étape : XML vers XML Application de règles de transformation de l'arbre du document XML source : production d'un arbre XML résultat, pouvant être complètement différent. A partir d'un document source, production d'un ou plusieurs documents XML résultats. Ce qui est produit peut contenir des indications de formatage.
Ou du XML vers ??? On peut directement générer du HTML. ou un document dans un langage ad- hoc.
2ème étape : du XML vers ??? Application des règles de mises en forme Ex : FOP (J. Tauber) "an open-source XSL Formatter and Renderer" Génération de PDF ou à partir d'un arbre d'objets de formatage.
Règles de transformation Syntaxe : [actions] L'élément racine indique que c'est une feuille de style XSL Expression au format XPATH
Apply-templates Application récursive des transformations à la racine et à ses descendants : En l’absence de l’attribut « select », traite tous les fils du nœud courant. L’attribut « select » est une expression qui doit retourner un ensemble de nœuds. Expression au format XPATH
XPATH : introduction
Xpath (= location paths) Un langage "d'adressage" (chemins d'accès) Une syntaxe partagée avec d'autres spécifications exemples : chapitre/section: toutes les sections d'un chapitre //section: toutes les sections descendantes de la racine child::*/child::para : les nœuds de nom "para" petit-enfants du nœud courant descendant::para: les nœuds "para" descendant du nœud courant ancestor::para: les nœuds "para" ancêtres du nœud courant
XPATH Extrait de personne d'un noeud
Exemples sélectionne tous les éléments paragraphe descendant d'un élément section, fils du noeud courant. sélectionne tous les éléments paragraphe descendant du noeud courant.
Autres exemples associés aux règles sélectionnera les éléments nommés section quand ceux-ci sont "fils de" chapitre sélectionnera les éléments nommés intervention qui possède l'attribut memorable dont la valeur est 'oui'
XSL : algorithme d'application des règles
Application des règles Par défaut : de l’élément racine vers ses descendants, en suivant l’ordre d’apparition des éléments. Les règles sont activées dans l’ordre de rencontre des éléments L’ordre de définition des règles n’a pas d’importance
L'algorithme du "XSL-processing" 1- le nœud racine est traité 2- chaque nœud de la liste courante est traité en appliquant la règle correspondante. 3- cela peut ajouter de nouveaux nœud à l'arbre résultat : sélection d'une liste de nœuds à traiter qui forment la liste courante de nœuds - on rejoue l'étape 2 4- on continue jusqu'à ce que plus aucun nœud ne soit sélectionné
Règles implicites Citation de la spécification: "Il existe une règle modèle [template] interne permettant à un traitement récursif de continuer même en cas de non-concordance de motif par une règle modèle explicite de la feuille de styles. Cette règle modèle s'applique aussi bien aux noeuds d'éléments qu'au noeud racine.
Règles implicites Ce qui suit montre ce qui équivaut à cette règle interne" : Autre règle implicite : copie implicite par défaut des nœuds texte dans le document résultat (exemple du CUI)
XSL : instructions principales
9 instructions principales xsl:import and xsl:include xsl:importxsl:include xsl:strip-space and xsl:preserve-space xsl:strip-spacexsl:preserve-space xsl:output xsl:variable xsl:param xsl:key xsl:decimal-format xsl:namespace-alias xsl:attribute-set xsl:template
Modulariser sa stylesheet Inclut textuellement la stylesheet référencée. Même niveau de précédence : les templates se comportent comme ceux de la stylesheet. La stylesheet importée étend la stylesheet Les templates importés d’une autre stylesheet à un niveau de précédence différent.
Gérer les espaces xsl:strip-space ne préserve pas les espaces dans les éléments xsl:preserve-space préserve les espaces dans les éléments
Spécifier le type de sortie xsl:output exemples : par défaut, xml, sauf si la première balise de l'arbre résultat est html.
Déclarer des variables xsl:variable permet d'affecter une valeur à une variable nommée xsl:param permet de déclarer un paramètre de la feuille de style.
Autres déclarations xsl:key permet d'associer un identifiant à un nœud xsl:decimal-format permet de définir un modèle de représentation des nombres décimaux (utile si internationalisation) xsl:attribute-set déclare un ensemble d'attributs réutilisables
xsl:apply-templates (suite)
xsl:apply-templates : mode Un nœud peut être calculé plusieurs fois, de façon différente :...
Attribut mode Si xsl:apply-templates a un attribut mode : il s’applique uniquement aux règles modèles des éléments ayant un attribut mode avec la même valeur
mode : exemple
XSL : des fonctions
Principales fonctions xsl:element xsl:attribute xsl:number xsl:sort xsl:node …
xsl:element Permet de calculer dynamiquement le nom d’un élément td
Des exemples… xsl:attribute Permet de rajouter dynamiquement des attributs à une balise HTML par exemple
xsl:number Pour numéroter des nœuds d'un document en fonction de leur position dans l'arbre source level : pour préciser le niveau dans l'arbre, from : point de départ de la numérotation format : format d'affichage de la numérotation
xsl:sort Pour trier les nœuds du document Des attributs : order : le sens du tri (ascending ou descending) lang : la langue du critère de tri data-type : la nature de la clé de tri (text, number) case-ordre (upper-first, lowerfirst)
Des tests xsl:if … (cf. exemple notation)
Des boucles …
Fonctions issues de XPath position() : retourne un nombre égal à la position du nœud dans son contexte last() : retourne un nombre égal à la taille de l'évaluation du contexte
Générer un identifiant unique generate-id() le processeur génère l'ID, Un ID unique par nœud (durant la même transformation) des nœuds différents ont un ID différent. Intéressant pour générer des liens internes dans l'arbre résultat.
generate-id() : exemple
XSLT 2.0
Génération et manipulation de groupes cf. group-by de SQL Création du groupe : Plusieurs options possibles : group-by, group-adjacent, group-starting-with, group-ending-with Manipulation du groupe Voir exemple "Feature 1"
Plusieurs formats de sortie Définition de plusieurs transformation dans une seule feuille de style Permet de générer automatiquement un fichier par sortie Voir exemple "Feature 2"
Création et manipulation de groupes Voir l'exemple "Feature 3"
Introduction des séquences Une séquence est une liste d’objets qui peuvent être ordonnés et manipulés (objets XML, nombres, strings, …) Cf exemple "Sequence and Space Separators in Element Content"
Création de fonctions "An xsl:function declaration declares the name, parameters, and implementation of a stylesheet function that can be called from any XPath expression within the stylesheet." extrait de la recommandation
Autres innovations Conversion possible de texte en expressions régulières, Extension de Xpath par la définition de nouvelles fonctions (écrites en C++, C#, Javascript, Java, Perl, … et XSLT!),
Autres innovations (2) Déclaration de types conformes aux schémas De nouvelles fonctions de manipulation des dates et du temps Cf exemple "Feature 5"
XSLT 2 Five XSLT 2.0 Features that Simplify XML Document Transformations by Jinyu Wang La recommandation du W3C