XSLT - Yves bekkers - IFSIC1 XSLT Langage de transformation d’arbre Yves Bekkers Mise à jour : 12 avril 2015.

Slides:



Advertisements
Présentations similaires
La boucle for : init7.c et init71.c
Advertisements

Introduction aux Web Services Partie 1. Technologies XML
1 3.Langage XSL = XSLT + XSL-FO transformationFormatage.
Transformation de documents XML
DTD Sylvain Salvati
Introduction à XSLT Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée.
Les espaces de nommage XML par Philippe Poulard 1
Vocabulaire pour la passage du modèle conceptuel des données au modèle relationnel des données. MCDMRD EntitéTable PropriétésChamps, attribut IdentifiantClé
XML schema Objectifs Valider un doc. XML pour des contraintes syntaxiques Documenter un type de documents XML caractérisé par des contraintes Encadrer.
XHTML EXtensible HyperText Markup Language. HTML et XML HTML (HyperText Markup Language) et XML (eXtensible Markup Language) sont deux spécifications.
Cours 2 : Transformation de documents XML
Xpath XPath is a language for finding information in an XML document.
le langage les éléments
Les fonctions de XPath et XSLT
Domaines nominaux XSLT
Nicolas Singer Maître de conférence, université Champollion
Tutoriel XSLT F. Sajous ERSS – 01/04/2005.
Manipulation d’XML avec XSL
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
CREATION DE FEUILLE DE STYLE pour structuré le document XML
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
UNIVERSITE CHOUAIB DOUKKALI Département des mathématiques
Introduction à DOM Maroua Bouzid
Xml/xslt : Extensible Stylesheet Language Transformation réalisé par: saÏd NAÏM.
28 novembre 2012 Grégory Petit
Introduction à la structuration des documents: les techniques M2: Gestion des connaissances.
Notions sur le XML Réfs : manuel p 149. Introduction Le XML (eXtensible Markup Language) est un standard d'échange de données. Il fait partie comme le.
Xpath XML Path language par Yves Bekkers
XSLT Langage de transformation darbre par Yves Bekkers.
STAF 2X XSL/FO Glaus & Ruckstuhl Mars © Glaus & Ruckstuhl TECFA Programme du 18 et 19 mars Revision XML Introduction à XSL/FO (intérêts et.
XSLT : trier et mettre en valeur le contenu d’un document XML
Support des connaissances TP2 XSL-T
PHP 2° PARTIE : FONCTIONS ET FORMULAIRE
XML Plan du cours Introduction au fichier XML
Les feuilles de style CSS
Animateur : Med HAIJOUBI
8 - XML Cours XML.
Le Langage XML Belkhir Abdelkader Laboratoire LSI USTHB
1 Programmation Web II 2 ème année Licence Appliquée IAG Faculté des Sciences Economiques et de Gestion de Nableul Université 7 novembre à Carthage Années.
Les outils de base : XPath, XSL, XLink, XForms
Paradigmes des Langages de Programmation
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.
Introduction à XML Généralités.
XML-schema. Pourquoi XML-schema Les DTD : Pas de typage, peu de contraintes sur les contenus nombre d'apparitions d'un élément à choisir entre 0 et 1.
LE HTML ISN Terminale S Un peu d’histoire …
JavaScript.
Le langage XML.
XPath XML Path UP Web Année universitaire
XML Stylesheet Language
Les balises HTML et les objets JavaScript correspondants Objet document L'objet document est important dans la mesure ou il contient tous les objets du.
Programmation Web : Introduction à XML
Programmation Web : Schémas XSD Jérôme CUTRONA 19:27:07 Programmation Web
Technologies web et web sémantique TP3 - XML. XML eXtensible Markup Language (langage extensible de balisage) – Caractéristiques: méta-langage = un langage.
Publication et Traitement avec XSL
Arbres binaires et tables de hachage
MJ. Blin et M. CsernelPoleInfo31 XML et ses environnements Documents XML bien formés Prologue Arbre d'éléments Attributs Commentaires Entités internes.
HTML Cours 3. Plan du cours Les feuilles de styles CSS Mise en forme du texte et des paragraphes.
Introduction à XML Yves Bekkers. Plan Introduction - structurer l’information Les langages à balises - un peu d’histoire XML - concepts de base Outils.
 G. Gardarin Les outils de base: Publication avec XML 1. XPATH 2. XSLT 3. XSLFO 4. XLink, XForms, RSS, … 5. XML et la bureautique.
Soutenance du mémoire de synthèse
Module : Langage XML (21h)
Modélisation des documents: DTD et Schéma
1. Introduction 2. DTD 3. Schémas
Introduction à CSS Généralités. Introduction Beaucoup de documents XML sont destinés à être présentés. Les information du fichier seul (avec ou sans DTD)
eXtensible Markup Language. Généralités sur le XML.
GENIE MULTIMEDIA Restitution de documents CSS Christine Vanoirbeek EPFL – IC – CGC Bâtiment BC (Station 14) 1015 LAUSANNE
XML : un métalangage pour la description de documents structurés XML a été défini par le consortium W3 en fonction de 2 objectifs: Compenser les limitations.
Dreamweaver Séance 1.
XSLT. Les documents XML peuvent avoir dans leur prologue une instruction de traitement xml-stylesheet. Cette instruction de traitement indique au navigateur.
1 er séance SI28 A2004 YIN Lei Emmanuel Eugene. Plan de l’exposé  Introduction au HTML  Le HTML dans le bloc-notes (notepad)  Présentation de Dreamweaver.
Transcription de la présentation:

XSLT - Yves bekkers - IFSIC1 XSLT Langage de transformation d’arbre Yves Bekkers Mise à jour : 12 avril 2015

XSLT - Yves bekkers - IFSIC2 Plan Introduction Prélude d'une feuille de style Règles de réécriture : Template, Parcours récursifs Règles par défaut Parcours itératifs Modularité Variables, Tri, conditionnelle, passage de paramètres Définition de fonctions récursives Les clés - un mécanisme d'indexation de documents

XSLT - Yves bekkers - IFSIC3 Transformation de documents XSL (eXtensible Stylesheet Language) Deux normes indépendantes –XSLT : langage de transformation XPath : langage pour adresser les nœuds d’un arbre –XSL-FO : langage de formatage Permet de spécifier un formatage plus fin que celui que l'on obtient à l'aide de HTML+CSS

XSLT - Yves bekkers - IFSIC4 XSLT le langage de transformation Un langage déclaratif (Turing complet !) –avec une syntaxe XML ! Les programmes XSLT s'appellent des feuilles de styles –Mais c'est beaucoup plus puissant que CSS –Exprime une transformation d'arbre en un autre arbre Modèle de calcul –Utilise une technique de filtrage à base de motifs (patterns) et de modèles (template) décrits dans des règles (template rules) pour transformer des arbres

XSLT - Yves bekkers - IFSIC5 XSLT = Transformation d’arbre

XSLT - Yves bekkers - IFSIC6 XSLT premier exemple <xsl:stylesheet version="1.0" xmlns:xsl= " <xsl:output method= "html" version="1.0" encoding="UTF-8"/> Bonjour Bonjour !

XSLT - Yves bekkers - IFSIC7 XSLT est un langage XML Les instructions sont des éléments XML <xsl:stylesheet version="1.0" xmlns:xsl= " <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

XSLT - Yves bekkers - IFSIC8 XSLT un espace de noms Espace de nom XSLT – –Préfixe recommandé xsl:

XSLT - Yves bekkers - IFSIC9 Prélude d’une feuille de style

XSLT - Yves bekkers - IFSIC10 Elément Élement racine d’un document XSLT <xsl:stylesheet version="1.0" xmlns:xsl= " > –Attribut version : version de langage XSL (obligatoire) –Attribut xmlns:xsl : espace de nom XSL

XSLT - Yves bekkers - IFSIC11 Elément Format de sortie du document résultat <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> –Attribut method : type du document en sortie –Attribut encoding : codage du document –Attribut indent : indentation en sortie

XSLT - Yves bekkers - IFSIC12 Type de document en sortie Trois types de document en sortie –xml : vérifie que la sortie est bien formée (sortie par défaut) –html : accepte les balises manquantes, génère les entités HTML (é...) (sortie par défaut si XSL reconnaît l'arbre de sortie HTML4) –text : tout autre format textuel : du code Java, format Microsoft RTF, LaTex

XSLT - Yves bekkers - IFSIC13 Parcours/transformation d’arbre Règle de réécriture : template rules – Spécifier un parcours de l’arbre d’entrée – Obtenir une valeur dans l’arbre source – –les crochets dans un attribut

XSLT - Yves bekkers - IFSIC14 Règles de réécriture + règle = modèlemotif template template rules pattern filtrageréécriture Transformer un arbre en un autre

XSLT - Yves bekkers - IFSIC15 Élément Règle de réécriture motif + modèle … modèle … –Attribut match : expression XPATH Un motif pour filtrer l'arbre d'entrée –Contenu de l'élément : Un modèle de sous-arbre en sortie Un programme XSLT est un ensemble de règles

XSLT - Yves bekkers - IFSIC16 modèle « Document html» motif « filtre la racine du document d’entrée » Premier exemple complet <xsl:stylesheet version="1.0" xmlns:xsl=" Welcome Welcome! règle

XSLT - Yves bekkers - IFSIC17 Un élément contient –Le modèle de texte HTML (ou XML ou texte simple) le texte XML doit être bien formé –Des instructions XSLT (mélangées au modèle de sortie) pour générer un texte en relation avec le contenu du document source pour extraire des informations du document source Contenu de l'élément Extraction du contenu de l'arbre en entrée Expressions XPath

XSLT - Yves bekkers - IFSIC18 Second exemple - le carnet d’adresse Liste des Noms Nom : Bekkers Nom : Bartold Nom : Letertre Nom : Apolon Bekkers... Bartold En entrée En sortie

XSLT - Yves bekkers - IFSIC19 Expression xpath Modèle de sous-arbre Second exemple (1) <xsl:stylesheet version="1.0" xmlns:xsl= " <xsl:output method="html" indent="no" encoding="iso "/>...

XSLT - Yves bekkers - IFSIC20 Second exemple (2) Liste des Noms Nom :

XSLT - Yves bekkers - IFSIC21 Résultat Pour un document source contenant 4 cartes de visite Liste des Noms Nom : Bekkers Nom : Bartold Nom : Letertre Nom : Apolon

XSLT - Yves bekkers - IFSIC22 Expression xpath Changement de contexte - Élément Descente dans les fils d’un nœud Raccourci d’écriture –descente par défaut aux nœuds fils Liste des Noms <xsl:apply-templates select="child::node()"/>

XSLT - Yves bekkers - IFSIC23 Élément Nom : Sélection de la valeur : –attribut select : expression xpath –ici : le texte contenu dans l’élément nom de l’élément carteDeVisite Générer le contenu d’un élément

XSLT - Yves bekkers - IFSIC24 Résultat de et type nœud Le nœud selectionné est un élément –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 –Texte du nœud lui même Le nœud est un Attribut –Valeur de l'attribut normalisée (pas d’espace de début et fin) Le nœud est une Instruction de traitement –Valeur de l'instruction de traitement (sans les marques et sans le nom) Le nœud est un Commentaire –Le texte du commentaire (sans les marques )

XSLT - Yves bekkers - IFSIC25 Exemple 1 Arbre en entrée Règle Nom : Arbre en sortie Bekkers Nom : Bekkers

XSLT - Yves bekkers - IFSIC26 Exemple 2 Arbre en entrée enseigne XML au SEP Régle En sortie enseigne XML au SEP

XSLT - Yves bekkers - IFSIC27 Exemple 3 Arbre en entrée enseigne XML au SEP Règle En sortie enseigne Seul le premier élément sélectionné est produit

XSLT - Yves bekkers - IFSIC28 Exemple 4 Arbre en entrée enseigne XML au SEP Règle En sortie note

XSLT - Yves bekkers - IFSIC29 Exemple 5 Arbre en entrée 4 cartes de visite : Bekkers, Bartold, Letertre, Apolon Règle En sortie Bekkers Seul le premier élément sélectionné est produit

XSLT - Yves bekkers - IFSIC30 Exemple 6 Arbre en entrée 4 cartes de visite : Bekkers, Bartold, Letertre, Apolon Régle En sortie BekkersBartoldLetertreApolon Pour chaque carte de visite le template est appliqué

XSLT - Yves bekkers - IFSIC31 Règles par défaut

XSLT - Yves bekkers - IFSIC32 Règles par défaut (1) Traverser la racine et tous les noeuds « élément » Sortir les feuilles « texte » et les « attributs »

XSLT - Yves bekkers - IFSIC33 Règles par défaut (2) Commentaires et instructions de traitement Ne rien faire

XSLT - Yves bekkers - IFSIC34 Feuille de style minimum <xsl:stylesheet version="1.0" xmlns:xsl= " Traverse tout l’arbre et sort les feuilles (contenu d’élément texte et valeur d’attribut)

XSLT - Yves bekkers - IFSIC35 Génération de contenu Résultat littéral ou non ?

XSLT - Yves bekkers - IFSIC36 Méthodes de génération de contenu Deux méthodes de génération de contenu : 1) Résultat litéral 2) Résultat non litéral (validation possible de la feuille de style)

