XPATH XSLT. Objectif du cours. Plan. XPath. Exemples d utilisations. Localisation de documents XML XPATH XSLT



Documents pareils
XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

Thierry BOULANGER. par la pratique. Bases indispensables Concepts et cas pratiques XML. 3 ième édition. Nouvelle édition

Module BDWEB. Maîtrise d informatique Cours 9 - Xquery. Anne Doucet. anne.doucet@lip6.fr

Faculté de Génie Chaire industrielle en infrastructures de communication. La technologie XML. Wajdi Elleuch

Langage HTML (2 partie) <HyperText Markup Language> <tv>lt La Salle Avignon BTS IRIS</tv>

Document Object Model (DOM)

<?xml version="1.0" encoding="iso " standalone="yes"?>

Programmation Internet Cours 4

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

Master d Informatique Corrigé du partiel novembre 2010

SII Stage d informatique pour l ingénieur

Les outils de création de sites web

4. SERVICES WEB REST 46

Introduction aux concepts d ez Publish

Gestion Électronique de Documents et XML. Master 2 TSM

Outils logiciels pour l'ingénierie documentaire

Autour du web. Une introduction technique Première partie : HTML. Georges-André SILBER Centre de recherche en informatique MINES ParisTech

PIVOT. Pivot/Querier Documentation technique XML/XSD/XSLT

BIRT (Business Intelligence and Reporting Tools)

XML, PMML, SOAP. Rapport. EPITA SCIA Promo janvier Julien Lemoine Alexandre Thibault Nicolas Wiest-Million

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

Production de documents avec XSLT. Production de documents p.1/??

Programmation des Applications Réparties. Parsers XML DOM et SAX

ECLIPSE ET PDT (Php development tools)

Chapitre IX. L intégration de données. Les entrepôts de données (Data Warehouses) Motivation. Le problème

Server-side XML. PAS FINI... mais ok pour un début. Originaux. Auteurs et version. Prérequis: Java de base, servlets, GUI et XML

BES WEBDEVELOPER ACTIVITÉ RÔLE

FileMaker Server 11. Publication Web personnalisée avec XML et XSLT

Evolution et architecture des systèmes d'information, de l'internet. Impact sur les IDS. IDS2014, Nailloux 26-28/05/2014

WordPress Référencement naturel (SEO) Optimiser. son référencement. Daniel Roch. Préface d Olivier Andrieu

Internet. DNS World Wide Web. Divers. Mécanismes de base Exécution d'applications sur le web. Proxy, fire-wall

Petite définition : Présentation :

Les services usuels de l Internet

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

1 Modélisation d être mauvais payeur

BASE DE DONNÉES XML NATIVE

TIC. Réseau informatique. Historique - 1. Historique - 2. TC - IUT Montpellier Internet et le Web

TP1. Outils Java Eléments de correction

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

XML : documents et outils

INTRODUCTION AU CMS MODX

Programmation Web. Madalina Croitoru IUT Montpellier

Introduction à Microsoft InfoPath 2010

les techniques d'extraction, les formulaires et intégration dans un site WEB

Gestion documentaire (Extraits du CCI version 1.2)

Formation HTML / CSS. ar dionoea

WordPress Référencement naturel (SEO) Optimiser. son référencement. Daniel Roch. Préface d Olivier Andrieu

données en connaissance et en actions?

Livre Blanc WebSphere Transcoding Publisher

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

BASE DE DONNÉES XML NATIVE

Installation de DocBook sur un système Linux

Design et implémentation d un logiciel de validation et de génération de configurations réseaux

TP 5 Les CMS, la forme et le fond Internet et Outils (IO2)

Présentation du langage et premières fonctions

THEME PROJET D ELABORATION D UNE BASE DE DONNEES SOUS LE SERVEUR MYSQL

HMTL. Exemple de fichier HTML. Structure d un document HTML. Exemple de fichier HTML. Balises HTML. IFT1147 Programmation Serveur Web avec PHP

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Devenez un véritable développeur web en 3 mois!

Système de gestion de contenu

