La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

XSLT : XML Stylesheet Language Transformation & XPath : langage dadressage de parties de documents XML Une introduction à XSLT & Xpath pour l'analyse.

Présentations similaires


Présentation au sujet: "XSLT : XML Stylesheet Language Transformation & XPath : langage dadressage de parties de documents XML Une introduction à XSLT & Xpath pour l'analyse."— Transcription de la présentation:

1

2 XSLT : XML Stylesheet Language Transformation & XPath : langage dadressage de parties de documents XML Une introduction à XSLT & Xpath pour l'analyse de documents XML

3 2 Cours XML –M2-CCI / Y.Laborde 2 XSLT : mise en pratique

4 Feuille de style et transformation (3) Processeur XSLT (1) Feuille de style XSLT (+Xpath) (2) Document XML (4) Document transformé XML / HTML / texte /...

5 4 Cours XML –M2-CCI / Y.Laborde 4 Un exemple : la fiche de description du film Vertigo Vertigo Vertigo.gif Alfred Hitchcock 1958 Drame Etats Unis Scottie Ferguson, ancien inspecteur de police, est sujet au vertige depuis qu'il a vu mourir son collègue. Elster, son ami, le charge de surveiller sa femme, Madeleine, ayant des tendances suicidaires. Amoureux de la jeune femme Scottie ne remarque pas le piège qui se trame autour de lui et dont il va être la victime...

6 5 Cours XML –M2-CCI / Y.Laborde 5 Un exemple de transformation HTML de la fiche de description du film Vertigo Version HTML du document Vertigo.xml (afché par Netscape) Film: Vertigo

7 6 Cours XML –M2-CCI / Y.Laborde 6 Un exemple de transformation EXCEL de la fiche de description du film Vertigo Version EXCEL du document Alien.xml La transformation du document a produit un document EXCEL. Les balises XML ont disparu au profit de celles propres à EXCEL (non montrées ici). TitreAuteurAnnéePaysGenreRésumé AlienRidley Scott 1979USAScience- fiction Près dun vaisseau spatial échoué sur une lointaine planète, des Terriens en mission découvrent de bien étranges "oeufs"..

8 7 Cours XML –M2-CCI / Y.Laborde 7 Principe de la transformation XSLT

9 8 Cours XML –M2-CCI / Y.Laborde 8 Transformation en un document HTML root AAA BBB Text CCC Document XML source Transformation Document HTML produit Processeur XSLT Feuille de style XSLT : règles de la transformation Arbre XML sourceArbre HTML résultant Pour produire un document HTML : on doit transformer l'arbre XML en un arbre HTML html head body … …

10 9 Cours XML –M2-CCI / Y.Laborde 9 Exemples dutilisation Mettre en forme les information d'un document XML Connaissant à l'avance la structure logique du document Composer des sous-documents Créer une version sans les ou sans les … Quantifier Nombre de projection d'un dans le mois... Convertir dans un format spécifique XML vers XML, Hyperbase, Unitexte, sans balise... ou vers des formats de lecture : (x)html, pdf, Word, Excel, Open Office, LaTex... Maintenir et enrichir un document Possibilité dajouter de linformation (ex: images, prix moyens...)

11 10 Cours XML –M2-CCI / Y.Laborde 10 Intérêt du couple XML/XSLT AVANTAGES : On ne maintient pas différentes versions du document pour les différents formats de sortie ou les différents sous-documents => maintenance On peut appliquer les mêmes feuilles de style à plusieurs documents => simplicité On se concentre soit sur les données du document soit sur ses représentation => modularité

12 11 Cours XML –M2-CCI / Y.Laborde 11 Objectif du diaporama

13 Introduction aux principes généraux par l'approche procédurale

14 13 Cours XML –M2-CCI / Y.Laborde 13 Une première feuille de style Cette feuille de style récupère tout le texte dun document XML

15 14 Cours XML –M2-CCI / Y.Laborde 14 Explications Vertigo Vertigo.gif Alfred Hitchcock 1958 Drame Etats Unis Scottie Ferguson, ancien inspecteur de police, est sujet au vertige depuis qu'il a vu mourir son collègue. Elster, son ami, le charge de surveiller sa femme, Madeleine, ayant des tendances suicidaires. Amoureux de la jeune femme Scottie ne remarque pas le piège qui se trame autour de lui et dont il va être la victime... Le processeur lit la feuille, imprime ce qui est littéral (le texte ou les balises non préfixés par « xsl: ») et évalue/exécute les instructions préfixées par « xsl: » Ici les balises ajoutées sont en HTML : à partir du document on génère une page HTML. Le résultat de la transformation peut ainsi être affiché par un navigateur. Appliquée au document Vertigo.XML, cette feuille de style donne :

16 15 Cours XML –M2-CCI / Y.Laborde 15 Pour résumer Une feuille de style est un document XML L'élément racine est xsl:stylesheet avec deux attributs obligatoires ( version et xmlns:xsl ) D'autres instructions peuvent apparaître, comme xsl:template ou xsl:value-of Tout ce qui est préfixé par « xsl:» est une instruction XSLT, qui est exécutée par le processeur et remplacée par son résultat. Tout ce qui n'est pas "préfixé" est reproduit littéralement