XSLT - Yves bekkers - IFSIC37 Valeur d'attribut par résultat littéral évalué Évaluation d’expression xpath en accolades dans les valeurs d’attribut Arbre en entrée Template En sortie

XSLT - Yves bekkers - IFSIC38 Résultat non littéral Arbre en entrée Template En sortie

XSLT - Yves bekkers - IFSIC39 Parcours itératifs

XSLT - Yves bekkers - IFSIC40 Élement Itération sur une ensemble de nœuds

XSLT - Yves bekkers - IFSIC41 Deux styles de programmation Récursive Itérative Attribut select donne l’ensemble de nœuds vers lequel on se déplace

XSLT - Yves bekkers - IFSIC42 Élément Sortir les commentaires à l’identique

XSLT - Yves bekkers - IFSIC43 Élément Sortir les instructions de traîtement à l’identique

XSLT - Yves bekkers - IFSIC44 Conflits de Règles Règle implicite de priorité –La règle la plus sélective gagne –Parmi 2 templates de même sélectivité, le dernier dans la feuille de style gagne Exemple –nom est plus sélectif que /|* –note[clé] est plus sélectif que note est plus sélectif que

XSLT - Yves bekkers - IFSIC45 Les modes Permet de déclarer plusieurs règles pour un même élément Chaque règle traite l’élément différemment