SP1 : Intégration d'une vidéo dans une mardi 21/01/2014. page web, fonction du format vidéo et 3 mercredi 22/01/2014

Faculté Polytechnique de Mons. Le processus d Extraction, Transformation et Load (ETL) dans des entrepôts de données XML

Description des pratiques à adopter pour la mise à jour du layout en utilisant le gestionnaire de conception de Sharepoint 2013

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

Module BD et sites WEB

Intégrateur Web HTML5 CSS3

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

Publication sur serveur distant

Modules du DUT Informatique proposés pour des DCCE en 2014/2015

Dans nos locaux au 98 Route de Sauve NÎMES. Un ordinateur PC par stagiaire, scanner, imprimante/copieur laser couleur

L'API DOM : Document Object Model

Adobe Technical Communication Suite 5

HTML. Notions générales

Master Technologies numériques appliquées à l'histoire Deuxième année

ADMINISTRATION DE ADOBE LIVECYCLE MOSAIC 9.5

DevTest Solutions. Référence. Version 8.0

COMMUNICATION TECHNIQUE N TCV060 Ed. 01. OmniVista 4760 Nb de pages : 18 Date : URGENTE NON URGENTE TEMPORAIRE DEFINITIVE

RAPPORT AUDIT SEO. Élaboré à l'attention de : Monsieur Greber Élaboré par : Cédric Peinado

SYSTÈMES D INFORMATIONS

Optimiser moteur recherche

Banque de données d offres & carte web interactive d offres

WEBSEMINAIRE INTRODUCTION AU REFERENCEMENT

WysiUpStudio. CMS professionnel. pour la création et la maintenance évolutive de sites et applications Internet V. 6.x

BD et XML : Exercices

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

.. CSS. Damien Nouvel. Damien Nouvel (Inalco) CSS 1 / 15

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

L'essentiel de XML. Cours XML. Olivier Carton

Ecole Polytechnique de Louvain INGI Fichiers et bases de données

< _155_0>

L annuaire et le Service DNS

XML et Bases de données. Les bases de données XML natives.

L export de SAS vers Excel expliqué à ma fille

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

EXCEL TUTORIEL 2012/2013

La base de données dans ArtemiS SUITE

Manuel d utilisation du site web de l ONRN

Transcription:

Objectif du cours XPATH XSLT Yannick Prié UFR Informatique Université Lyon 1 UE2.2 Master SIB M1 20042005 Xpath syntaxe permettant de désigner des informations dans un arbre XML sous la forme de chemins (paths) XSL XSLT expression en XML de transformations à opérer sur un arbre XML transcodage d un document XML vers un autre présentation de documents XML aux utilisateurs CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 2 Plan XPATH XSLT XPath Spécification W3C Version actuelle : 1.0 (16/11/1999) Objectif : localiser des documents / identifier des sousstructures dans ceuxci Utilisé par d autres spécifications XML XPointer, XQuery, XSLT, CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 3 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 4 Localisation de documents XML La localisation du document XML est prise en charge par une URL Uniform resource locator protocole://adresse/chemin Ressources locales file:///20042005/xmlcm3.ppt Ressources distantes http://www.univlyon1.fr/ http://www710.univ lyon1.fr/~yprie/enseignement/sib/sibue3 bloc4/cm4.67.pdf Exemples d utilisations Ressources locales <!ENTITY ent SYSTEM "file:///c:/ents/ent.xml"> <!ENTITY ent SYSTEM "../folder/ent.xml"> Ressources distantes <!ENTITY ent SYSTEM "http://w3c.org/ents/ent.xml"> <!ENTITY ent SYSTEM "ftp://w3c.org/gifs/pic.gif"> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 5 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 6 1