17 16 Cours XML –M2-CCI / Y.Laborde 16 Prenons un exemple plus complet : Epée de bois 100, rue Mouffetard Censier-Daubenton Alien Réservation conseillée 15:00 18:00 21:00 Vertigo 22:00

18 17 Cours XML –M2-CCI / Y.Laborde 17 Extraire le texte contenu dans une balise

19 18 Cours XML –M2-CCI / Y.Laborde 18 L'instruction xsl:value-of Remplacer cette instruction par le texte du premier élément… … trouvé à cet endroit

20 19 Cours XML –M2-CCI / Y.Laborde 19 Larbre est toujours parcouru de haut en bas et de gauche à droite (i.e. dans lordre physique de déclaration des entités,,,...).

21 20 Cours XML –M2-CCI / Y.Laborde 20 XPath

22 21 Cours XML –M2-CCI / Y.Laborde 21 xsl:value-of convertit le nœud en texte en supprimant les éventuelles balises incluses du texte et d'autres éléments Soit le document XML : L'expression XPath retourne tous les « nœud », XSLT prend le premier et le convertit en texte y compris ses fils : Du texte et d'autres éléments Soit l'instruction XSLT …

23 22 Cours XML –M2-CCI / Y.Laborde 22 xsl:for-each...traitement une à une les nœuds trouvés...

24 23 Cours XML –M2-CCI / Y.Laborde 23 15:00 18:00 21:00 22:00 xsl:for-each 4 nœuds sont trouvés

25 24 Cours XML –M2-CCI / Y.Laborde 24 xsl:for-each

26 25 Cours XML –M2-CCI / Y.Laborde 25 xsl:for-each => trouve 2 nœuds => trouve 4 nœuds

27 26 Cours XML –M2-CCI / Y.Laborde 26 Nom du cinéma: Film à laffiche : Première séance : xsl:for-each

28 27 Cours XML –M2-CCI / Y.Laborde 27 Le nœud contexte

29 28 Cours XML –M2-CCI / Y.Laborde 28 Imbrications de xsl:for-each On ne sait pas combien il y aura de titres de niveau 1, de niveau 2, etc. Il faut traiter tous les titres de niveaux 1, puis dans chaque niveau 1, traiter les niveaux 2, etc. On devra donc imbriquer des boucles xsl:for- each

30 29 Cours XML –M2-CCI / Y.Laborde 29 Une table des matières (1) Le livre a comme racine et son titre général du livre est donné dans une balise fille. Les chapitres du livre sont des balises possédant un attribut level indiquant leur niveau hiérarchique et ayant alors un élément fils dont le texte est le titre. Par ailleurs, les niveaux sont imbriquées les uns dans les autres. LES LANGAGES XML Le langage XML... Les balises XML... Les attributs XML... Le langage XSLT... L'nstruction template... L'instruction value-of......

31 30 Cours XML –M2-CCI / Y.Laborde 30 = '1']" Sélectionne les éléments title directement en dessous de chap dont lattribut level vaut '1 Prédicats pour les attributs des nœuds

32 31 Cours XML –M2-CCI / Y.Laborde 31 Une table des matières simple (2) Titre : Lexpression Xpath commence par «. » : chap est recherché parmi les enfants des nœuds contextes trouvés (ici, un BOOK) Par rapport au nouveau contexte chap, on désigne les enfants title. Idem pour toutes les autres.

33 32 Cours XML –M2-CCI / Y.Laborde 32 Classer avec xsl:sort Les éléments sont extraits avec for-each ; mais avant dêtre traités un à un, ils sont classés par xsl:sort – ici par ordre alphanumérique («ascending») – en fonction du contenu du select de sort. Ici les films sont donc classés par leurs titres.

34 33 Cours XML –M2-CCI / Y.Laborde 33 xsl:sort (syntaxe)

35 34 Cours XML –M2-CCI / Y.Laborde 34 Ajouter un index : xsl:number A. 15:00, B. 18:00, C. 21:00, D. 22:00 Les positions sont traduites d'après le format de linstruction number

36 35 Cours XML –M2-CCI / Y.Laborde 35 xsl:output Indication du jeu de caractères de la sortie : encoding='...' Indication du type de sortie (text, xml, html...) : method='...'

37 Un peu plus sur XPath XPath permet décrire des « chemins XML » mais également dutiliser des fonctions et des opérateurs.

38 37 Cours XML –M2-CCI / Y.Laborde 37 XPath : les « chemins » en quatre points XPath permet de pointer sur des éléments de l'arborescence du document. Une expression XPath est constituée (1) d'étapes (steps), séparées par des slashs, « / » Chaque étape contient (2) un nœud asserté (node test) qui sert à spécifier le nœud par : le nom dun élément, dun attribut, dun espace de nom ou « * » (tous les types de nœuds : élts, attr, esp.noms). Optionnellement lexpression peut avoir (3) des prédicats (à droite de chaque node test) et (4) des axes (à gauche de chaque node test) L'expression retourne un sac de nœuds (node set) : les nœuds qui correspondent au dernier nœud asserté – si elle en trouve. "/CINEMA/SALLE[NO="1"]/SEANCES" Axe implicite.../.../.../Etapes/.../...[Prédicat]*

