Tutoriel XSLT F. Sajous ERSS – 01/04/2005.

Slides:



Advertisements
Présentations similaires
Données structurées et XML
Advertisements

HTML Abda Anne Plan Présentation Structure Texte Listes Images Liens Tableaux Formulaires.
Introduction aux Web Services Partie 1. Technologies XML
1 3.Langage XSL = XSLT + XSL-FO transformationFormatage.
Transformation de documents XML
Story-board version 1.1 Statut : à valider Rédacteur : Nicole Djuissi
Introduction à XSLT Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée.
Académie de Créteil - B.C.1. 2 Pour information : Une action est lexpression temporelle Une action est lexpression temporelle (date début et date finde.
JXDVDTEK – Une DVDthèque en Java et XML
Données structurées et XML
Présentation de l’application « Livret personnel de compétences »
Cours 2 : Transformation de documents XML
le langage les éléments
Les fonctions de XPath et XSLT
Domaines nominaux XSLT
Autorisations Utilisation eCATT
TP 3-4 BD21.
Manipulation d’XML avec XSL
Interface Homme Machine IHM Pro
Gestion de la communication par établissement sur le site ville
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
Introduction aux Web Services Partie 1. Technologies HTML-XML
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Page 1 Introduction à ATEasy 3.0 Page 2 Quest ce quATEasy 3.0? n Ensemble de développement très simple demploi n Conçu pour développer des bancs de test.
XSLT XSL : XSL : formatting objects - langage de formattage; XSLT : langage de transformation bas sur la spcificatioon Xpath (langage dadressage dans des.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
UNIVERSITE CHOUAIB DOUKKALI Département des mathématiques
La haute tour sombre 3 Des actions
II. Chaînage, SDD séquentielles
Administration de SharePoint
Rédacteur 1. Sommaire Connexion Interface SPIP Menu SPIP Rédiger un article Interface de création dun article Fonctionnalités de base Statut de larticle.
Xml/xslt : Extensible Stylesheet Language Transformation réalisé par: saÏd NAÏM.
Définition d’un maillon de liste
Configuration de Windows Server 2008 Active Directory
L’utilisation des bases de données
A la découverte de la bureautique et des fichiers.
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.
Guide à l'usage des élèves
Arbres Rouge noir Démo : INF3105 Structures de données et algorithmes
Xpath XML Path language par Yves Bekkers
XSLT Langage de transformation darbre par Yves Bekkers.
Rappel (très) succint d’éléments techniques (XML, DTD, XSL, PHP)
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.
1. 2 PLAN DE LA PRÉSENTATION - SECTION 1 : Code HTML - SECTION 2.1. : CSS (Méthode 1) - SECTION 2.2. : CSS (Méthode 2) - SECTION 3 : JavaScript - SECTION.
XSLT : trier et mettre en valeur le contenu d’un document XML
1 Couplage dun langage de contrôle de formatage avec un système de formatage existant DEA ISC : 1 avril 2003 Fateh Boulmaiz
Projet de Master première année 2007 / 2008
Conversion de fichiers
Support des connaissances TP2 XSL-T
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
XML Plan du cours Introduction au fichier XML
Le Langage XML Belkhir Abdelkader Laboratoire LSI USTHB
1 Modèle pédagogique d’un système d’apprentissage (SA)
Le langage XHTML 420-S4W-GG Programmation Web Client
Les outils de base : XPath, XSL, XLink, XForms
Création et présentation d’un tableau avec Word 2007
Algorithmique Les structures Rappel L'enchaînement séquentiel
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.
KIWAPP IS A B2B FULL-STACK APP-MANAGEMENT TOOL KIWAPP EN QUELQUES ETAPES Octobre 2014.
Le langage XML.
Menu Structure : Divisions Diffusion Nationale TOULOUSE – Décembre 2008 Structure et Services « STS » Menu Structures : Divisions.
Programmation Web : Introduction à XML
Technologies web et web sémantique TP3 - XML. XML eXtensible Markup Language (langage extensible de balisage) – Caractéristiques: méta-langage = un langage.
Copyright © 2005 Yves MARCOUX1 Concepts XML de base Yves MARCOUX EBSI - Université de Montréal.
MJ. Blin et M. CsernelPoleInfo31 XML et ses environnements Documents XML bien formés Prologue Arbre d'éléments Attributs Commentaires Entités internes.
Soutenance du mémoire de synthèse
Module : Langage XML (21h)
eXtensible Markup Language. Généralités sur le XML.
XSLT. Les documents XML peuvent avoir dans leur prologue une instruction de traitement xml-stylesheet. Cette instruction de traitement indique au navigateur.
Transcription de la présentation:

Tutoriel XSLT F. Sajous ERSS – 01/04/2005

Plan XSLT Advanced Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced

Rappel superflu : XML Exemple : Morphalou <?xml version="1.0" encoding="iso-8859-1"?> <lexicalDatabase> <title level="resource">Morphalou : Lexique morphologique</title> <lexicalEntry lemma="linguistique" grammaticalCategory="commonNoun" grammaticalGender="feminine"> <inflectionGroup> <inflection orthography="linguistique" grammaticalNumber="singular"/> <inflection orthography="linguistiques" grammaticalNumber="plural"/> </inflectionGroup> </lexicalEntry> </lexicalDatabase> en-tête texte balise de début @ribut élément vide balise de fin

XPath : rappel... superflu ? langage pour adresser des parties de documents XML parties de documents = ensemble de noeuds de la structure arborescente sélection par type et la valeur des éléments type et la valeur des attributs place occupée dans l'arbre typologie des voisins, parents, descendants... fonctions XPath exemples //inflection[@orthography='linguistique']/@grammaticalNumber //inflection[@orthography='linguistique']/../../@grammaticalCategory //lexicalEntry[count(.//inflection[@orthography=../../@lemma]) = count(.//inflection)]

XSLT : acteurs XSL HTML XML source X PDF Texte ... Processeur XSLT comment quoi XML source X HTML PDF Texte ... à partir de quoi Processeur XSLT Processeur XSLT XML résultat sériali- sateur

Sélection + Transformation / règles de transformation XML filtrage (patrons ou templates) XML résultat

Et concrètement : les templates XML <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> <xsl:template match="expression xpath1"> <!-- construire sortie correspondant à l'élément (aux éléments filtré(s) --> </xsl:template> <xsl:template match="expression xpath2"> <!-- construire sortie correspondant à l'élément (aux éléments) filtré(s) --> </xsl:stylesheet> en-tête racine patrons XML

Templates : un exemple XML source Résultat souhaité Résultat obtenu <analyse> <sent> <snum>1</snum> <token>Il</token> <token>était</token> <token>une</token> <token>fois</token> </sent> ... </analyse> Résultat souhaité <analyse> <sent> <taggertoken form="Il" pos="PRO"/> <taggertoken form="était" pos="VER:sg"/> <taggertoken form="une" pos="DET:femi:sg"/> <taggertoken form="fois" pos="NOM:femi:sg"/> ... </sent> <sent> ... </sent> </analyse> <xsl:template match="sent"> <sent><snum> <xsl:value-of select="position()"/></snum></sent> </xsl:template> <xsl:template match="taggertoken"> <token><xsl:value-of select="@form"/></token> XSL <sent> <snum>1</snum> </sent> ... Résultat obtenu

Moteur !  template correspondant ? Non ! Oui ! analyse sent sent ... taggertoken form="il" pos="PRO" taggertoken form="était" pos="VER:sg" taggertoken form="une" pos="DET:femi:sg" ... <xsl:template match="sent"> <snum><xsl:value-of select="position()"/></snum> </xsl:template> <xsl:template match="taggertoken"> ... <xsl:template match="sent"> ... </xsl:template> <xsl:template match="taggertoken"> ... <sent> <snum>1</snum> </sent>

Pour éviter les infanticides... XML source <sent> <snum>1</snum> <token>Il</token> <token>était</token> <token>une</token> <token>fois</token> </sent> ... Résultat <analyse> <sent> <taggertoken form="Il" pos="PRO"/> <taggertoken form="était" pos="VER:sg"/> <taggertoken form="une" pos="DET:femi:sg"/> <taggertoken form="fois" pos="NOM:femi:sg"/> ... </sent> ... </sent> </analyse> <analyse> </analyse> <xsl:template match="sent"> <sent><snum> <xsl:value-of select="position()"/></snum> <xsl:apply-templates/></sent> </xsl:template> <xsl:template match="taggertoken"> <token><xsl:value-of select="@form"/></token> <xsl:template match="/"> <analyse> <xsl:apply-templates/> </analyse> </xsl:template> ...et les parenticides ! XSL

Patrons par défaut réalisons un sommaire... Résultat <livre> <chapitre> <titre>XML</titre> <contenu>XML : un lang. de balises extensibles...</contenu> </chapitre> <chapitre> <titre>XSLT</titre> <contenu>XSLT est un lang. de tranforma°...</contenu> <chapitre/> </livre> <xsl:template match="titre"> <xsl:value-of select="position()"/> <xsl:value-of select="titre"/> </xsl:template> Résultat 1 XML XML : un lang. de balises extensibles.. 2 XSLT XSLT est un lang. de tranforma°... Le processeur XSLT pacourt l'arbre : - "en profondeur d'abord" (racine vers feuilles) - puis de gauche à droite Pour chaque élément rencontré : -  patron défini : on l'applique - patron défini :  patron par défaut ! 

Défaut des patrons 3 patrons par défaut : éléments textuels : générer le texte en sortie commentaires : ignorer autres noeuds : appliquer les patrons (définis ou par défaut) aux enfants <livre> <chapitre> <titre>XML</titre> <contenu>XML : un lang. de balises extensibles...</contenu> </chapitre> <chapitre> <titre>XSLT</titre> <contenu>XSLT est un lang. de tranforma°...</contenu> <chapitre/> </livre> <xsl:template match="titre"> <xsl:value-of select="position()"/> <xsl:value-of select="."/> </xsl:template> 1 XML XML : un lang. de balises extensibles... 2 XSLT XSLT est un lang. de tranforma°...

En attendant le grand soir... <livre> <chapitre> <titre>XML</titre> <contenu>XML : un lang. de balises extensibles...</contenu> </chapitre> <chapitre> <titre>XSLT</titre> <contenu>XSLT est un lang. de tranforma°...</contenu> <chapitre/> </livre> XML 1 XML 2 XSLT Résultat attendu <xsl:template match="titre"> <xsl:value-of select="position()"/> <xsl:value-of select="."/> </xsl:template> <xsl:template match="contenu"> </xsl:template> + template défini pour contenu qui génère une sortie vide <xsl:template match="/"> <xsl:for-each select="//titre"> <xsl:value-of select="position()"/> <xsl:value-of select="."/> </xsl:for-each> </xsl:template> ou template défini pour la racine et... structure de contrôle... <xsl:template match="*/text()"> </xsl:template> ou (joue sur les priorités)

Priorités du patronat... règle du "plus spécifique" <livre> <chapitre> <titre>XML</titre> <contenu>XML : un lang. de balises extensibles...</contenu> </chapitre> <chapitre> <titre>XSLT</titre> <contenu>XSLT est un lang. de tranforma°...</contenu> <chapitre/> </livre> <xsl:template match="titre"> <xsl:value-of select="position()"/> <xsl:value-of select="."/> </xsl:template> <xsl:template match="*/text()"> </xsl:template> règle du "plus spécifique" MAIS ! si on ajoute <xsl:template match="*"> </xsl:template> <xsl:template match="titre"> Titre : <xsl:value-of select="."/> </xsl:template> <xsl:template match="/*/*[position()=1]"> Pos1 : <xsl:value-of select="."/> </xsl:template> génère une sortie vide ? * et / "matchent" règle du "plus englobant" élément rencontré en 1er c'est toujours les plus gros patrons qui gagnent !

Priorités du patronat... ? <livre> <chapitre> <titre>XML</titre> <contenu>XML : un lang. de balises extensibles...</contenu> </chapitre> <chapitre> <titre>XSLT</titre> <contenu>XSLT est un lang. de tranforma°...</contenu> <chapitre/> </livre> <xsl:template match="titre"> <xsl:value-of select="position()"/> <xsl:value-of select="."/> </xsl:template> <xs:template match="*/text()"> </xsl:template> <xsl:template match="titre" priority="2"> Titre : <xsl:value-of select="."/> </xsl:template> <xsl:template match="/*/*[position()=1]" priority="1"> Pos1 : <xsl:value-of select="."/> </xsl:template> <xsl:template match="titre"> Titre : <xsl:value-of select="."/> </xsl:template> <xsl:template match="/*/*[position()=1]"> Pos1 : <xsl:value-of select="."/> </xsl:template> ?

Structures de contrôles <xsl:if test='fct xpath booléenne'> <!-- instr. si vrai --> </xsl:if> Conditionnelle Itération <xsl:for-each select="xpath1"> <xsl:sort select="xpath2" order="ascending | descending"/> <!-- instruction --> </xsl:for-each> pas de else ! <xsl:choose> <xsl:when test="cond1"> <!-- instr si con1 vraie --> </xsl:when> <xsl:when test="cond2"> <!-- instr si cond1 fausse et cond2 vraie --> <xsl:otherwise> <!-- instr si toutes les cond sont fausses --> </xsl:otherwise> </xsl:choose> Choix multiple (switch case default) ● xpath : absolu ou relatif à l'élément courant ● une liste de noeuds sélecionnés à chaque itération, un noeud devient l'élément courant ● instruction sort facultative mais non nécessairement unique

Action ! Lancer <oXygen/> 5.1 Fichiers XML et XSL dans C:\ERSS-XSLT Exercices/Session 1 Avant de partir, SVP : supprimer le répertoire C:\ERSS-XSLT désinstaller <oXygen/> (panneau de configuration, Ajout/Suppression de programmes)

En vrac... Quelques éléments pour aller plus loin

Variables <xsl:variable name="nom_var" [ instr XSLT dont le résultat deviendra la valeur de la variable] </xsl:variable> Une fois une variable définie, elle est constante !!! (i = i + 1 impossible) <xsl:value-of select='$nom_var'/> sortie HTML : <a href='{$nom_var}'>lien</a>

Créer des éléments XML <xsl:element name="nom élément"> <xsl:attribute name="nom_attr"> [ instructions XSLT ] </xsl:attribute> [ instructions XSLT ] </xsl:element>

Copier des éléments XML <xsl:copy> [ instructions XSLT ] </xsl:copy> Cette instruction ne copie que les balises ouvrantes et fermantes de l'élément courant (ne copie ni attributs, ni enfants) <xsl:copy> [ instructions XSLT ] <xsl:apply-templates/> </xsl:copy>

Copier des éléments XML (2) <xsl:copy-of select="XPath"> [ instructions XSLT ] </xsl:copy> copie toute la structure de l'élément sélectionné (y compris attributs et descendance) utilisation conjointe avec xsl:copy : <xsl:copy> <xsl:copy-of select="@*"/> [ instructions XSLT ] <xsl:apply-templates/> </xsl:copy>

Plusieurs documents XML Pour accéder à un docuement autre que celui en cours de transformation : document('cheminFichier')/XPath <xsl:value-of select="document('autre')/monElt[@id='63']"> XSL XML (autre) <...> ... <monElt id='63'> </monElt> XML source Résultat Processeur XSLT