XSLT - Yves bekkers - IFSIC46 Attributs mode Dans un élément apply-templates Dans un élément template <xsl:template match="carteDeVisite" mode="passe1">... Attention un apply-templates n’hérite pas du mode du template englobant

XSLT - Yves bekkers - IFSIC47 Autres outils

XSLT - Yves bekkers - IFSIC48 Élément Conditionnelle, Génère une virgule après chaque nom sauf pour le dernier En sortie Bekkers, Bartold, Letertre, Apolon

XSLT - Yves bekkers - IFSIC49 Élément Conditionnelle à choix multiple

XSLT - Yves bekkers - IFSIC50 Déclaration de variable 1 Déclaration de variable 2 #FFFFCC Référence à une variable

XSLT - Yves bekkers - IFSIC51 XSL est un langage à assignation unique Les « variables » sont des constantes à la manière des constantes #define de C Une variable ne peut être réaffectée La visibilité d’une variable est son élément père Une variable peut en cacher une autre

XSLT - Yves bekkers - IFSIC52 Initialisation conditionnelle Exemple 3 5 if (niveau > 20) code = 3; else code = 5; JavaXSLT

XSLT - Yves bekkers - IFSIC53 Les espaces Les espaces non significatifs dans l’arbre xsl ne sont pas produits et ont le même effet