Repérer des fragments XML Les limites des identificateurs Avec les identificateurs XML Utilisation des attributs identificateurs uniques (type d attribut ID) <link href="../files/detail.xml#part3"> Link to Part 3 </link> <el label="part3"> xml DTD <!ELEMENT el > <!ATTLIST el label ID #REQUIRED> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 7 Les identificateurs ne sont pas suffisants donner un identificateur unique à chaque élément peut être pénible l identité des éléments peut ne pas être connue les identificateurs ne peuvent pas identifier des fragments de texte il peut être peu pratique d identifier des objets en listant tous leurs identificateurs CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 8 Contexte et éléments XML La signification d un élément peut dépendre de son <><> </></> <person><> </></person> Supposons que l on cherche le titre d un livre, pas le titre d une personne Idée exploiter le séquentiel et hiérarchique de XML pour spécifier des éléments par leur (i.e. leur position dans la hiérarchie) exemple : / person/ CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 9 Xpath : principe général Décrire un modèle de chemin dans un arbre XML expression Recupérer les nœuds qui répondent à ce chemin en utilisant l expression résultat de l application de l expression à l arbre XML Une expression sera utilisée et appliquée au sein de différentes syntaxes URL : http://abc.com/getquery?//intro/ XSL : <xsl:pattern match="/"> </xsl:pattern> Xpointer : <link href="./doc.xml#xptr(/intro/)"> Link to introductory </link> <! désignation comme valeur de l attribut href de l élément titre situé dans l élément intro, situé dans l élément, éléments qui se trouvent dans le fichier doc.xml, luimême situé dans le dossier où se trouve le fichier XML en cours > CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 10 (adapté d après le cours de T. Accary) /arbre/nœuds Xpath Dans XML nœud = élément = noeud de l arbre XML Dans Xpath, extension : l arbre contient toutes les information repérables dans ses noeuds de différentes types = noeud racine Noeuds éléments Noeuds attributs Noeuds textes Noeuds instructions de traitement Noeuds commentaires (Noeuds espaces de nom) CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 11 Exemple de référence xmlstylesheet CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 12 2

Version XML Chemin de localisation <?xml version="1.0" encoding="utf8"?> <?xmlstylesheet href="fichier.xsl" type="text/xsl"?> <> < ="" =""></> < =""> <></> </> < =""> <></> <> <></> </> <></> </> </> <! > Les expressions identifient des noeuds par leur position dans la hiérarchie XML Permet de monter/descendre dans la hiérarchie de l arbre XML aller voir les voisins (frères) d un noeud en fait : suivre des axes Un chemin peut être relatif absolu CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 13 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 14 Chemins relatifs Chemins absolus On se place dans le d un noeud A partir de là, on explore l arbre XML, et on garde les noeuds qui vérifient l expression Exemple (ou child::) sélectionnera les fils du noeud courant qui ont le nom '' <> //noeud courant <> </> //Sélectionné <> <> </> //Non sélectionné <> <> </> //Sélectionné </> Expression identique aux chemins relatifs, mais tout chemin absolu commence par '/ signifie qu on part de l élément racine Exemple Trouver tous les éléments '' dans un document // /descendantorself::node()/ CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 16 Chemins à plusieurs étapes Séparer les étapes par des '/' Exemple / (version courte) child::/child:: (version longue) Depuis le noeud courant, on sélectionne d abord, qui devient le courant, puis on sélectionne Notion d étape Xpath Trois composants : Axe sens de parcours des nœuds Filtre type des nœuds retenus Prédicats (on peut les enchaîner) propriétés satisfaites par les nœuds retenus Exemple child::a[@ = "val1"] Remarques Il existe une syntaxe bavarde (verbose) et une syntaxe raccourcie, plus pratique Possibilité de multiples expressions séparées par CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 17 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 18 3

Evaluation d une expression Xpath On part du nœud (ou de la racine), on évalue l étape 1 : récupération d un ensemble de nœuds Pour chacun de ces nœuds il devient le nœud on évalue l étape 2 : récupération d un ensemble de nœuds Pour chacun de ces nœuds CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 19 /child::/child::/attribut:: ///@ : nœud initial xmlstylesheet CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 20 ///@ : Etape 1 ///@ : Etape 2 xmlstylesheet xmlstylesheet CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 21 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 22 ///@ : Etape 3 xmlstylesheet CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 23 Axes : directions à suivre self:: (abrégé :.) child:: (abrégé : rien) attribut:: (abrégé :@) parent:: (abrégé :..) descendant:: (abrégé : //) ancestor:: ancestororself:: following:: followingsibling:: preceding:: precedingsibling:: CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 24 4