39 38 Cours XML –M2-CCI / Y.Laborde 38 (1) les étapes

40 39 Cours XML –M2-CCI / Y.Laborde 39 Quelques cas... //SEANCE est-il identique à //SEANCES/SEANCE ? Note : "//..." part de la racine : //p : tous les p du document, à toute profondeur depuis la racine.//p : tous les p sous le nœud contexte Différences entre : //BBB/p Tous les p du document directement en dessous de tous les BBB //BBB//p Tous les p du document en dessous de tous les BBB Avec //BBB//p, chaque p est sélectionné une fois dans le sac de nœuds résultant, même si plusieurs BBB sont imbriqués et font différents chemins valides vers le même p : il ny a jamais de doublon dans un sac de nœuds.

41 40 Cours XML –M2-CCI / Y.Laborde 40 (2) : les node tests (ou tests de nœuds) Chaque étape comprend un node test Le nœud cherché peut être une balise, un attribut ) ou un nœud texte text() (qui renvoie le texte des nœuds sans celui de leurs fils) Existent également des valeurs génériques : * (tout type de nœud : élts, (tout attribut), node() (tout nœud : texte, commentaires…) Le point ". " indique le contexte actuel Le double point ".. " permet de remonter d'un niveau dans l'arborescence.

42 41 Cours XML –M2-CCI / Y.Laborde 41 Exemples : retourne la valeur de lattribut id, tandis que : retourne tous les nœuds p qui ont un attribut id Ne pas confondre un nœud texte et le texte contenu : /BOOK/text/front : retourne tous les nœuds front directement enfants de text ; avec value-of retourne la valeur (le texte) du premier nœud front, sans les balises imbriquées /BOOK/text/front/text() : retourne le texte de tous les nœuds front directement enfants du noeud text ; avec value-of retourne la valeur (le texte) du premier nœud front Ne retourne rien ! Il n'y a pas de nœud texte descendant d'un attribut. retourne la « valeur » de lattribut) /SALLE/node() : retourne tous les types de nœuds fils de SALLE (éléments, commentaires...)

43 42 Cours XML –M2-CCI / Y.Laborde 42 (3) : les prédicats Chaque étape peut comprendre un ou plusieurs prédicat, qui est une expression XPath entre crochets placée après le node test. sélectionne les chap dont l'attribut title vaut '1 retourne tous les nœuds p ayant les attributs id et name retourne tous les nœuds ayant un attribut valant 'bbb' Le prédicat permet de filtrer les nœuds en ajoutant des conditions. Lexpression dans le prédicat a deux valeurs : vraie ou fausse. Lexpression est convertie si besoin en valeur booléenne : => est faux : un sac de nœud vide, le nombre zéro ou la chaîne vide, => est vrai : tout le reste. Dans le premier exemple, lexpression retourne déjà une valeur booléenne grâce à lopérateur « = » //p[name ] : sélectionne tous les p contenant un élément enfant nam e. p est le contexte de lexpression Xpath name. : retourne tous les nœuds ayant un attribut NO //p[../liste] : retourne tous les p fils directs de liste

44 43 Cours XML –M2-CCI / Y.Laborde 43 Fonctions XPath utiles Les conditions sur la position dun nœud sont souvent utilisées dans les prédicats. Les fonctions last() et position() renvoie respectivement le numéro cardinal du dernier nœud dun sac de nœuds et le numéro cardinal du nœud courant. Note : last() et position() sécrivent toujours avec les parenthèses et sans argument. Plutôt que [position() = 1], pour demander les nœuds qui sont le premier enfant de leur père, on peut utiliser une notation courte : [1].

45 44 Cours XML –M2-CCI / Y.Laborde 44 Exemples autre notation -->

46 Element text Element p Element p Element p Element p Text Element name Text id='p5' n='8'

47 46 Cours XML –M2-CCI / Y.Laborde 46 (4) : les axes Dans la forme abrégée de la syntaxe XPath utilisée jusqu'ici, les node test sont cherchés parmi les enfants avec /, ou parmi les descendants avec //. Il est donc impossible avec cette notation d'indiquer un chemin qui remonte vers les autres directions : ancêtres, parents, ou frères du nœud contexte. Cest ce que permettent les axes.

48 47 Cours XML –M2-CCI / Y.Laborde 47 XML, une histoire de famille Document / Prologue Element ROOT corpus Element text Element p Element p Element p Text Element name Text Frères précédents Parent Enfants Descendants Ascendants Frères suivants Element p

