1 3 Exemple: ocument XML XPath et XSLT Valeur Module onnées et Services sur le Web ernd mann 2003/04 ocument XML: / FILM TITRE UTEUR NNEE RESUME Vertigo Hitchcock 1958 Scotty... 2 4 Sélectionner des fragments XML Exemple: Transformation en HTML Il faut souvent pouvoir sélectionner/extraire des fragments (nœuds) d un document XML XPath. Fragment HTML qu on veut obtenir : p XPath est utilisé par XSLT pour sélectionner des règles de transformation h1 i p h3 XQuery pour l interrogation de documents XML XML Schéma pour définir des clés/références i 1958 Hitchcock Résumé: Scotty... XLink pour créer des liens entre noeuds XML Vertigo
5 7 Exemple : Règle de transformation XSLT Exemple : l arbre OM... / FILM ocument TITRE UTEUR NNEE RESUME Vertigo Hitchcock 1958 Scotty... EXEMPLE * i h1 * i * p Résumé: * h3 Section littérale avec SectionT des &, des des et un text p 6 8 XPath: Le modèle Puis l arbre XPath... ocument Le langage XPath permet de désigner un ou plusieurs nœuds dans un document XML, à l aide d expressions de chemins/d arbres. XPath est fondé sur une représentation arborescente (OM) du document XML EXEMPLE Objectif : référencer nœuds (éléments, attributs, commentaires,...) dans un document XML Un typage simplifié par rapport à celui de OM d entités, pas de sections littérales pas Section littérale avec des &, des des et un texte
/ %& '% /étape. $ # 45 0 $ 1 2 1$ / 3 $ 0 $ 1 0 $ 1 76 5 2 1$ / 3 $ )( 0 $ 1 45 76 5! " $# 9 11 Expressions XPath : Sémantique Une expression XPath : Étapes XPath Une étape a trois types de composants : s évalue en fonction d un nœud contexte... désigne un ou plusieurs chemins dans l arbre à partir du nœud contexte a pour résultat un ensemble de nœuds ou une valeur, numérique, booléenne ou alphanumérique Exemple : :: [ ()+* L axe (optionnel) recouvre les deux notions suivantes : un sousensemble des nœuds de l arbre relatif au nœud contexte ;,] l ordre de parcours de ces nœuds Le filtre (obligatoire) définit le type des nœuds/noms des éléments qui seront retenus Le(s) prédicat(s) (optionnels) doivent être satisfaites par les nœuds retenus. 10 12 Expressions XPath : Syntaxe ocument XML avec un nœud contexte Un chemin XPath est une suite d étapes : ocument [/]étape /.../étape eux variantes : Un chemin peut être omment ommfin absolu : Le nœud contexte est la racine du document. relatif : Le nœud contexte est un nœud dans le document (pas forcément la racine). e1 e2 e3
13 child:: ou parent:: ocument ocument omment ommfin omment ommfin Nœud contexte Nœud contexte e1 e2 e3 e1 e2 e3 14 16 attribute:: ou @ descendant::node() ocument ocument omment ommfin omment ommfin Nœud contexte Nœud contexte e1 e2 e3 e1 e2 e3
17 19 ancestor::node() following::node() ocument ocument omment ommfin omment ommfin Nœud contexte Nœud contexte e1 e2 e3 e1 e2 e3 18 20 precedingsibling::node() utres axes et axe/étape par défaut ocument utres axes: preceding : les précédents (dans l ordre du document) omment ommfin descendantorself : les descendants, plus le nœud contexte Nœud contexte ancestororself : les ancêtres, plus le nœud contexte L axe par défaut est child : / correspond à /child:: L étape par défaut est descendantorself::node() : // exprime child::/descendantorself::node()/child:: e1 e2 e3
21 23 Filtres eux manières de filtrer les nœuds : //@ ocument par leur nom : possible pour les types de nœuds :, Processing et (qui ont un nom) par leur type OM : omment ommfin * : nœuds de type ou ibute text() : nœuds de type comment() : nœuds de type omment processinginstruction() : nœuds de type Processing Exemple : /processinginstruction(), ou /processinginstruction( java ) node() recouvre tous les types de nœud e1 e2 e3 22 24 /// Nom générique : //* ocument ocument omment ommfin omment ommfin e1 e2 e3 e1 e2 e3
25 27 /descendant::text() Notation abrégée de parent::node() ocument omment ommfin La notation abrégée.. désigne le père du nœud contexte, quel que soit son type. L expression.. est équivalent à parent::node() (le filtre node() désigne tous les types de nœuds sauf les attributs). L expression. désigne le nœud contexte luimême (surtout utile dans les prédicats). e1 e2 e3 26 28 /comment() Prédicats ocument omment ommfin Prédicat : expression booléenne constituée d un ou plusieurs tests, composés avec les connecteurs logiques habituels and et or Test : toute expression XPath, dont le résultat est convertie en booléen; une comparaison, un appel de fonction. il faut connaître les règles de conversion e1 e2 e3
29 31 Pour bien comprendre ans l expression //[@] : On s intéresse aux nœuds de type fils de l élément racine. Parmi ces nœuds on ne prend que ceux pour lesquels le prédicat [@] s évalue à true ette expression s évalue avec pour nœud contexte un élément [@] vaut true ssi @ renvoie un ensemble de nœuds non vide ontexte d évaluation Une étape s évalue en tenant compte d un contexte constitué de un nœud contexte, position initiale du chemin ; ce nœud fait luimême partie d un ensemble obtenu par évaluation de l étape précédente on connaît la taille de cet ensemble (fonction last()) on connaît la position du nœud contexte dans cet ensemble (fonction position()) 30 32 Quelques exemples ///descendant::text()[1] ocument //[@] : les nœuds // qui ont un attribut @ //[@= ] : les nœuds // qui ont un attribut @ valant omment ommfin ///descendant::text()[position()=1] : le premier nœud de type descendant d un //. ///descendant::text()[1] : idem e1 e2 e3
33 35 Les types XPath onversions de types On peut effectuer des comparaisons, des opérations. ela implique un typage et des conversions de type. Les types XPath sont : les numériques les chaînes de caractères les booléens (true et false) enfin les ensembles de nœuds eux conversions sont toujours possibles. Vers une chaîne de caractères. utile pour la production de texte en XSLT (balise xsl:valueof) Vers un booléen utile pour les tests effectués dans XSLT (xsl:if, xsl:when) 34 36 Numériques onversions booléennes Notation décimale habituelle omparaisons habituelles (<, >,!=) Opérations : +,, *, div, mod La fonction number() permet de tenter une conversion Si la conversion échoue on obtient NaN (Not a Number). À éviter... Ex : //node()[number(@) mod 2=1] Pour les numériques : 0 ou NaN sont false, tout le reste est true Pour les chaînes : une chaîne vide est false, tout le reste est true Pour les ensembles de nœuds : un ensemble vide est false, tout le reste est true
37 39 Les fonctions XPath et sélection par valeur Quelques fonctions utiles : concat(chaîne1, chaîne2,...) pour concaténer des chaînes contains(chaîne1, chaîne2) teste si chaîne1 contient chaîne2 count (expression) renvoie le nombre de nœuds désignés par expression name() renvoie le nom du nœud contexte not(expression) : négation Test du nombre d occurrences : INEM[count(SENE) > 1]: cinémas avec au moins 2 séances FILM[count(TEUR) = 0]: films sans acteur FILM[not(TEUR)]: films sans acteur Sélection par valeur: FILM[not(TEUR[NOM= Willis ])]: films sans ruce Willis FILM[TEUR/NOM= Willis ]: films avec ruce Willis FILM[TEUR[NOM= Willis ]]: idem 38 40 Prédicats: xes d avancements et inverses La position d un nœud dépend de l axe choisi: xes «d avancement» : child::*[3]: le 3e enfant child::*[position()=3]: idem child::*[last()]: le dernier enfant descendant::*[last()]: le dernier descendant xes «inverses» : ancestor::*[1]: le premier ancêtre du nœud contexte (dernier dans l ordre du document). Prédicats plus complexes Test sur la structure : chemins imbriqués avec connecteurs logiques (qualifiers) TEUR[NOM and TENISSNE] ou TEUR[NOM][TENISSNE]: les acteurs avec un nom et une date de naissance FILM[@TITRE = razil and TEUR/NOM = e Niro ]: le film razil avec l acteur e Niro FILM[@TITRE = razil ][TEUR/NOM = e Niro ]: idem precedingsibling::*[last()]: le dernier frère qui précède le nœud contexte (premier dans l ordre du document).
41 43 XPath : Résumé XPath est un langage pour extraire des noeuds dans un arbre XML : On navigue dans l arbre grâce à des axes de navigation. Un chemin de navigation est une séquence d étapes. Sommaire Une introduction à XSLT, destinée à comprendre les mécanismes du langage. Règles XSLT ésignation de fragments XML ans chaque étape on choisi un axe, un filtre et éventuellement des prédicats. Le résultat d une étape (d une séquence d étapes) est un séquence de noeuds. ppels de règles pplication : XML HTML et XML Passage de paramètres WML 42 44 XSLT, où, quand, comment»>logbook error: File FIGURES/rchiXSLT does not exist! Introduction à XSLT
45 47 Exemple : La fiche du film Gladiator Fonctions d un programme XSLT Transformation d arbres XML: La fiche du film peut être publiée en HTML pour Netscape/IE en WML pour le portables WP en SMIL pour Realplayer dans un moteur de recherche SallesEnLigne.com L information? extraction de données génération de texte suppression de contenu (noeuds) déplacer contenu (noeuds) dupliquer contenu (noeuds) trier c est la même, sous des formes différentes elle est échangée entre plusieurs acteurs 46 48 Qu estce qu on peut faire avec XSLT? Transformer un document XML en un ou plusieurs documents XML, HTML, WML, SMIL document papier: PF (XSLFO), LaTeX texte simple nalyse arbre OM ocument XML Processeur XSLT ocument XSLT Sérialisation arbre résultat ocument résultat Exemple: Règle de transformation XSLT utilise XPath pour sélectionner la règle à appliquer et les fragments à afficher ou transformer : <xsl:template match="film"> <p> <h1> <i> <xsl:valueof select="titre"/> </i> </p> <i> <xsl:valueof select="nnee"/> </i> <p> <xsl:valueof select="uteur"/> </p> <h3>résumé: <xsl:valueof select="resume"/> </h3> </p>
49 51 XSLT et XPath Fonctionnalités XSLT / Génération d un arbre XML: TITRE Vertigo UTEUR Hitchcock FILM NNEE 1958 RESUME Scotty... <xsl:template match="film"> <body> <p>un paragraphe</p> </body * i h1 * i p p * Résumé: * h3 Génération d arbre avec extraction : <xsl:template match="film"> <body> <p>titre: <xsl:valueof select="titre"/> </p> </body> 50 52 Extraction de données: Fonctionnalités XSLT <xsl:template match="film"> <xsl:valueof select="titre"/> Génération de texte: <xsl:template match="film"> eci est le texte produit par application de cette règle. Structure de base : les règles Règle = template : élément de base pour produire le résultat une règle s applique dans le contexte d un nœud de l arbre l application de la règle produit un fragment du résultat. Programme XSLT = ensemble de règles pour construire un résultat
53 55 hemins complexes Exemple de boucle: Traduction de Salle ans une règle, on peut : accéder aux fils, aux descendants, au parent, aux frères, aux neveux, aux attributs,... du noeud à transformer (XPath). effectuer des tests et des boucles, etc... appeler d autres règles (récursion) <xsl:template match="slle"> <h2>salle No <xsl:valueof select="@no"/></h2> Film: <xsl:valueof select="film/titre"/> de <xsl:valueof select="film/uteur"/> <ol> <xsl:foreach select="senes/sene"> <li><xsl:valueof select="."/></li> </xsl:foreach> </ol> 54 56 Exemple: ocument XML <?xml version="1.0" encoding="iso88591"?> <?xmlstylesheet href="salle.xsl" type="text/xsl"?> <?cocoonprocess type="xslt"?> <SLLE NO= 1 PLES= 320 > <FILM> <TITRE>lien</TITRE> <UTEUR>Ridley Scott</UTEUR> <NNEE>1979</NNEE> <GENRE>Sciencefiction</GENRE> <PYS>Etats Unis</PYS> <RESUME>Près d un vaisseau spatial échoué sur une lointaine planète, des Terriens en mission découvrent de bien étranges "oeufs". Ils en ramènent un à bord, ignorant qu ils viennent d introduire parmi eux un huitième passager particulièrement féroce et meurtrier. </RESUME> </FILM> <REMRQUE>Réservation conseillée</remrque> <SENES> <SENE>:00</SENE> <SENE>18:00</SENE> <SENE>21:00</SENE> </SENES> </SLLE> ppliqué à Salle1.xml : Le résultat <h2>salle No 1 </h2> Film: lien de Ridley Scott <ol> <li> :00</li> <li> 18:00</li> <li> 21:00</li> </ol> N : c est un fragment HTML, à intégrer dans un document complet.
57 59 Salles et séances Exemple : L Épée de bois chemin "@NO" chemin "FILM/TITRE" TITRE FILM NO=2 SLLE PLES=320 UTEUR NNEE GENRE PYS RESUME lien Scott Science Fiction 1979 US Près d un vaisseau spatial... ontexte d application de la règle chemin "REMRQUE" REMRQUE Réservation conseillée chemin SENES/SENE SENES boucle for each SENE SENE SENE :00 18:00 21:00 «adre» HTML, puis appel de la règle INEM <xsl:template match="/"> <html> <head><title>programme de <xsl:valueof select="inem/nom"/> </title> </head> <body bgcolor="white"> <xsl:applytemplates select="inem"/> </body> </html> 58 60 ppels de règles En général on produit un résultat en combinant plusieurs règles : La règle initiale s applique à la racine du document traité ( / ) On produit alors le cadre du document HTML On appelle d autres règles pour compléter la création du résultat Règle INEM Exploitation de l élément INEM, puis appel à la règle SLLE <xsl:template match="inem"> <h1><i> <xsl:valueof select="nom"/> </i></h1><hr/> <xsl:valueof select="resse"/>, <i>métro: </i> <xsl:valueof select="metro"/> <hr/> <xsl:applytemplates select="slle"/>
61 63 Vue d ensemble Le document XML head title Règle "/" html h1 i Epée de bois Règle "INEM" body hr adresse p p h2 h3 h2 h3 Salle No 1 Film: lien Salle No 2 Film : Vertigo Règle "SLLE" <?xml version="1.0" encoding="iso88591"?> <!OTYPE MOTEUR [ <!ENTITY Epeeeois SYSTEM "http://epeedebois.fr/e.xml"> <!ENTITY inemarseille SYSTEM "http://cinemarseille.fr/m.xml"> ]> <MOTEUR> <INEM> &Epeeeois; </INEM> <INEM> &inemarseille; </INEM> </MOTEUR> 62 64 XSLT avec paramètres Traitement des paramètres 1 <html> 2 <head> 3 <title>formulaire de Recherche</title> 4 </head> 5 <body bgcolor="white"> 6 <h1>formulaire de Recherche</h1> 7 <form method= get action= Moteur.xml 8 name= Form > 9 Film: <input type= text name= titre > <br> 10 Séance: <input type= text NME= seance > 11 (hh:mm)<br> 12 Ville: <input type= text name= ville ><br> 13 <input type= submit name= chercher 14 value="hercher"/> </form> 16 </body> 17 </html> <xsl:param name="titre"/> <xsl:param name="seance"/> <xsl:param name="ville"/> <xsl:template match="moteur"> <xsl:foreach select="inem"> <xsl:if test=" INEM//TITRE = $titre) and INEM//HEURE >= $seance) and INEM/VILLE = $ville)"> <xsl:applytemplates select="." /><p/> </xsl:if> </xsl:foreach> émo : SallesEnLigne.com
65 67 Principaux éléments de premier niveau Programmation XSLT Type d élément xsl:import xsl:include xsl:output xsl:param xsl:template xsl:variable escription Import d un programme XSLT Inclusion d un programme XSLT Indique le format de sortie éfinit un paramètre éfinit une règle XSLT éfinit une variable XSLT Table 1: 66 68 Éléments XSLT (espace de noms XSLT) Règles : définition et déclenchement Une règle est définie par l élément xsl:template. On distingue : L élement racine d un programme : <xsl:stylesheet>. Les éléments de premier niveau, fils de <xsl:stylesheet>. Il s agit essentiellement des règles (template) Les instructions : on les trouve dans le corps des règles. eux possibilités de définition (et de déclenchement) : L attribut match est un pattern XPath définissant les «cibles» de la règle Ex : xsl:template match= FILM déclenchement par xsl:applytemplates select=... L attribut name donne un nom à la règle Ex : xsl:template name= TM déclenchement par xsl:calltemplate name=...
4 69 71 Sélection des règles par leur pattern Problème : étant donné un nœud, comment trouver la règle qui s applique? Patterns : xes autorisés Seulement les axes suivants sont autorisés comme pattern de sélection : Les fils d un élément : child Soit le nœud Les attributs d un élément : attribute Soit le pattern de la règle S il existe quelque part un nœud tel que l évaluation de à partir de contient : la règle s applique L abréviation // de /descendantorself::node()/ ette restriction garantit qu on peut savoir si une règle doit être déclenchée pour un noeud uniquement en regardant les ancêtres de, ce qui diminue considérablement la compléxité du l algorithme de séléction. 70 72 Exemple : la règle pour la racine Exemples de patterns u départ du processus de transformation : Le nœudcontexte est la racine du document Il existe une règle 4dont le pattern est «/» en prenant n importe quel nœud, l évaluation de «/» est donc la règle s applique. Il est donc bon (mais pas indispensable) d avoir une règle avec pattern «/»., /OURS/ENSEIGNNTS : la règle s applique à tous les nœuds ENSEIGNNTS fils d un élément racine OURS //SENE[@I=2] ;... à tous les nœuds de type SENE ayant un attribut I valant 2 /descendant::film[1] :... au premier élément de type FILM dans le document FILM[1] :... aux premiers fils de type FILM (il peut y en avoir plusieurs!) /OURS[@OE="T234"] :... aux cours avec le code T234
73 75 Règles par défaut Règle par défaut pour les autres types de nœuds 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/> Pour les instructions de traitement et les commentaires, on ne produit rien. <xsl:template match="processinginstruction() comment()"/> on demande l application de règles pour les fils du nœud courant. 74 76 Règle par défaut pour les noeuds texte et les attributs Par défaut, on insère dans le document résultat la valeur du nœud, ou de l attribut. <xsl:template match="text() @*"> <xsl:valueof select="."/> ela suppose (surtout pour les attributs) d avoir utilisé un xsl:applytemplates sélectionnant ces nœuds. onséquence Si on se contente des règles par défaut, on obtient la concaténation de nœuds de type. Programme minimal : 1 <?xml version="1.0" encoding="iso88591"?> 2 3 <xsl:stylesheet version="1.0" 4 xmlns:xsl="http://www.w3.org/1999/xsl/transform"> 5 </xsl:stylesheet> N : le programme n affiche pas les attributs (pourquoi?)
77 79 L instruction xsl:applytemplates Exemple : filtre de certains nœuds ibuts : select, mode et priority. select doit sélectionner un ensemble de nœuds. Ils constituent le contexte d évaluation pour chaque nœud on va chercher la règle à instancier. mode permet de choisir explicitement une des règles parmi celles qui sont candidates priority permet de définir une priorité pour que le processeur choisisse. 1 <?xml version="1.0" encoding="iso88591"?> 2 <FILM> 3 <TITRE>Vertigo</TITRE> 4 <NNEE>1958</NNEE><GENRE>rame</GENRE> 5 <MES>lfred Hitchcock</MES> 6 <RESUME>Scottie Ferguson, ancien inspecteur de 7 police, est sujet au vertige depuis qu il a vu 8 </RESUME> 9 </FILM> 10 <FILM> 11 <TITRE>lien</TITRE> 12 <NNEE>1979</NNEE><GENRE>Sciencefiction</GENRE> 13 <MES>Ridley Scott</MES> 14 <RESUME>Près d un vaisseau spatial échoué sur une lointaine planète, des Terriens en mission 16 </RESUME> 17 </FILM> 78 80 Sélection d une règle Le programme XSLT Que faire quand plusieurs règles sont candidates pour un même nœud? il existe des priorités implicites qui permettent au processeur de choisir on peut aussi donner explicitement une priorité si le choix est impossible : le processeur s arrête. Effacer les noeuds de type RESUME : <xsl:template match="resume"/> <xsl:template match="@* node()" priority="1"> <xsl:copy> <xsl:applytemplates select="@* node()"/> </xsl:copy>
81 83 Priorités implicites Exemple : création de liens HTML Intuition : plus c est «spécifique», plus c est prioritaire Priorité 0 : les patterns constitués d une seule étape XPath, avec un nom d élément ou d attribut et sans prédicat Priorité 0.5 les filtres autres qu un nom d élément ou d attribut ont une priorité égale à 0,5 ( node(), *) Tous les autres ont une priorité de 0.5 (prédicats, plusieurs étapes) On peut créer des ancres «internes» à un document. <a name= lien /> On peut ensuite créer un lien vers cette ancre <a href= #lien >Lien vers le film lien</> Objectif : une règles pour créer les liens, une autre pour créer les ancres. 82 84 Les modes Les deux règles Raison d être : un même nœud peut être traité plusieurs fois. Exemple : On parcourt tous les chapitres et sections pour produire une table des matières. On les parcourt à nouveau pour publier le contenu. onc il faut des règles différentes s appliquant aux même nœuds : on les distingue par le mode. 1 <xsl:template match="film" mode="ncres"> 2 <a href="#{titre}"> 3 <xsl:valueof select="titre"/> 4 </a> 5 6 7 <xsl:template match="film"> 8 <a name="{titre}"/> 9 <h1><xsl:valueof select="titre"/></h1> 10 <b><xsl:valueof select="titre"/>,</b> 11 <xsl:valueof select="genre"/> 12 <br/> 13 <b>réalisateur</b> : 14 <xsl:valueof select="mes"/>
85 87 L appel des règles Jointures intradocument eux types d éléments : Résultat 1 <xsl:template match="films"> 2 <html> 3 <head><title>liste des films</title></head> 4 <body bgcolor="white"> 5 6 <xsl:applytemplates select="film" 7 mode ="ncres"/> 8 9 <xsl:applytemplates select="film"/> 10 </body> 11 </html> 12 86 FILM avec un attribut @MES (référence vers le metteur en scène) RTISTE avec un attribut @RTI (identificateur) <xsl:template match="film"> Titre: <xsl:valueof select="titre"/> Metteur en scène: <xsl:valueof select="//rtiste [@RTI=current()/@MES]/NOM"/> </li> Pourquoi on a besoin de la fonction current()? 88 Résumé : sélection d une règle Jointures interdocument eux documents : Soit un xsl:applytemplates, et un des nœud sélectionnés. On ne prend que les règles avec le même mode que xsl:applytemplates On teste le pattern pour savoir si le nœud satisfait la règle. On prend celle qui a la plus grande priorité. Films.xml : FILM avec un attribut @MES (référence vers le metteur en scène) rtistes.xml : RTISTE avec un attribut @RTI (identificateur) <xsl:template match="film"> Titre: <xsl:valueof select="titre"/> Metteur en scène: <xsl:valueof select="document( rtistes.xml )//RTISTE [@RTI=current()/@MES]/NOM"/> </li>
89 onclusion sur XSLT Un langage totalement adapté au traitement de documents XML Parcours d un document, vu comme un arbre éclenchement de règles sur certains nœuds ssociation de plusieurs programmes à un même document 90 ibliographie sur XSLT 1. Recommendation XSLT sur le site du W3 2.. mann et P. Rigaux, omprendre XSLT, O Reilly http://cortes.cnam.fr:8080/xslt 3. P. Wadler, formal semantics of patterns in XSLT