Axe self : self::node() Axe child : child::node() xmlstylesheet xmlstylesheet CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 25 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 26 Axe attribute : attribute:: Axe parent : parent:: xmlstylesheet xmlstylesheet CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 27 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 28 Axe descendant : descendant::node() Axe descendantorself : descendantorself::node() xmlstylesheet xmlstylesheet CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 29 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 30 5

Axe ancestor : ancestor::node() Axe ancestororself : ancestororself::node() xmlstylesheet xmlstylesheet CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 31 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 32 Axe preceding : preceding::node() Axe precedingsibling : precedingsibling::node() xmlstylesheet xmlstylesheet CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 33 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 34 Axe following : following::node() Axe followingsibling : followingsibling::node() xmlstylesheet xmlstylesheet CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 35 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 36 6

Filtres Filtrage par le nom Éléments ibuts s de traitement Filtrage par le type Filtrage par le nom Nom connu /// Nom inconnu Utiliser le joker '*' pour tout élément simple A/*/B permet de trouver A/C/B et A/D/B Version longue : child::* Utilisation de plusieurs astérisques, plusieurs niveaux de correspondance attention à contrôler ce qu il se passe nombre de niveaux éléments trouvés CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 37 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 38 Filtrage par le type text() Contenu textuel comment() processinginstruction() de traitement node() Tout type de noeud Quelques exemples // (noeud = ) child::/descendantorself::node()/child::.// (noeud = ) self::node()/descendantorself::node()/child::../ (noeud = ) parent::node()/child:: // (noeud = 2 ème )./* (noeud = ) /comment().//text() (noeud = ) /descendant::node()/@ CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 39 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 40 Filtres avec prédicats Les chemins de localisation ne sont pas forcément assez discriminants peuvent fournir une liste de noeuds On peut filtrer ces listes avec des prédicat le prédicat est indiqué entre crochets '[ ]' Le prédicat le plus simple utilise la fonction position() [position() = 1] //1er item[2] //2eme item Possibilité de combiner les tests avec 'and' et 'or' *[self:: and self::item] Tests sur les positions / texte last() Récupère le dernier frère dans la liste count() Evalue le nombre d items dans la liste child::[count(child::) = 2] id( ) Récupère l identificateur de l élément child::[id("chap1")] string( ) Récupére le texte d un élément en enlevant toutes balises CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 41 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 42 7

Exemples //[@] les nœuds qui ont un attribut //[@= ] les nœuds qui ont un attribut valant ///descendant::text()[position()=1] Le premier nœud de type Text descendant d un // S abrège en ///descendant::text()[1] //[count()=2] Les nœuds qui ont deux enfants de type child::[] Les nœuds qui ont de enfants Prédicat : divers Pour les booléens not(), and, or Pour les numériques <, >,!= +,, *, div, mod number() pour essayer de convertir autres opérateurs : round(), floor(), ceiling() Exemples [not(position() = 1)] [position() = 1 or last()] //node()[number(@) mod 2 = 1] CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 43 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 44 Tests sur les chaînes Possibilité de tester si les chaînes contiennent des souschaînes <>hello there</> [contains(text(), "hello")] <><b>hello</b> there</> [contains(., "hello")] '.' est le noeud courant, et parcourera tous les enfants Tests sur les chaînes (2) startswith(string, pattern) [startswith(., "hello")] string(exp) [contains(.,string("pi"))] stringafter(string, terminator) stringbefore(string, terminator) substring(string, offset, length) CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 45 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 46 Tests sur les chaînes (3) Encore des exemples normalize(string) enlève les espaces en trop translate(string, source, replace) translate(., ";+", ",") concat(strings) stringlength(string) ///child::[child:: or text()] Tout élément fils de ayant au moins un fils ou un fils text /descendant::[attribute:: or @] Tout élément ayant un attribut ou //*[] Tout élément ayant un fils *[self:: or self::p] (dans le de ) Tout élément ou p fils du nœud CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 47 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 48 8