49 48 Cours XML –M2-CCI / Y.Laborde 48 Document / Prologue Element ROOT FitnessCenter Element Member Element Name Element Phone Element FavoriteColor Text Jeff Text Text lightgrey Element Name Text Jeff Frères précédents Ascendants Frères suivants Parent Enfants Descendants XML, une histoire de famille Element Phone

50 49 Cours XML –M2-CCI / Y.Laborde 49 Noter les axes On peut désigner à chaque étape d'autres directions que laxe parent/enfant grâce à une « notation longue » : le note test est précédé du nom de l'axe suivi de "::" Exemple select="./ancestor::div" Select="./ancestor::SALLE/TITRE following-sibling::node() | preceding-sibling::node() Recherche tous les div parmi les ascendants Sélectionne tous les nœuds descendant du même père respectivement à droite et à gauche Remonte aux SALLE ascendant, puis descend à son enfant direct TITRE En anglais : « sibling » signifie « enfant de même parent »

51 50 Cours XML –M2-CCI / Y.Laborde 50 Document / PI Element ROOT FitnessCenter Element Member Element Name Element Phone Element Phone Element FavoriteColor Text Jeff Text Text Text lightgrey ancêtre Frêre précédent Frêres suivants ancestor::* sélectionne tous les ancêtres, c-à-d : - Member - FitnessCenter preceding-sibling::* sélectionne tous les frères à gauche, c-à-d : - Name following-sibling::* sélectionne tous les frères à droite, c-à-d : - Phone - FavoriteColor

52 51 Cours XML –M2-CCI / Y.Laborde 51 Document / PI Element ROOT FitnessCenter Element Member Element Name Element Phone Element Phone Element FavoriteColor Text Jeff Text Text Text lightgrey descendants À partir de FitnessCenter, descendant::* ou //* sélectionne tous les descendants, c-à-d : - Member - Name - Phone, etc.

53 52 Cours XML –M2-CCI / Y.Laborde 52 Liste des axes ancestor : sélectionne tous les ancêtres ancestor-or-self : sélectionne le nœud courant et tous ses ancêtres attribute : sélectionne tous les attributs child : sélectionne tous les enfants (descendants directs) descendant : sélectionne tous les descendants descendant-or-self : sélectionne le nœud courant plus tous ses descendants following : sélectionne tout ce qui suit le nœud courant dans le document following-sibling : sélectionne tous les frères à droite namespace : sélectionne tous les namespaces ouverts parent : sélectionne le parent preceding : sélectionne tout ce qui précède le nœud courant dans le document preceding-sibling : sélectionne tous les frères à gauche self : sélectionne le nœud courant

54 53 Cours XML –M2-CCI / Y.Laborde 53 Abréviations utiles L'axe « child:: » est l'axe par défaut » abrège l'axe « attribute:: » « // » abrège laxe« descendant-or-self:: » «. » abrège « self:: » «.. » abrège l'axe « parent:: » « / » abrègela racine

55 54 Cours XML –M2-CCI / Y.Laborde 54 Principaux opérateurs Opérateurs arithmétiques +, -, *, div, mod Note : une balise XML peut contenir un tiret, il faut donc encadrer - despace. Operateurs booléens : not, and, or Operateurs relationnels :, =, =, !=, | (ou), & (et) doivent être notés < et > pour satisfaire aux contraintes XML = =!= <>=<=>=!= Pour exprimer : Noter :

56 55 Cours XML –M2-CCI / Y.Laborde 55 Rappel XML : ordre des éléments et valeur des attributs On ne peut pas accéder aux attributs par leur numéro d'ordre : ils sont accessibles seulement par leur nom, leur ordre n'est pas signifiant. impossibles ou Ainsi, dans la conception d'un document XML, il ne faut pas confier d'information à l'ordre des attributs. Les éléments correspondent un peu aux structures de données informatiques dites "tableaux" et les attributs aux tableaux associatifs ou "hashes"

57 Expression de conditions Opération sur les chaînes

58 57 Cours XML –M2-CCI / Y.Laborde 57 xsl:if Il existe au moins une séance de programmée ! Permet de filtrer ou de choisir entre différentes possibilités. Si lexpression XPath renvoie une valeur non nulle ou vraie, alors le contenu de xsl:if est exécuté.

59 58 Cours XML –M2-CCI / Y.Laborde 58 Exemples de xsl:if Remarquez quen fait, cest équivalent à :

60 59 Cours XML –M2-CCI / Y.Laborde 59 Dans le contexte de xsl:if, XPath retourne une valeur booléenne Une expression XPath peut être utilisée avec xsl:if pour voir si elle retourne vrai ou faux : elle retourne vrai si elle retourne : - un sac de nœuds non vide - une valeur numérique différente de 0 - une valeur booléenne vraie - une chaîne de caractères non vide elle retourne faux dans les cas contraires

61 60 Cours XML –M2-CCI / Y.Laborde 60 xsl:choose [action] [action] [action]

62 61 Cours XML –M2-CCI / Y.Laborde 61 Extraire une sous-chaîne Dans un nœud texte, on peut extraire une sous chaîne. ex. Extraire lannée seule dans "février-2009" Utiliser la fonction XPath " substring-after() " qui prend deux arguments : La chaîne source La chaîne à partir de laquelle sélectionner le texte (pattern). (année: )