XSLT - Yves bekkers - IFSIC54 Élément Caractères espaces, TAB, CR, LF en sortie

XSLT - Yves bekkers - IFSIC55 Attribut disable-output-escaping Pour sortir des caractères spéciaux tels quel (sans être sous forme d’entité) Valeurs possible : yes ou no (par défaut) où –Dans un élément xsl:text –Dans un élément xsl:value-of Attention : cela peut produire des documents qui ne sont pas bien formés Utiles pour produire des pages ASP ou JSP

XSLT - Yves bekkers - IFSIC56 Générer une section CDATA - 1 Vous voulez générer ceci Solution 1 [bla ] ]>

XSLT - Yves bekkers - IFSIC57 Générer une section CDATA - 2 Vous voulez générer ceci Solution 2 –Mettre une déclaration – –Et vous obtenez le résultat voulu !

XSLT - Yves bekkers - IFSIC58 Générateur d’identificateur generate-id(expr) génère automatiquement un identificateur XML spécifique au premier nœud de l’ensemble de nœuds donné par l’expression generate-id() génère automatiquement un identificateur XML spécifique au nœud courant

XSLT - Yves bekkers - IFSIC59 Fonction generate-id() Propriétés –L’ordre alphabétique des identificateurs est le même que l’ordre des nœuds dans le document –Si generate-id(A) est un préfixe de generate-id(B), alors A est un ancêtre de B –L’identificateur est unique au sein de tous les documents ouverts durant l’exécution.

