Tutoriel de XSLT
Plan
Avant-propos
XML, format universel Qu’est-ce que XML réelement?
Transformer avec XSLT
Un exemple : publication de données
Les formes primitives de transformation
Sélection et Parcours
Génération de code
Avant-propos
XSLT est une technologie puissante !
XSLT permet de transformer des documents XML
XSLT utilise des règles (templates) pour transformer
à la fois aux frontières et au cœur du dev. de logiciels actuels
Son apprentissage passe par des recettes
Structuration avec XML
représenter des contenus indépendamment de l’application combinaison de plusieurs principes simples et généraux
Le Méliès
6, Rue Bargoin.
Pau
64000
Un secret
21 :00
Structuration avec XML
représenter des contenus indépendamment de l’application combinaison de plusieurs principes simples et généraux
la structurartion avec XML permet : de désigner des parties d’un contenu (chaˆıne de caractère) avec des noms et de hiérarchiser ces noms une information structurée avec XML consiste à considérer que celle-ci est un arbre
Structuration avec XML
représenter des contenus indépendamment de l’application combinaison de plusieurs principes simples et généraux
la structurartion avec XML permet : de désigner des parties d’un contenu (chaˆıne de caractère) avec des noms et de hiérarchiser ces noms une information structurée avec XML consiste à considérer que celle-ci est un arbre
Structuration avec XML
la structurartion avec XML permet : de désigner des parties d’un contenu (chaˆıne de caractère) avec des noms et de hiérarchiser ces noms une information structurée avec XML consiste à considérer que celle-ci est un arbre
La désignation est réalisée par des balises :
,,,,,,,
, et
Structuration avec XML
la structurartion avec XML permet : de désigner des parties d’un contenu (chaˆıne de caractère) avec des noms et de hiérarchiser ces noms une information structurée avec XML consiste à considérer que celle-ci est un arbre
Une paire désigne (type) une partie du contenu : l’élémént XML
La hiérarchie entre les différentes paires structure le contenu
Structuration avec XML
Structuration avec XML
Structuration avec XML
Documents XML
Documents XML
la structure d’un document XML est définissable et validable par un schéma un document XML est entièrement transformable dans un autre document XML.
<!ELEMENT cinema(nom, adresse, ville, departement, (salle)+)
<!ELEMENT nom(#PCDATA)>
<!ELEMENT salle (titre, (seances)+)>
<!ATTLIST salle num CDATA #REQUIRED place CDATA #IMPLIED>
<!ELEMENT seances ((seance)+)>
<!ELEMENT seance(#PCDATA)>
Documents XML
la structure d’un document XML est définissable et validable par un schéma un document XML est entièrement transformable dans un autre document XML.
La même chose mais en xml-schema d’abord les éléments de type simple :
Documents XML
la structure d’un document XML est définissable et validable par un schéma un document XML est entièrement transformable dans un autre document XML.
ensuite les éléments de type complexe :
Documents XML
la structure d’un document XML est définissable et validable par un schéma un document XML est entièrement transformable dans un autre document XML.
Les attrib. minOccurs et maxOccurs sont par défaut à 1, donc lorsque omis : l’élément doit apparaˆıtre une et une seule fois
Documents XML
la structure d’un document XML est définissable et validable par un schéma un document XML est entièrement transformable dans un autre document XML.
Les schémas ont plusieurs avantages :
un éditeur se sert du schéma pour faciliter l’édition d’un doc. XML et/ou vérifier sa conformité pour rapport à son schéma
Un programme XSLT se base sur le schéma pour l’origine et la destination de la transformation et/ou à la vérification des règles XSLT
En combinaison avec une analyse validante, le processeur XSLT vérifie avant l’éxécution de la transformation si le doc. à transformer est conforme
Plan
Avant-propos
XML, format universel Qu’est-ce que XML réelement?
Transformer avec XSLT
Un exemple : publication de données
Les formes primitives de transformation
Sélection et Parcours
Génération de code
Publication de données
L’entête habituelle :
<?xml version =”1.0” encoding=”UTF−8”?>
<x s l : s t y l e s h e e t xmlns : x s l=”http ://www.w3. org /1999/XSL/Transform”
version =”1.0”>
<x s l : template match=”/”>
<html>
<head>
<t i t l e >Le cinéma <x s l : value−of s e l e c t=”nom”/> </ t i t l e >
</head>
<body>
<p>
<!−−I n sé r e r une image GIF avec l e t i t r e comme nom−−>
<img src=”{nom}. g i f ” a l i g n=” l e f t ” height =”220”/>
<h1><x s l : value−of |
s e l e c t=”nom”/> </h1> |
<x s l : value−of |
s e l e c t=”adresse ”/>, <br/> |
<i> <x s l : value−of |
s e l e c t=”departement”/></i >, |
<x s l : value−of </p> |
s e l e c t=” v i l l e ”/> |
<x s l : apply−templates s e l e c t=” s a l l e ”/>
</body>
</html>
</x s l : template>
<x s l : template match=” s a l l e ”>
<!−− Extraction d ’ a t t r i b u t : no de s a l l e et places −−>
<h2>S a l l e No <x s l : value−of s e l e c t=”@num”/>,
<x s l : value−of s e l e c t=”@places”/> places </h2>
<!−− Boucles sur toutes l e s séances −−>
<h3>Séances </h3><ol>
<x s l : for −each s e l e c t=”seances / seance”>
<l i ><x s l : value−of s e l e c t =”.”/></ l i >
</x s l : for −each></ol>
</x s l : template>
</x s l : stylesheet >
Transformer des chaˆıne de caractères
La manipulation des chaˆınes de catactères : la forme de transformation la plus primitive
Pour des manipulations complexes les programmeurs ont 2 choix :
1 faire appel à des fonctions écrites dans un autre langage (Java;-) ) lorsque la portabilité n’est pas critique 2 écrire des fonctions avancées en XSLT
Transformer des chaˆıne de caractères
La manipulation des chaˆınes de catactères : la forme de transformation la plus primitive
Pour des manipulations complexes les programmeurs ont 2 choix :
1 faire appel à des fonctions écrites dans un autre langage (Java;-) ) lorsque la portabilité n’est pas critique
2 écrire des fonctions avancées en XSLT
XSLT ne dispose pas de l’artillerie lourde offerte par Perl
XSLT offre principalement 9 fonctions de base
Supprimer/remplacer certains caractères d’une chaˆıne
string translate (string chaine, string arg1, string arg2)
Exemple : supprimer tous les caractères numérique qui apparaissent dans une chaˆıne donnée.
<x s l : param name=’’ chaine ’’>
<x s l : template name=’’ supprime ’’>
<x s l : value−of s e l e c t=
’ ’ t r a n s l a t e ( $chaine , ’0123456789 ’ , ’ ’) ’ ’/ >
</x s l : template>
la valeur du paramètre $chaine peut être obtenue via la méthode GET du protocole HTTP) :
http ?chaine=12 avril 2012 12 :30
les fonctions de bases
les fonctions de bases
les fonctions de bases
les fonctions de bases
les fonctions de bases
les fonctions de bases
string concat (string chaine1, string chaine2, string chaines∗ )
Boolean contains (string chaine, string sous − chaine)
string normalize − space(string chaine?) Boolean starts − with (string chaine, string sous − chaine)
number string − length(string chaine?) string substring (string chaine, number debut, number longueur?)
les fonctions de bases
string concat (string chaine1, string chaine2, string chaines∗ )
Boolean contains (string chaine, string sous − chaine)
string normalize − space(string chaine?) Boolean starts − with (string chaine, string sous − chaine)
number string − length(string chaine?) string substring (string chaine, number debut, number longueur?)
string substring − before (string chaine, string sous − chaine)
Nombres, op. math. et date / heure
Seules le opérations arithmétiques de base sont disponibles : compter,
<x s l : template name=”math : abs”>
<x s l : param name=”x”/>
<x s l : choose>
<x s l : when t e s t=”$x &l t ; 0”>
<x s l : value−of </x s l : when> <x s l : otherwise > |
s e l e c t=”$x∗−1”/> |
<x s l : value−of </x s l : otherwise > </x s l : choose> </x s l : template> </x s l : stylesheet > |
s e l e c t=”$x”/> |
Nombres, op. math. et date / heure
La page Web : http contient quelques curiosités mathématiques écrites en XSLT.
XSLT 1.0 ne sait pas quelle heure il est
Nombres, op. math. et date / heure
La page Web : http contient quelques curiosités mathématiques écrites en XSLT.
XSLT 1.0 ne sait pas quelle heure il est
l’obtention de la date et de l’heure courants ne peut être implémentée.
Nombres, op. math. et date / heure
La page Web : http contient quelques curiosités mathématiques écrites en XSLT.
XSLT 1.0 ne sait pas quelle heure il est
Ou alors en passant par : http sachant que est une communauté qui propose des extensions de XSLT 1.0 dans différents domaines et notamment : dans les fonctions math. y compris des opérateurs ensemblistes, les dates et les heures, les expressions régulières
Nombres, op. math. et date / heure
La page Web : http contient quelques curiosités mathématiques écrites en XSLT.
XSLT 1.0 ne sait pas quelle heure il est
Ou alors en passant par : http sachant que est une communauté qui propose des extensions de XSLT 1.0 dans différents domaines et notamment : dans les fonctions math. y compris des opérateurs ensemblistes, les dates et les heures, les expressions régulières
nombreuses de ces extensions sont reprises dans XSLT 2.0 à confirmer
Sélection et Parcours
Un traitement en XSLT implique 2 opérations :
1 déterminer les élements à consulter (sélection)
2 connaˆıtre l’ordre dans lequel le faire (parcours)
Sélection et Parcours
Un traitement en XSLT implique 2 opérations :
1 déterminer les élements à consulter (sélection)
2 connaˆıtre l’ordre dans lequel le faire (parcours)
La sélection est du ressort de XPath, une spéc. distincte mais fortement liées à XSLT
Sélection et Parcours
Un traitement en XSLT implique 2 opérations :
1 déterminer les élements à consulter (sélection)
2 connaˆıtre l’ordre dans lequel le faire (parcours)
Le parcours dépend des structures de contrôles intégrées dans XSLT et la fa¸con dont les règles sont organnisées à partir de ces structures
Le langage XPath
Le langage XPath
Dans XPath le référencement de nœuds s’effectue en décrivant des parcours dans l’arbre par exemple dans les instructions XSLT suivantes :
1 sélection de tous les nœuds de type ”salle” fils d’un nœud de type ”cinema” lui-même fils d’un nœud contexte.
2 désignation des nœuds auxquels s’applique une règle
Le langage XPath
Dans XPath le référencement de nœuds s’effectue en décrivant des parcours dans l’arbre par exemple dans les instructions XSLT suivantes :
1 sélection de tous les nœuds de type ”salle” fils d’un nœud de type ”cinema” lui-même fils d’un nœud contexte.
2 désignation des nœuds auxquels s’applique une règle
3 extraction de valeurs
Le langage XPath
En synthèse :
Une expression XPath désigne un ou ++ nœuds en exprimant des chemins dans un arbre XML. Leur évaluation selon le contexte donne :
soit une valeur numérique ou alphanumérique soit un sous-ensemble des nœuds de l’arbre.
Le langage XPath
Une expression XPath est constituée d’une suite d’étapes, matérialisées par des ”/”
Chaque étape est elle-même divisible en trois composants :
l’axe sens de parcours des nœuds à partir du nœud contexte;
le filtre indiquant le type de nœud à retenir dans l’évaluation le(s) prédicat(s) exprimant les propriétés que doivent satisfaire les nœuds retenus après filtrage pour être retenus dans le résultat.
Les axes
/A/B/@att1
Les axes
/A/B/@att1 = /child : :A/child : :B/attribute : :att1
Les axes
child, attribute, parent, descendant, ancestor
Les filtres
Deux types de filtrage pour selectionner des nœuds : par nom et par type
Les filtres
Deux types de filtrage pour selectionner des nœuds : par nom et par type
nom d’attrib. dernière étape car attrib. toujours nœud feuille
Les filtres
Deux types de filtrage pour selectionner des nœuds : par nom et par type
Désigne tous les commentaires fils de la racine
Les filtres
Deux types de filtrage pour selectionner des nœuds : par nom et par type
Les filtres
Exemple d’une expression avec text()
/A/B//text() = /child : :A/child : :B/descendant-or-self : :node()/text()
Les Prédicats
La 3ième partie d’une étape est un prédicat :
autrement dit, une exp. booléenne constituées d’un ou ++ tests, composés avec les connecteurs logiques and, or et la négation fournie sous la forme d’une fonction not()
La forme générale d’une étape est donc axe : :filtre[prédicat1][prédicat2]
Les Prédicats
La 3ième partie d’une étape est un prédicat :
autrement dit, une exp. booléenne constituées d’un ou ++ tests, composés avec les connecteurs logiques and, or et la négation fournie sous la forme d’une fonction not()
La forme générale d’une étape est donc axe : :filtre[prédicat1][prédicat2]
à peu près n’importe quelle expression XPath peut être convertie en un booléen
Les Prédicats
La 3ième partie d’une étape est un prédicat :
autrement dit, une exp. booléenne constituées d’un ou ++ tests, composés avec les connecteurs logiques and, or et la négation fournie sous la forme d’une fonction not()
La forme générale d’une étape est donc axe : :filtre[prédicat1][prédicat2]
Composition de prédicats /A/B[@att1=’a1’][position()=last()] tous les éléments B ayant comme attribut att1 valant a1 (premier prédicat) et on ne conserve que le dernier (second prédicat)
Les Prédicats
La 3ième partie d’une étape est un prédicat :
autrement dit, une exp. booléenne constituées d’un ou ++ tests, composés avec les connecteurs logiques and, or et la négation fournie sous la forme d’une fonction not()
La forme générale d’une étape est donc axe : :filtre[prédicat1][prédicat2]
Composition de prédicats /A/B[@att1=’a1’][position()=last()] tous les éléments B ayant comme attribut att1 valant a1 (premier prédicat) et on ne conserve que le dernier (second prédicat)
L’utilisation d’une succession de [ ] dénote une composition 6= avec l’utilisation de connecteurs logiques : l’ens. des nœuds du 1er prédicat est pris comme contexte du suivant.
Génération de code
La plupart des derniers progrès dans le développement logiciel sont liés à la notion de génération automatique de code à partir de spécifications de plus haut niveau.
Génération de code
La plupart des derniers progrès dans le développement logiciel sont liés à la notion de génération automatique de code à partir de spécifications de plus haut niveau.
Le langage cible n’est pas du code machine executable
Génération de code
La plupart des derniers progrès dans le développement logiciel sont liés à la notion de génération automatique de code à partir de spécifications de plus haut niveau.
Le langage cible n’est pas du code machine executable
L’écriture d’un programme ⇒ codage de 6= types de connaissances
Génération de code
La plupart des derniers progrès dans le développement logiciel sont liés à la notion de génération automatique de code à partir de spécifications de plus haut niveau.
Le langage cible n’est pas du code machine executable
L’écriture d’un programme ⇒ codage de 6= types de connaissances Mais qu’est-ce que XML et XSLT ont à voir avec cela?
Génération de code
La plupart des derniers progrès dans le développement logiciel sont liés à la notion de génération automatique de code à partir de spécifications de plus haut niveau.
Le langage cible n’est pas du code machine executable
L’écriture d’un programme ⇒ codage de 6= types de connaissances
Spécifier les connaissances de l’appli. en XML, ce qui permet : de générer le code de l’appli. dans différents langages cibles, de générer la documentation, et éventuellement de produire des données de test.
Génération de code
La plupart des derniers progrès dans le développement logiciel sont liés à la notion de génération automatique de code à partir de spécifications de plus haut niveau.
Le langage cible n’est pas du code machine executable
L’écriture d’un programme ⇒ codage de 6= types de connaissances
⇒ Spécifier les connaissances de l’appli. en XML, ce qui permet : de générer le code de l’appli. dans différents langages cibles, de générer la documentation, et éventuellement de produire des données de test.