63 62 Cours XML –M2-CCI / Y.Laborde 62 Extraire une sous-chaîne février-2010 substring-after(docDate, -) 2010 docDate XPath dans ce cas retourne une chaîne, et non plus un « sac de nœuds ». En attendant XSLT 2.0 et les expressions régulières, les fonctions chaînes de XPath paraissent rudimentaires :

64 63 Cours XML –M2-CCI / Y.Laborde 63 Fonctions sur des chaînes

65 64 Cours XML –M2-CCI / Y.Laborde 64 Par exemple, on veut récupérer les éléments en italique ayant la valeur IT dans peut également contenir "IT BO" ou " BO IT" pour marquer italique + gras, etc. On ne les extraira pas avec : = 'IT']", qui recherchera avec comme valeur exacte IT. contains permet ici de récupérer tous les italiques : 'IT')]" Tester la présence dune sous-chaîne

66 65 Cours XML –M2-CCI / Y.Laborde 65 Ces fonctions ne sont utiles que sur des contenus très normalisés. XSLT nest pas adapté au traitement de chaînes de caractères. Il est impossible par exemple de sen servir pour extraire les phrases d'un texte en se basant sur la ponctuation. XSL et le traitement des chaînes

67 Quantifier

68 67 Cours XML –M2-CCI / Y.Laborde 67 count(), la fonction magique Cette fonction XPath permet de retourner le nombre de nœuds trouvés dans lexpression XPath entre parenthèses Permet de dénombrer tout phénomène exprimé en XML

69 68 Cours XML –M2-CCI / Y.Laborde 68 Utiliser des variables Jusquà présent on a systématiquement mis le résultat dune expression XPath dans xsl:value-of, qui affiche directement le résultat. Mais si lon veut stocker et manipuler la valeur, pour afficher par exemple un pourcentage plutôt que le chiffre brut ?

70 69 Cours XML –M2-CCI / Y.Laborde 69 xsl:variable hello world hello Nom de la variable : Valeur de la variable :

71 70 Cours XML –M2-CCI / Y.Laborde 70 Stocker une valeur calculée Définition de 3 variables : Calcul du pourcentage de chapitres de niveau 1 : Calcul du pourcentage de chapitres de niveau 2 : Évite de recalculer plusieurs fois count(//chap) Code plus rapide et plus modulaire (raffinement)

72 71 Cours XML –M2-CCI / Y.Laborde 71 Portée des variables Une variable reste utilisable dans tout lélément dans lequel elle a été déclarée dans la feuille de style et dans les sous-éléments de celui-ci. Une fois sortie de cet élément, elle est détruite Une variable déclarée directement comme enfant de xsl:stylesheet peut être utilisée dans toute la feuille de style. Une variable déclarée dans un élément ( xsl:template, xsl:if, etc. ) ne peut être utilisée que dans cet élément et ses sous-éléments.

73 72 Cours XML –M2-CCI / Y.Laborde 72 Quelques fonctions arithmétiques

74 73 Cours XML –M2-CCI / Y.Laborde 73 Utiliser un template pour calculer les pourcentages Problème : on répète n fois la même opération pour calculer des pourcentages Solution : factoriser cette opération XSLT permet de créer une sous-routine (un template) qui retourne une valeur en fonction d'arguments

75 74 Cours XML –M2-CCI / Y.Laborde 74 Appel du template xsl:with-param permet de transmettre les arguments xsl:param permet de nommer les arguments reçus Définition du template Déf. des 3 variables comme précédemment

76 75 Cours XML –M2-CCI / Y.Laborde 75 L'intérêt d'une approche "procédurale" Nous avons vu une façon d'utiliser XSLT où l'on sait où chercher l'information à extraire. Cette démarche est adaptée pour les cas où l'on fait une extraction de faible volume dans des endroits précis de la structure. Mais…

77 L'approche par templates

78 77 Cours XML –M2-CCI / Y.Laborde 77 L'intérêt d'une approche par templates Si l'on veut – plutôt qu'extraire un élément – recopier la totalité du document sauf un élément ? Ou si l'on veut extraire un grand nombre d'éléments ? XML a une structure non limitée : il faudrait un nombre irréaliste de for-each et if Il est plus économique dans ce cas d'indiquer ce que l'on veut enlever ou modifier que ce que l'on veut extraire.

79 78 Cours XML –M2-CCI / Y.Laborde 78 Plutôt que de décrire des opérations, on dessine un nouvel arbre en indiquant seulement les points à modifier de l'arbre existant.

80 79 Cours XML –M2-CCI / Y.Laborde 79 Retour en arrière Toutes les feuilles de style commençaient par Cet élément xsl:template sert à regrouper des actions à faire à un "moment" précis Ce moment est désigné attend une expression XPath, ici "/" indique la racine du document. Un template avec match="/" est exécuté en premier, puisque la racine est la première chose que cherche le processeur.

81 80 Cours XML –M2-CCI / Y.Laborde 80 Comment utiliser les templates ? Il suffit de prévoir pour lélément que lon veut traiter un élément template avec qui lui peut correspondre à tout nœud : élément, attribut ), texte (avec text() ) ou commentaire (avec comment() ). Exemple : un template qui sappliquera à chaque élément dans le document :...