XSLT - Yves bekkers - IFSIC60 Une identification par nœud html body head h1ptable tr x1 x11x12 x121x122x123 generate-id(/html/body/table) = x123

XSLT - Yves bekkers - IFSIC61 Seconde partie Modularité Tri Procédures (Templates nommés) –Appel récursif et passage de paramètres Indexation par clé

XSLT - Yves bekkers - IFSIC62 Modularité

XSLT - Yves bekkers - IFSIC63 Modularité des documents sources Document composé de plusieurs documents chap1.xml chap2.xml chap3.xml Utiliser la fonction document() <xsl:apply-templates select="document(.)/*"/>

XSLT - Yves bekkers - IFSIC64 Fonction document Fonction xslt:document(xpath1[,xpath2]) –Fixe le document de sortie vers celui identifié par l’URI. L’expression xpath1 est évaluée et son résultat est convertit en une chaîne interprétée comme une URI –La syntaxe des URI acceptables n’est pas fixée par la norme. Il faut consulter la documentation du concepteur du processeur XSLT utilisé pour la connaître Base d’adressage –Si une l’expression xpath2 est présente, le répertoire du document source dans lequel a été lu le nœud référencé par xpath2 sert de base à l’URI. –Si une l’expression xpath2 est absente, la base de l’URI est le répertoire dans lequel a été lue la feuille de style

XSLT - Yves bekkers - IFSIC65 Base d’adressage Si le document source n’a pas été lu sur un fichier mais construit en mémoire par un programme, on dispose éventuellement d’un moyen de fixer la base des URI par programme. –Il faut un processeur xslt qui le permette –Par exemple avec Java 1.5 qui implémente la norme JAXP 1.3 et Saxon qui la respecte aussi on peut créer un document source en interne et fixer sa base comme suit DocumentSource source = new DocumentSource(inputDoc); source.setSystemId(rootPath);

XSLT - Yves bekkers - IFSIC66 Elément Modularité des feuilles de style <xsl:stylesheet version="1.0" xmlns:xsl=" <xsl:output method="xml" version="1.0" encoding="ISO " indent="yes"/>...

XSLT - Yves bekkers - IFSIC67 Elément Modularité des documents en sortie Preface Version 1.1 de XSLT –Seul Saxon l’implémente actuellement

XSLT - Yves bekkers - IFSIC68 Trier

XSLT - Yves bekkers - IFSIC69 Élément Permet de trier l'ensemble des nœuds sélectionnés par les instructions avant de les traîter

XSLT - Yves bekkers - IFSIC70 Exemple XXX ccc zzz ddd ooo