Conclusion Xpath permet de retrouver toutes sortes d information dans les documents XML requêtes transformation : lire une information sous une forme, l écrire sous une autre forme XSL/XSLT Plan XPATH XSLT CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 49 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 50 Qu est ce qu une feuille de style? Ensemble d instructions qui contrôlent une mise en page d un document passage de la partie logique à la partie physique possibilité d utiliser différentes feuilles de style pour des rendus différents à partir d une même source papier, web, téléphone, Spécifications de feuilles de style DSSSL Style and Semantics Specification Language Standard lié à SGML pour la présentation et la conversion de documents CSS Cascading Style Sheet Syntaxe simple pour assigner des styles à des éléments XML (géré par les navigateurs web) XSL Extensible Stylesheet Language Combinaison des possibilité de DSSSL et CSS avec une syntaxe XML (une feuille de style XSL est un fichier XML) CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 51 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 52 XSL Possibilités de XSL/XSLT Extensible Stylesheet Language Transformer du XML vers un autre format XML, HTML, texte, pas seulement pour la présentation, mais aussi la conversion entre structures de données Pendant le développement de XSL, on s est aperçu que XSL faisait deux choses différentes définir des éléments pour présenter du contenu définir une syntaxe pour transformer des éléments XML et des structures de documents XSL a donc été divisé entre XSL XML Stylesheet Language (XMLFO) XSLT XSL Transformations Rajouter du texte à du contenu Effacer, créer, réordonner et trier des éléments Réutiliser des éléments ailleurs dans le document Transformer des données entre deux formats XML différents Spécifier les objets de formattage (FO) à appliquer à chaque type d élément Utiliser un mécanisme récursif pour explorer le document CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 53 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 54 9

XSLT Spécifier une feuille de style Langage de programmation déclaratif Décrire des transformations d un fichier (arbre) d entrée vers un fichier (arbre) de sortie dans un document XML (luimême un arbre) Description des transformations modèles ou règles (templates) de transformation qui décrivent les traitements appliqués à un nœud chaque modèle correspond à un motif (pattern) qui décrit des éléments auxquels il s applique (xpath) Espace de nom spécifique xmlns:xsl="http://www.w3.org/1999/xsl/transform" Utiliser une instruction de traitement dans le prologue du document XML qui doit être transformé <?xmlstylesheet href="lestyle.xsl" type="text/xsl"?> Possibilité de mettre plusieurs choix Le processeur XSL choisira la feuille de style la plus adéquate CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 55 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 56 Spécification XSLT Disponible sur http://www.w3.org/tr/xslt Définit 34 éléments et leurs attributs Mais on peut faire se débrouiller en utilisant juste stylesheet template applytemplates output Nécessaires pour utiliser XSL les espaces de nom (namespaces) XPath Espace de nom XSL de feuille de style L élément racine est stylesheet <?xml version="1.0" encoding="iso88591"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform"> version = "1.0" > <xsl:template > <! traitements à effectuer > </xsl:template > <xsl:template > <! traitements à effectuer > </xsl:template > </xsl:stylesheet> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 57 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 58 Un premier exemple s de premier niveau foo.xml: <?xml version="1.0"?> <doc>hello</doc> foo.xsl: <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl= "http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:template match="doc"> <out>résultat : <xsl:valueof select="."/></out> </xsl:stylesheet> foo.out: <out>résultat : Hello</out> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:import href=""/> <xsl:include href=""/> <xsl:stripspace elements=""/> <xsl:preservespace elements=""/> <xsl:output method=""/> <xsl:key name="" match="" use=""/> <xsl:decimalformat name=""/> <xsl:namespacealias stylesheetprefix="" resultprefix=""/> <xsl:attributeset name=""> </xsl:attributeset> <xsl:variable name=""></xsl:variable> <xsl:m name=""></xsl:m> <xsl:template match=""> ou <xsl:template name=""> </xsl:stylesheet> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 59 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 60 10