82 81 Cours XML –M2-CCI / Y.Laborde 81 Exemple : mettre un titre HTML à chaque texte Cette nouvelle règle permet de relancer lanalyse et donc de la continuer comme le traitement du document...

83 82 Cours XML –M2-CCI / Y.Laborde 82 xsl:apply-templates Dans l'exemple précédent, apply-templates sert à relancer l'analyse (la recherche d'un template avec un attribut match qui correspond) dans la sous-arborescence (les descendants) du nœud traité par le template Si on ne met pas apply-templates le processeur est « éteint », il abandonne tout ce qui est en deçà (i.e. la sous-arborescence) !

84 83 Cours XML –M2-CCI / Y.Laborde 83 Que fait le processeur ? Après avoir construit une représentation du document, le processeur rentre dans l'arborescence. Il cherche dans la feuille de style un template qui correspond à sa première position, qui est " / " S'il n'en trouve pas, il passe aux descendants et recommence. Sil trouve un nœud texte, il imprime son contenu.

85 84 Cours XML –M2-CCI / Y.Laborde 84 Document / PI Element corpus Element text Element p Element p Element p Element p Text Element name Text Le processeur parcours les éléments dans un ordre prévisible et leurs attributs dans un ordre non prévisible.

86 85 Cours XML –M2-CCI / Y.Laborde 85 Tant que parmi les descendants le processeur ne trouve pas de templates à appliquer, il continue à descendre dans lordre enfant / frère, en imprimant les nœuds texte. Element p Element p Text Element name Si un template avec match="p" est défini, le processeur lapplique, sinon il descend au nœud texte, limprime, et remonte au p suivant Idem : sil nexiste pas de template pour name, passe aux nœuds enfants Que fait le processeur ? (suite)

87 86 Cours XML –M2-CCI / Y.Laborde 86 Element p Element p Text Element name Ce template est exécuté à chaque p rencontré. Une balise p est ouverte, lanalyse reprend dans la sous- arborescence (dautres templates peuvent être exécutés), puis le p est fermé M. *** Toutes les balises name et leurs contenus sont remplacés par « M. *** ». Que fait le processeur ? (suite)

88 87 Cours XML –M2-CCI / Y.Laborde 87 Lenchâssement Dans un template, l instructions, xsl:apply-templates a un effet spécial : elle relance la recherche de templates parmi les enfants. Quand le processeur a fini de traiter les descendants, il reprend et termine lexécution du template d'où il est parti du fait de l'instruction apply-templates Sinon, il ne rentre pas dans la sous-arborescence. Avec les xsl:apply-template les templates sont donc "enchâssés" autant de fois que nécessaire pendant l'exécution. xsl:template permet de traiter les éléments inclus, contrairement à value-of

89 88 Cours XML –M2-CCI / Y.Laborde 88 L'enchâssement (2) 1. Ligne imprimée en tout premier 2. Passe à la descendance, alors que le template n'est pas fini. Imprime le texte contenu dans les éléments sauf p qui est traité explicitement 3. Tous les p sont traités mais pas leurs descendants car le processeur n'a pas été relancé avec xsl:apply- templates ! 4. Quand la descendance est traitée, "remonte" de "templates appelant" en "templates appelant" et fini chacun. Cette ligne est donc imprimée en tout dernier

90 89 Cours XML –M2-CCI / Y.Laborde 89 Utilisation de xsl:apply-templates On peut mettre plusieurs xsl:apply-templates dans le même template. o Cest le cas lorsque lon ne veut pas parcourir tout le document mais seulement certaines parties. o Cest aussi le cas lorsque lon veut procéder à lanalyse selon un ordre particulier ou que lon veut traiter les attributs après les descendants. o Etc. 1. les salles 2. les numéros de salles

91 90 Cours XML –M2-CCI / Y.Laborde 90 apply-templates : Cinéma: Salle : Ici on passe directement aux Ici on devrait également utiliser xsl:apply- templates plutôt que for-each (qui reste une approche procédurale) !!!

92 91 Cours XML –M2-CCI / Y.Laborde 91 Document transformé : Cinéma: Epée de bois Salle 1 : 15:00 18:00 21:00 Salle 2 22:00 apply-templates :

93 92 Cours XML –M2-CCI / Y.Laborde permet ici de descendre directement plus bas dans la sous-arborescence en "sautant" toute une partie. On peut aussi désigner un endroit qui n'est pas dans la sous arborescence (en évitant de produire une boucle infinie !). Note : par défaut, un xsl:apply-templates contient qui lui fait sélectionner ses enfants apply-templates :

94 93 Cours XML –M2-CCI / Y.Laborde 93 Supprimer les balises Une feuille de style contenant ce seul template recopie le document source en enlevant toutes les balises : EN effet, par défaut, dans tous les nœuds où il ne trouve pas de xsl:template qui sapplique, le processeur imprime le contenu pour les nœuds de type texte et passe aux enfants pour les autres types de nœuds.

95 94 Cours XML –M2-CCI / Y.Laborde 94 Supprimer du texte Plutôt que d'indiquer au processeur des chemins à parcourir qui excluent certaines parties de texte, on peut modifier son action par défaut (recopier le texte) sur les nœuds à exclure :

96 95 Cours XML –M2-CCI / Y.Laborde 95 La clef : les templates par défaut Pourquoi, par défaut, le processeurs descend dans l'arborescence et imprime les nœuds textes ? Une feuille de style a deux templates par défaut ; Ces templates sont appliqués quand le processeur ne trouve pas dans la feuille de style un template correspondant au nœud traité Correspond à la racine (/) ou (|) à tout élément (*). Action = avancer le processeur aux enfants (incluant élément, attribut et nœud texte car apply-template a par et leur appliquer les templates. Correspond à tout nœud texte. Action = imprimer son contenu

97 96 Cours XML –M2-CCI / Y.Laborde 96 Quand plusieurs templates peuvent sappliquer… pourquoi le processeur applique : et non le template par défaut :, alors que les deux sont en concurrence ? => Le processeur applique le template le plus spécifique. On peut utiliser cette propriété pour prévoir un cas général et des cas particuliers : sapplique à tous les : sapplique à tous les aînés des fratries.

98 97 Cours XML –M2-CCI / Y.Laborde 97 Redéfinir les templates par défaut On peut redéfinir les templates par défaut pour modifier le comportement du processeur. Si on ajoute le processeur parcours toujours l'arborescence mais n'imprime plus les nœuds textes.

99 98 Cours XML –M2-CCI / Y.Laborde 98 Exemple de modification des templates par défaut On veut extraire du document seulement le contenu des nœuds REMARQUE. Dans ce cas de figure la majorité du document est à exclure, seul un tag est à conserver. On peut utiliser deux possibilités : 1. Indiquer le chemin qui mène aux nœuds voulus 2. Laisser le cheminement par défaut dans l'arborescence, mais modifier le comportement par défaut pour ne pas recopier les nœuds textes

100 99 Cours XML –M2-CCI / Y.Laborde 99 Méthode 1 Laisser le comportement par défaut, mais pour mener directement sur les REMARQUE

101 100 Cours XML –M2-CCI / Y.Laborde 100 Méthode 2 On modifie le comportement par défaut : on laisse le cheminement dans l'arborescence, mais les nœuds textes ne sont plus recopiés, sauf pour le nœud voulu.

102 101 Cours XML –M2-CCI / Y.Laborde 101 Pour résumer (1) Le processeur parcours larborescence, piloté par des templates, qui peuvent l'arrêter à des endroits précis, exécuter des instruction XSLT, et le relancer Quand il ne trouve pas de template à appliquer, le processeur parcours l'arborescence, relancé par un template par défaut, dans un ordre enfants vers frères, et imprime le texte. A moins quun template capte le processeur dans larborescence et ne le relance pas, larbre est parcouru entièrement, et tous les nœuds textes sont répliqués.

103 102 Cours XML –M2-CCI / Y.Laborde 102 Pour résumer (2) Avec des templates on pilote le processeur : En insérant des templates à des points avec match En relançant ou non avec apply-templates En sélectionnant des sous arbres En utilisant ou modifiant les templates par défaut. Lensemble de ces moyens daction permet d'utiliser cette approche déclarative (par template) comme la plus économique pour décrire une transformation de larborescence source en une arborescence cible.

104 Grouper

105 104 Cours XML –M2-CCI / Y.Laborde 104 Extraire les valeurs différentes Comment produire une liste sans doublon des valeurs ? Avec la liste produite peut contenir plusieurs fois la même valeur. Comment regrouper les nœuds sur une valeur commune ? Par exemple à partir de plusieurs tag correction ( ), les classer par correcteur sans les connaître à l'avance.

106 105 Cours XML –M2-CCI / Y.Laborde 105 Solution : xsl:key xsl:key déclare une variable dans laquelle des nœuds sont regroupés par "clefs". xsl:key a trois attributs obligatoires : donne un nom à la : une expression XPath indiquant les nœuds à : une expression XPath indiquant quelle valeur utiliser pour grouper ces nœuds.

107 106 Cours XML –M2-CCI / Y.Laborde 106 On recherche les tags corr On les groupes selon la valeur de leur (le contexte de cette expression XPath est le nœud corr ) en se dessaisissant... dessine déjà les traits... l'original... notre DB CF dessaisissant dessine l'original notre ClefsNœuds collectés

108 107 Cours XML –M2-CCI / Y.Laborde 107 Lélément key définit un groupe de nœud, lui attribue un nom et définit lexpression (la clef) qui permet de différencier les nœuds au sein de ce groupe.

109 108 Cours XML –M2-CCI / Y.Laborde 108 Utilisation Une fois créée une variable xsl:key peut être utilisée pour obtenir les nœuds associés à une clef. la fonction XPath key(nom_table, clef) retourne tous les nœuds associés à l'entrée clef dans la table nom_table Texte d'origine : Texte corrigé : Texte d'origine : désaisissant Texte corrigé : dessaisissant Texte d'origine : desine Texte corrigé : dessine Appliqué à l'exemple précédent :

110 109 Cours XML –M2-CCI / Y.Laborde 109 Trouver les valeurs uniques Avec la fonction key() on ne peut que retrouver les nœuds associés à une clef, on ne peut pas lister directement les clefs d'une variable xsl:key. Pour une liste de valeurs différentes, par exemple la liste des valeurs utilisées il faut utiliser une méthode détournée : utiliser une expression qui extrait un élément de chaque groupe correspondant à une clef. Par exemple ne prendre que les éléments dont l'index dans le groupe dont il fait parti est 1 Pour savoir si un nœud est le même que le premier retourné par un groupe, on peut comparer la valeur que retourne generate-id() qui retourne un identifiant unique constant pour chaque nœud.

111 110 Cours XML –M2-CCI / Y.Laborde 110 Exemple ... key(Langues',.) retourne le groupe des nœuds doublons du nœud traité. key(Langues',.)[1] retourne le premier élément du groupe generate-id retourne un identifiant unique pour un nœud. L'id du nœud contexte doit être le même que l'id du premier nœud du groupe des nœuds doublons. On sélectionne uniquement le premier nœud de chaque groupe, donc un nœud par groupe.

112 111 Cours XML –M2-CCI / Y.Laborde 111 Cette méthode peut être utilisée avec un nœud différent entre match et use : Langues Nombre d'éléments dans cette langue

113 112 Cours XML –M2-CCI / Y.Laborde peut être n'importe quelle expression calculée. Par exemple on peut grouper les p en fonction du nombre de notes quils contiennent xsl:key name="pParNote" match="//p" use="count(note)« On peut imaginer maintenant de regarder pour chaque groupe la position moyenne en début ou fin de texte, etc.

114 Ajout dinformation, Editer le corpus source

115 114 Cours XML –M2-CCI / Y.Laborde 114 Jusquici XSLT était utilisé pour extraire des données, pas pour éditer le corpus source. XSLT impose de nombreuses limites à une utilisation pour ajouter de linformations : il est difficile de « recopier » à lidentique. Lédition dun corpus avec XSLT ne peut donc se faire que sur des corpus très normalisés.

116 115 Cours XML –M2-CCI / Y.Laborde 115 Recopier à lidentique : copy-of

117 116 Cours XML –M2-CCI / Y.Laborde 116 xsl:copy En utilisant récursivement la fonction copy dans un template, on peut obtenir cette duplication et définir des templates pour ajouter des modifications

118 117 Cours XML –M2-CCI / Y.Laborde 117 xsl:element et xsl:attribut

119 118 Cours XML –M2-CCI / Y.Laborde 118 Exemple 1 : déplacer un élément Dans un corpus les notes sont regroupées à la fin du document. Des éléments ptr ont permis denregistrer lendroit des appels de note ; leur permet de les associer à la note dont correspond Le but est de remonter les notes, conformément aux prescription TEI, directement à leur point dinsertion dans le texte et supprimer les pointeurs ptr.

120 119 Cours XML –M2-CCI / Y.Laborde 119 Cf. ci-joint "ajout.xsl"

121 Conclusion

122 121 Cours XML –M2-CCI / Y.Laborde 121 Limites d'XSLT Délicat pour l'ajout d'annotation au corpus Délicat de contrôler complètement la réécriture Lourd et insuffisant pour la manipulation des chaînes de caractère (les nœuds texte) Prévu pour la manipulation de la structure, de l'encodage plus que du contenu des nœuds textes Inutilisable avec de très gros documents Prévoir dix fois la taille du fichier en mémoire vive. Ces limites sont dues à l'approche "arborescente" : XSLT permet de manipuler une arborescence en mémoire. Une autre représentation du contenu, dite "séquentielle" permet plus de précision et nest pas limité par la taille du document, mais demande lutilisation dun langage de programmation.

123 122 Cours XML –M2-CCI / Y.Laborde 122 Efficacité comme langage de requête Deux stratégies à cumuler : à dominante procédurale ou déclarative. Economie et plasticité grâce à lutilisation de templates et templates par défaut. Adapté à lextraction dinformation, la projection de sous- corpus ou la conversion vers dautres formats. La version 2 de XSLT apportera des améliorations (expressions régulières, typage, regroupement), sans changer cette dominante « extraction », plus que « édition », dans la « transformation »


Télécharger ppt "XSLT : XML Stylesheet Language Transformation & XPath : langage dadressage de parties de documents XML Une introduction à XSLT & Xpath pour l'analyse."

Présentations similaires


Annonces Google