XSLT - Yves bekkers - IFSIC71 Exemple (suite) ccc ddd ooo XXX zzz

XSLT - Yves bekkers - IFSIC72 Tri sur plusieurs critères Trier d’abord par noms puis par prénoms

XSLT - Yves bekkers - IFSIC73 Définition de fonctions

XSLT - Yves bekkers - IFSIC74 Fonction = templates nommés Déclaration de fonction... Appel de fonction

XSLT - Yves bekkers - IFSIC75 Passage de paramètres Déclaration (paramètre formel)... utilisation de p... <xsl:with-param name="p" select="$p+1"/> Obtenir la valeur d’un paramètre select="$p" Valeur par défaut

XSLT - Yves bekkers - IFSIC76 Calcul de la profondeur d'un élément Nom de la fonction max Paramètre $x un ensemble de nœuds … (c.f. page suivante) 0

XSLT - Yves bekkers - IFSIC77 Cas où $x est non vide $prof2"> Profondeur max du premier Profondeur max des suivants Choix du maximum

XSLT - Yves bekkers - IFSIC78 Mettre sous forme d’arbre En entrée titre 1 bla bla 1 bla bla 2 bla bla 3 titre 2 bla bla 4 bla bla 5 bla bla 6 titre 1 bla bla 1 bla bla 2 bla bla 3 titre 2 bla bla 4 bla bla 5 bla bla 6 En sortie

XSLT - Yves bekkers - IFSIC79 Mettre sous forme d'arbre (bis) Itération sur tous les éléments Sélection des frères qui suivent

XSLT - Yves bekkers - IFSIC80 Mettre sous forme d'arbre (ter) <xsl:with-param name="nds" select="$nds[position()!=1]"/> Appel récursif sur les autres frères après traitement du premier Traitement du premier frère si c’est un élément par Arrêt de la récursivité si le premier frère est un h1

XSLT - Yves bekkers - IFSIC81 Paramètrer une feuille de style Les paramètres descendants directs d’un élément sont autorisés... On peut passer une valeur dans la ligne de commande java... dir=monDir

XSLT - Yves bekkers - IFSIC82 déclaration Utilisation Exemple … <Dernière mise à jour le,. …

XSLT - Yves bekkers - IFSIC83 Mise au point Élément code = Trace en sortie dans la fenêtre de commande code = 25

XSLT - Yves bekkers - IFSIC84 Les clés Un mécanisme d'indexation des documents