s import / include output Importer plusieurs fichiers XSL <stylesheet > <import href="tables.xsl"/> <import href="features.xsl"> <! ordre important, seul cas pour les éléments de premier niveau > <template > </template> </stylesheet> Inclure des fichiers XML comportement équivalent à xsl:import mais pas de possibilité d écraser une définition importée par une définition de plus hautniveau erreur si deux définitions similaires Spécifie le format de sortie <xsl:output method="xml" indent="yes" encoding="iso88591" /> ibuts de stylesheet method : xml, html, text indent : yes, no encoding standalone (si on a choisit xml) CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 61 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 62 template template (suite) Spécifie une règle de transformation <xsl:template match="expression"> L attribut match a pour valeur une expression Xpath (limitation aux axes child, attribute, //) Le résultat de cette expression est le noeud contextuel au sein du template On commence toujours par s intéresser à la racine ("/" en Xpath). Remarque si plus d une réponse comme résultat de l expression Xpath, il faut utiliser des règles de priorité pour déterminer quelle règle utiliser Contient du texte, des balises Exemple : <out>résultat : </out> des instructions la description des traitements à effectuer Exemple : <xsl:valueof select="."/> Le contenu est inséré dans l arbre destination Le résultat des instructions est inséré à la place de cellesci dans l arbre destination <xsl:template match="doc"> <out>résultat : <xsl:valueof select="."/></out> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 63 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 64 Quelques instructions dans template applytemplates xsl:applytemplates Signifie qu on doit continuer à appeler les règles sur les éléments courants. select permet de spécifier éventuellement l élément xsl:template Permet de charger un modèle/règle (template) grâce à son nom. xsl:choose Structure conditionnelle de type "case" (utilisé en combinaison avec xsl:when et/ou xsl:otherwise) xsl:comment Crée un commentaire dans l'arbre résultat xsl:copy Copie le noeud courant dans l'arbre résultat xsl:copyof Copie le noeud sélectionné par le modèle dans l'arbre résultat xsl:element Permet de créer un élément avec le nom spécifié xsl:foreach Permet d'appliquer un canevas à chaque noeud correspondant au modèle xsl:if Permet d'effectuer un test conditionnel sur le modèle indiqué Indique au processeur XSL de traiter les éléments enfants directs en leur appliquant les règles définies dans la feuille XSL. Traitement récursif <p>c est <b>très</b> important</p> <xsl:template match="p"> <xsl:applytemplates/> <xsl:template match="b"> <xsl:applytemplates/> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 65 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 66 11

applytemplates (2) ApplyTemplates : attribut select Autre exemple <xsl:template match="livre"> <html:p> Un livre : <xsl:applytemplates/> EOL </html:p> Remarque On ne peut pas réarranger la structure hiérachique d un document XML source (le document serait mal formé) <xsl:template match="firstname"> <html:p><xsl:applytemplates/> <xsl:template match="lastname"> <xsl:applytemplates/></html:p> L'attribut select permet de spécifier certains éléments enfants auxquels la transformation doit être appliquée Utiliser les patterns Xpath permet de sélectionner des enfants spécifiques <xsl:template match="name"> <xsl:applytemplates select="name[@type='']"/> Remarque Plusieurs éléments possèdent cet attribut applytemplates, valueof, copyof, m, sort, variable, withm CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 67 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 68 valueof Pour convertir l objet spécifié par un attribut 'select' en une chaîne de caractères Non récursif <p>a <b>hidden</b> word</p> <xsl:template match="p"> <xsl:valueof select="."/> <xsl:template match="b"> <xsl:valueof select="."/> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 69 Valeurs d attributs Utiliser l élément 'valueof' Les attributs sont identifiés par le préfixe '@' <fullname first="john" second="smith"/> <xsl:template match="fullname"> <ajr:person> <xsl:valueof select="@first"> <xsl:valueof select="@second"> </ajr:person> <ajr:person name="{@first} {@second}" /> <person>john Smith</person> <person name="john Smith"/> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 70 Règles par défaut : racine/éléments Quand aucune règle n est sélectionnée, XSLT applique des règles par défaut Première règle pour les éléments et la racine du document. <xsl:template match="* /"> <xsl:applytemplates/> on demande l application de règles pour les fils du noeud courant Conséquence Pas obligatoire de faire une règle pour / CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 71 Règles par défaut : texte et attributs Par défaut, on insère dans le document résultat la valeur du noeud Text, ou de l attribut. <xsl:template match="text() @*"> <xsl:valueof select="."/> Conséquence Si on se contente des règles par défaut, on obtient la concaténation de noeuds de type Text. Programme minimal : <?xml version="1.0" encoding="iso88591"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transf orm"> </xsl:stylesheet> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 72 12

Règles par défaut : autres nœuds Pour les instructions de traitement et les commentaires : on ne fait rien. <xsl:template match="processinginstruction() comment()"/> si on ne les sélectionne pas explicitement, en définissant une règle pour les traiter, il ne se passe rien. sort Permet de spécifier que les éléments sont triés suivant une certaine propriété <list> <item>zzz</item> <item>aaa</item> <item>mmm</item> </list> <list> <item code="z"> </item> <item code="a"> </item> <item code="m"> </item> </list> <xsl:template match="list"> <xsl:applytemplates> <xsl:sort/> </xsl:applytemplates> <xsl:template match="list"> <xsl:applytemplates> <xsl:sort select="@code"/> </xsl:applytemplates> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 73 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 74 sort (2) ibut 'order' 'ascending' ou 'descending' ibut 'datatype' 'text' (par défaut) ou 'number' ibut 'caseorder' 'lowerfirst' ou 'upperfirst' number Pour la numérotation automatique <xsl:template match="item"> <xsl:number/><xsl:applytemplates/> ibuts level = 'single' ou 'any' ou 'multiple' count = "list1 list2" format = "1.A" (également "I" et "i") from = "3" groupingsetor = "," groupingsize = "3" value = "position()" CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 75 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 76 ibut mode Fait partie de l élément template Permet de spécifier quelle règle utiliser <xsl:template match="/"> <html:h1><xsl:applytemplates/></html:h1> <xsl:template match="/" mode="h3"> <html:h3><xsl:applytemplates/></html:h3> <xsl:template match="intro"> <xsl:applytemplates select="///" mode="h3"/> variable On peut déclarer et utiliser des variables en XSLT <xsl:variable name="colour">red</xsl:variable> On peut utiliser aussi <valueof select="attribute"> Une variable est référencée avec la notation $ <xsl:valueof select="$colour"/> On peut aussi l utiliser dans les éléments de sortie <ajr:glyph colour="{$colour}"/> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 77 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 78 13

Réutiliser des templates Passer des mètres à un template Si on a besoin plusieurs fois du même formattage //A named template called by calltemplate <xsl:template name="createheader"> <html:hr/> <html:h2>***<xsl:applytemplates/>***</html:h2> <html:hr/> <xsl:template match=""> <xsl:calltemplate name="createheader" /> <xsl:template match="head"> <xsl:calltemplate name= CreateHeader" /> L élément m, une variable spéciale <xsl:m name="prefix">default</xsl:m> <xsl:withm name="prefix">new</xsl:withm> L élément calltemplate peut passer une nouvelles valeur de m àuntemplate <xsl:template match="name"> <xsl:calltemplate name="salutation"> <xsl:withm name="greet">hello </xsl:withm> </xsl:calltemplate> <xsl:template name="salutation"> <xsl:m name="greet">dear </xsl:m> <xsl:valueof select="$greet"/> <xsl:applytemplates/> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 79 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 80 Créer des éléments Utiliser l élément 'Element' Très puissant si on l utilise avec des variables <xsl:template name="createheader"> <xsl:m name="level">3</xsl:m> <xsl:element namespace="html" name="h{$level}"> <xsl:applytemplates/> </xsl:element> <xsl:template match=""> <xsl:calltemplate name="createheader"> <xsl:withm name="level">1</xsl:withm> </xsl:calltemplate> Copier des éléments 'copy' <xsl:template match="h1 h2 h3 h4 h5 h6 h7"> <xsl:copy> Header: <xsl:applytemplates/> </xsl:copy> Les attributs ne sont pas préservés Il faut créer de nouveaux attributs <xsl:template match="h1 h2 h3 h4 h5 h6 h7"> <xsl:copy> <xsl:attribute name="style">purple</xsl:attribute> Header: </xsl:applytemplates> </xsl:copy> <valueof select="@style"/> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 81 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 82 attributeset copyof Utilisé pour stocker des groupes d attributs <xsl:attributeset name="classandcolor"> <xsl:attribute name="class">standard</xsl:attribute> <xsl:attribute name="color">red</xsl:attribute> </xsl:attributeset> <xsl:template match="h1 h2 h3 h4 h5 h6 h7"> <xsl:copy useattributesets name="classandcolor"> Header: <xsl:applytemplates/> </xsl:copy> Peut copier des fragments du fichier d entrée sans perdre les attributs <xsl:template match="body"> <body> <xsl:copyof select="//h1 //h2" /> <xsl:applytemplates/> </body> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 83 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 84 14

Element foreach Pour répéter une opération sur des éléments <xsl:template match="liste"> <xsl:foreach select="./item"> <! traitement pour chaque item > Conditions On peut faire un test 'if' pendant le traitement <xsl:template match=""> <html:p> <xsl:if test="position() = 1"> <xsl:attribute name="style">color: red</xsl:attribute> </xsl:if> <xsl:if test="position() > 1"> <xsl:attribute name="style">color: blue</xsl:attribute> </xsl:if> <xsl:applytemplates/> </html:p> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 85 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 86 Conditions (2) XSLFO : Formatting Objects Les éléments 'choose', 'when', 'otherwise' <xsl:template match=""> <html:p> <xsl:choose> <xsl:when test="position() = 1"> <xsl:attribute name="style">color: red</xsl:attribute> </xsl:when> optional <xsl:otherwise test="position() > 1"> <xsl:attribute name="style">color: blue</xsl:attribute> </xsl:otherwise> <xsl:applytemplates/> </xsl:choose> </html:p> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 87 <?xml version="1.0" encoding="utf8"?> <root xmlns="http://www.w3.org/1999/xsl/format" fontsize="16pt"> <layoutmasterset> <simplepagemaster marginright="mm" marginleft="mm" marginbottom="mm" margintop="mm" pagewidth="210mm" pageheight="297mm" mastername="page"> <regionbody regionname="pagebody" marginbottom="5mm" margintop="5mm" /> </simplepagemaster> </layoutmasterset> <pagesequence masterreference="page"> <>Hello world example</> <flow flowname="pagebody"> <block>hello XSLFO!</block> </flow> </pagesequence> </root> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 88 Conclusion Exercice (suite en TP) XSLT permet de transformer des arbres en d autres arbres Changement de modèle de données Présentation XHTML carte1.xml <carte> <titre>dr.</titre> <nom>paul Durand</nom> <telephone inter="33">4 78 34 25 12</telephone> <telephone inter="33">6 12 45 25 12</telephone> <adresse> <rue>impasse des Fleurs</rue> <code>69001</code> <ville>lyon</ville> <pays>france</pays> </adresse> <courriel> paul.durand@provider.com</courriel> </carte> Ecrire une feuille de style XSLT permettant de passer du document carte1.xml à card1.xml card1.xml <card> <name ="Dr."> Paul Durand</name> <address> <street>impasse des Fleurs</street> <zipcode>69001 Lyon</zipcode> <country>france</country> </address> <phones> <phone>(33)4 78 34 25 12</phone> <phone>(33)6 12 45 25 12</phone> </phones> </card> CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 89 CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 90

Remerciements Ce cours s appuie largement sur celui d Alan Robinson http://industry.ebi.ac.uk/~alan/xmlworkshop/ Cours Bernd Ammann programmation XSLT CM56 : XPATH / XSLT Yannick Prié UE2.2 Master SIB M1 20042005 : Représentation des données et des connaissances 91 16