XSLT - Yves bekkers - IFSIC85 Les clés Un mécanisme d’indexation dynamique –Permet d'indexer des nœuds de l’arbre d’entrée sans placer d'attribut ID –Les déclarations apparaissent dans la feuille de style et non dans le document à transformer (pas d'attribut ID) Associe des paires à des nœuds

XSLT - Yves bekkers - IFSIC86 Déclaration de clé Toute déclaration doit être au premier niveau de la feuille de style <xsl:key name="id" match="XPath motif" use="XPath value"/> Les trois attributs sont obligatoires –Le nom de la clé est id. –L'ensemble de nœuds à décorer (les nœuds filtrés) résulte de l'évaluation de l'expression XPath motif, –Chaque nœud filtré est décoré par un ensemble de paires (clé,valeur) où les valeurs résultent de l'évaluation de XPath value (voir ci-après)

XSLT - Yves bekkers - IFSIC87 Valeur(s) des clés Pour chaque nœud filtré l'ensemble des valeurs à lui associer est donné par l'attribut use="XPath value" –XPath value est évalué localement à chaque nœud filtré –Si XPath value retourne un ensemble de nœuds, chaque nœud résultat est converti en une chaîne qui donne une valeur (le nœud filtré est indexé par plusieurs paires !) –Tout autre résultat est converti en une chaîne qui donne une valeur unique

XSLT - Yves bekkers - IFSIC88 Exemple de déclaration 1.Déclare une clé appelée 'carteAvecNote' 2.Y associe tous les éléments ayant un fils 3.Associe à chaque élément filtré un indexe qui est une paire 4.Si l'éléments comportait plusieurs noms, chaque nom donnerait une paire

XSLT - Yves bekkers - IFSIC89 Utilisation – la fonction key() Appel key(nom,expr) –L'argument nom est un nom de clé défini par un élément –L'argument expr est une expression XPath Si expr retourne un ensemble de nœuds, chaque nœud résultat est converti en une chaîne qui donne une valeur de clé (la recherche peut porter sur plusieurs clés) Tout autre résultat est converti en une chaîne qui donne une valeur de clé –Exemple key('carteAvecNote',’bekkers’) Retourne un ensemble de nœuds appartenant au document courant –Il s'agit des éléments qui sont indexés par la paire

XSLT - Yves bekkers - IFSIC90 Propriétés des clés Les valeurs de clé ne sont pas uniques –La même paire peut identifier plusieurs nœuds Chaque nœud filtré peut avoir zéro, une ou plusieurs paire qui l'indexe La fonction key() retourne un ensemble de nœuds qui sont tous localisés dans le même document XML

XSLT - Yves bekkers - IFSIC91 Exemple1 Soit le document XML Problème : “Retrouver les époux pour les femmes” –remarque : ils ne sont pas codés directement Solution –Déclaration d’une référence –Utilisation de la référence <xsl:apply-templates

XSLT - Yves bekkers - IFSIC92 Exemple2 – explorer une pièce de théâtre Soit une pièce de théâtre structurée comme suit PLAY PERSONAE PERSONA ACT SCENE SPEECH/SPEAKER SCENE SPEECH/SPEAKER ACT SCENE SPEECH/SPEAKER …

XSLT - Yves bekkers - IFSIC93 Un personnage Extrait du début d'un acte liste de personnages de la pièce The Tragedy of Othello, the Moor of Venice … Dramatis Personae DUKE OF VENICE BRABANTIO, a senator. Other Senators. GRATIANO, brother to Brabantio. LODOVICO, kinsman to Brabantio. OTHELLO, a noble Moor in the service of the Venetian state. …

XSLT - Yves bekkers - IFSIC94 discours Extrait du début d'un acte vue d’un discours ACT I SCENE I. Venice. A street. Enter RODERIGO and IAGO RODERIGO Tush! never tell me; I take it … That thou, Iago, who hast had … As if the strings were thine, … IAGO 'Sblood, but you will not hear me:

XSLT - Yves bekkers - IFSIC95 Présenter les personnages

XSLT - Yves bekkers - IFSIC96 Déclaration des indexes <xsl:key name="scene" match="/PLAY/ACT/SCENE" use="SPEECH/SPEAKER"/> –Chaque élément est indexé par les noms de personnage qui y apparaissent Déclaration

XSLT - Yves bekkers - IFSIC97 Graphe décoré par les indexes

XSLT - Yves bekkers - IFSIC Utilisation //SCENE[SPEECH/SPEAKER=$speaker] Est équivalent à Extraction du nom

XSLT - Yves bekkers - IFSIC99 Les sources de l'exemple La dtd –~general/xml/XSL/keys/play.dtd~general/xml/XSL/keys/play.dtd Othello en XML –~general/xml/XSL/keys/othello.xml~general/xml/XSL/keys/othello.xml La feuille de style –~general/xml/XSL/keys/keys.xslt~general/xml/XSL/keys/keys.xslt Le résultat HTML –~general/xml/XSL/keys/personnages.html~general/xml/XSL/keys/personnages.html

XSLT - Yves bekkers - IFSIC100 Conclusion sur XSLT

XSLT - Yves bekkers - IFSIC101 XSLT qu'est-ce que c'est ? Un langage déclaratif (Turing complet !) –avec une syntaxe ésotérique ! Utilise une technique de filtrage à base de motifs (patterns) et de modèles (template) décrits dans des règles (template rule) pour transformer des arbres Bien plus puissant que CSS … Conclusion Un vrai langage de programmation –Les programmes XSLT sont plus que des feuilles de style !

XSLT - Yves bekkers - IFSIC102 Limites de CSS par rapport à XSLT CSS ne permet pas de visualiser les attributs CSS ne permet pas de réarranger l'information CSS n'offre pas de vrai moyen de faire des calculs La cible ne peut pas être un autre dialecte XML (CSS est un outil de présentation)

XSLT - Yves bekkers - IFSIC103 Documentation XSLT La documentation de Saxon constitue une excellente documentation pour XSLT –Elle est précise, concise … index.html –N'hésitez pas à la consulter, même si vous n'utilisez pas Saxon

XSLT - Yves bekkers - IFSIC104 Outils

XSLT - Yves bekkers - IFSIC105 Extensions à la norme Saxon –Elements xslt : éléments sql,... –Functions xpath : formatage de date, conversions de valeurs, évaluations xpath, try/catch... EXSLT : une librairie portable en java (conseillée par saxon) –Fonctions mathématiques, expressions régulières, random, heures-dates, chaînes, ensembles... –Site de chargement :

XSLT - Yves bekkers - IFSIC106 Lancer une transformation XSLT Nombreux moyens 1.En ligne de commande 2.En Java, en utilisant l’ API JAXP 1.1, connu aussi comme TrAX (paquetage javax.xml.transform) 3.Par la tâche du processeur Ant –Sous Eclipse –En ligne de commande 4.À l'aide XMLSpy 5.À l'aide MS Internet Explorer

XSLT - Yves bekkers - IFSIC107 Éditer xslt, xpath Eclipse (nombreux plugins) –WTP, Oxygen, XmlBuddy, NiceXsl, OrangeVoltXsl,... XmlSpy StylusStudio Vex Jedith

XSLT - Yves bekkers - IFSIC108 En ligne de commande Lancer Saxon7 en ligne de commande java net.sf.saxon.Transform [options] source-document stylesheet [ params...]

XSLT - Yves bekkers - IFSIC109 Utiliser l’ API JAXP 1.1 (TrAX) public static void apply(String in, String out, String xslt) throws FileNotFoundException, TransformerException { // Créer une fabrique de transformer TransformerFactory factory = TransformerFactory.newInstance(); // Utiliser la fabrique pour créer un template // contenant la feuille de style Templates template = factory.newTemplates(new StreamSource( new FileInputStream(xslt))); // Utiliser le template pour créer un transformateur Transformer xformer = template.newTransformer(); // Préparer l'entrée et la sortie Source source = new StreamSource(new FileInputStream(in)); Result result = new StreamResult(new FileOutputStream(out)); // Transformer xformer.transform(source, result); }

XSLT - Yves bekkers - IFSIC110 Effectuer la transformation par le navigateur Mettre l’instruction de traitement suivante en entête du document XML Faire lire le document XML par le navigateur IExplorer

XSLT - Yves bekkers - IFSIC111 Tâche de Ant <style in="${prefixe}.xml" out="${prefixe}.svg" style="${xslt.dir}/xml2svg.xslt">

XSLT - Yves bekkers - IFSIC112 Ant et XSLT Ant utilise par défaut son propre processeur XSLT On peut lui changer ce processeur, voici un exemple de lancement de Ant avec Saxon pour processeur XSLT java -cp \ myjar.jar;.;saxon.jar;ant.jar;jaxp.jar \ -Djavax.xml.transform.TransformerFactory=\ com.icl.saxon.TransformerFactoryImpl \ -Djavax.xml.parsers.SAXParserFactory=\ org.apache.crimson.jaxp.SAXParserFactoryImpl \ org.apache.tools.ant.Main %1 %2 %3 %4 %5 %6 %7 %8 %9

XSLT - Yves bekkers - IFSIC113 Conclusion Oui –XSLT est un vrai langage de programmation –XSLT n’a pas son équivalent pour la transformation d’arbre Mais –La mise au point de programmes XSLT peut s’avérer « délicate » –La maintenabilité est discutable

XSLT - Yves bekkers - IFSIC114 Des références XSLT Programmer’s Reference Micheal H. Kay, Wrox Press Saxon : Michael Kay très bonne documentation en ligne Xalan, Cocoon : projet Apache