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 Une introduction à XSLT pour l'analyse de corpus Sylvain Loiseau.

Présentations similaires


Présentation au sujet: "XSLT : XML Stylesheet Language Transformation Une introduction à XSLT pour l'analyse de corpus Sylvain Loiseau."— Transcription de la présentation:

1 XSLT : XML Stylesheet Language Transformation Une introduction à XSLT pour l'analyse de corpus Sylvain Loiseau

2 2 Introduction

3 3 Note : pour apprendre ce langage il est indispensable de disposer d’un processeur et de tester et modifier les exemples du diaporama.

4 4 « Feuille de style » et « transformation » Le programme XSLT est appelé une « feuille de style » La feuille de style est fournie, avec un document XML, à un programme (un « processeur XSLT ») Le processeur « transforme » le document en fonction des instructions de la feuille de style et produit en sortie un nouveau document. Processeur XSLT XSLT XML XML / HTML / texte

5 5 Principe de la transformation XSLT La feuille de style décrit des règles de transformation que le processeur applique au document Pour cette transformation on peut sélectionner des données dans le document source Les requêtes peuvent utiliser les noms et ordre des balises, noms et valeurs des attributs, contenu du texte, position dans l’arborescence (contexte), etc. On peut également manipuler ces données (tri, décompte, etc.) et ajouter des éléments nouveaux.

6 6 Le processeur transforme le document en un autre teiHeader fileDesc Text title Document XML source Transformation Document XML produit Racine truc Text machin Processeur Feuille de style XSLT : règles de la transformation

7 7 Exemples d’utilisation Rechercher des éléments du corpus –En utilisant toutes les propriétés du document Composer des sous corpus –Texte sans les, seulement les … Quantifications –Pourcentage des dans les Convertir d'un format à l'autre –XML vers Hyperbase, Unitexte, sans balise, etc.; ou vers des formats de lecture : HTML, PDF, Word, etc. Maintenance et enrichissement du corpus –Possibilité (limitée) d’ajouter de l’information

8 8 On ne maintient pas différentes versions du corpus pour les différents formats ou les différents sous-corpus On peut appliquer les mêmes feuilles de style à plusieurs corpus. Pas de programmation Intérêt du couple XML/XSLT

9 9 Objectif du diaporama Introduction aux principes et aux principales fonctions de XSLT Application pour l’utilisation de corpus. Proposer différentes approches pour les principales tâches : extraire des informations, calculer des valeurs numériques, convertir vers d’autres formats, lister des valeurs, et ajouter de l’information.

10 10 Hello, world Préfixé par « xsl: » = des instructions XSLT, ici d’organisation de la feuille de style Texte non-préfixé par « xsl: » : recopié littéralement en sortie Une première feuille de style

11 11 Résultat : Hello, world 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: ») Cette feuille de style ne contient que des éléments « littéraux » : elle n’extrait aucune information du document Ici les balises rajoutées sont du HTML : à partir du document on génère une page HTML. Le résultat de la transformation peut être ouvert et affiché dans un navigateur. (Fichier->Ouvrir dans Internet Explorer) Ce n’est pas obligatoire : on peut aussi écrire des balises non-HTML, ou ne mettre aucune balise dans le résultat.

12 12 Pour résumer Une feuille de style est un document XML –L'élément racine est xsl:stylesheet avec deux attributs obligatoires –La feuille de style contient un élément xsl:template 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

13 Extraire des informations

14 14 Extraire le texte contenu dans une balise Titre du corpus :

15 15 L'instruction xsl:value-of Remplacer cette instruction par le texte… … trouvée à cet endroit La valeur de l'attribut select est une expression XPath : elle désigne un endroit du document où aller chercher le texte.

16 16 "/TEI.2/teiHeader/fileDesc/titleStmt/title" Document / PI Element TEI.2 Element teiHeader Element … Element fileDesc Element … Element … Text Element title Text

17 17 Document / PI Element corpus Element text Element p Element p Element p Element p Text Element name Text Bien qu’il y ait plusieurs p, un seul chemin satisfait entièrement à l’expression (un seul p a un élément name )

18 18 XPath XPath est une autre recommandation, comprise dans XSLT XPath remplit la fonction de "sélectionner", "pointer" sur des éléments du document, tandis que XSLT organise, trie, etc. XPath retourne des nœuds de l'arborescence, par exemple des balises, des attributs, des nœuds textes. XPath permet de désigner les propriétés XML (nom des balises et attribut, contexte, ordre…)

19 19 xsl:value-of convertit le nœud en texte : supprime les balises incluses du texte et d'autres éléments … sur ce document XML XPath retourne un « nœud », XSLT converti en texte : du texte et d'autres éléments Instruction XSLT …

20 20 Si plusieurs éléments correspondent ? Il y a sans doute beaucoup de p qui correspondent à ce chemin. XPath les retourne tous, mais la fonction xsl:value-of ne sélectionne que le premier pour l'afficher.

21 21 xsl:for-each Si on veut traiter tous les nœuds retournés par l'expression XPath, il faut utiliser xsl:for-each On traite une à une les valeurs trouvées

22 22 Premier paragraphe éléments Second paragraphe Troisième paragraphe Premier éléments Second paragraphe Troisième paragraphe

23 23 Element TEI.2 Element text Element p Element p Element p Element p Text Element name Text

24 24 xsl:for-each regroupe d’abord les nœuds avec select, ensuite exécute le contenu de la boucle autant de fois qu’il y a de nœuds -L'expression XPath de select trouve quatre nœuds. S'il n'y avait qu'un seul élément, ou zéro, la boucle serait exécutée une ou zéro fois. -À chaque passage on traite un des nœuds trouvés, qui devient le "nœud contexte" durant ce passage et peut être désigné par «. ». -Dans le contenu de la boucle, on peut se déplacer à nouveau dans l'arborescence, mettre un élément littéral, etc.

25 25 Titre du corpus : Titre :

26 26 Element … Element TEI.2 Element TEI.2 Element TEI.2 Element TEI.2 Element … Text Element … Element title Element … ……… A chaque itération on applique une nouvelle recherche XPath

27 27 Le contexte Il y a toujours un nœud contexte quand une instruction est exécutée. –Ce nœud contexte peut être désigné explicitement avec ". " –C'est à partir du nœud contexte que sont évaluées les expressions XPath qui ne commencent pas par " / " : select="teiHeader/fileDesc/titleStmt" On désigne, par rapport au nœud contexte, un endroit de la sous-arborescence. On aurait pu écrire aussi : select="./teiHeader/fileDesc/titleStmt"

28 28 Une utilisation de xsl:for-each : faire une table des matières du corpus On ne sait pas combien de textes ni de titres de niveau 1, 2, etc., il peut y avoir Il faut traiter tous les textes, et dans chaque texte traiter les niveaux 1, dans chaque niveau 1 traiter les niveaux 2, etc. On peut donc imbriquer des boucles xsl:for-each

29 29 Une table des matières (1) On extrait le titre de chaque texte dans le corpus : Titre : Cf. ci-joint le fichier TableDesMatieres.xsl

30 30 Titre : Une table des matières (2) A l'intérieur du for-each, à chaque itération, le nœud contexte est donc l'élément TEI.2 traité On peut lancer une nouvelle boucle, dans la première, pour chercher les titres de niveaux 1 dans cet élément TEI.2 Par rapport au nouveau contexte ( div ), on désigne le premier enfant head L’expression XPath ne commence pas par « / » : text est recherché parmi les enfants du nœud contexte (le TEI.2 traité)

31 31 1.Ce qui est entre crochets est un prédicat : permet de filtrer les éléments sélectionnés. permet de désigner un attribut. 3.Respecter l’alternance guillemets / apostrophes = '1']" Sélectionne le premier élément head directement en dessous de div. On aurait pu écrire aussi :

32 32 Une table des matières (3) Titre :

33 33 Classer avec xsl:sort Les éléments sont extraits avec for-each ; 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 textes sont donc classés par leur titre).

34 34 Ajouter un index xsl:number permet de retourner un nombre correspondant à l'index de l'élément dans le node set. 1.Premier titre 2.Second Titre 3.Etc

35 35 xsl:output Indiquer le jeu de caractères de la sortie avec Indiquer le type de sortie (text, XML, HTML) avec mode (Permet d’ajouter le prologue XML ou HTML) http://www.w3.org/1999/XSL/Transform

36 Résumé XPath XPath permet d’écrire des « chemins XML » mais également d’utiliser des fonctions et des opérateurs.

37 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) : le nom d’un élément, attribut, etc. Optionnellement le node set peut avoir (3) un prédicat (à droite) et (4) un axe (à gauche) L'expression retourne un sac de nœuds : les nœuds qui correspondent au dernier nœud asserté – si elle en trouve.

38 38 (1) les étapes Le slash indique la relation parent / enfant Un double slash indique la relation parent / descendants (à toute profondeur dans la hiérarchie). –Note : temps de calcul accru Un slash en début fait partir l'expression de la racine du document : l'expression est donc indépendante du contexte.

39 39 Exemples teiCorpus.2/TEI.2/teiHeader //TEI.2[1]//p 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 : –//TEI.2/text//div/p Les p directement en dessous de tous les div –//TEI.2/text/div//p Tous les p en dessous de div directement en dessous de text Avec //TEI.2/text//div//p chaque p est sélectionné une fois dans le sac de nœuds résultant, même si plusieurs div sont imbriqués et font différents chemins valides vers le même p : il n’y a jamais de doublon dans un sac de nœuds.

40 40 (2) : les node tests Chaque étape comprend un node test Le nœud cherché peut être une balise, un attribut ) ou un nœud texte ( text() ) Existent également des valeurs génériques : * (tout (tout attribut), node() (tout nœud : texte, élément, attribut, PI, comment,…) Le point ". " indique le contexte actuel Le double point ".. " permet de remonter d'un niveau dans l'arborescence.

41 41 Exemples = 'italics']/text() teiCorpus.2/TEI.2[1]/teiHeader //p[../liste] : retourne la valeur de l’attribut Ne pas confondre un nœud texte et le texte contenu : –/TEI.2/text/front Retourne tout le texte contenu, sans les balises –/TEI.2/text/front/text() Retourne les nœuds texte directement enfants de front, avec value-of retourne uniquement le premier nœud : probablement un retour chariot… Ne retourne rien : il n'y a pas de nœud texte descendant d'un attribut. retourne déjà la

42 42 (3) : les prédicats Chaque étape peut comprendre un prédicat, qui est une expression XPath entre crochets placée après le node test. –Ex. sélectionne les div ayant un avec la valeur 'intro' Le prédicat permets de filtrer les nœuds en ajoutant des conditions. L’expression XPath dans le prédicat peut avoir deux valeurs : vraie ou fausse. L’expression XPath 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, l’expression retourne déjà une valeur booléenne grâce à l’opérateur « = » –Ex. //p[name] sélectionne tous les p contenant un élément enfant « name ». p est le contexte de l’expression XPath « name ».

43 43 Fonctions XPath utiles Les conditions sur la position d’un nœud sont souvent utilisées dans les prédicats. Les fonctions last() et position() renvoie respectivement le numéro du dernier nœud d’un sac de nœuds et le numéro 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].

44 44 Exemples

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

46 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 de l'étape précédente, ou parmi les descendants avec //. Il est donc impossible dans cette notation d'indiquer un chemin qui remonte vers les autres directions : ancêtres, parents, descendants, ou frères du nœud contexte :

47 47 Document / PI Element corpus Element text Element p Element p Element p Element p Text Element name Text Frêres Parent Enfants Descendants Ancêtres XML, une histoire de famille

48 48 On peut désigner à chaque étape d'autres directions que l’axe 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::TEI.2/teiHeader –Following-sibling::node() | preceding-sibling::node() Noter les axes Recherche le premier div parmi les ascendants Sélectionne n’importe quel type de nœud descendant du même père, soit à droite sinon à gauche Remonte au TEI.2 ascendant, puis descend à son enfant direct teiHeader

49 49 Document / PI Element FitnessCenter Element Member Element Name Element Phone Element Phone Element FavoriteColor Text Jeff Text Text lightgrey Parent Ancêtres Frêre précédent Frêres Suivants Element Name Text Jeff Enfant Descendants

50 50 Document / PI Element 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électionnera tous les ancêtres, c’est à dire : - Member - FitnessCenter preceding-sibling::* sélectionnera tous les frêres à gauche, c’est à dire : - Name following-sibling::* sélectionnera tous les frêres à droite, c’est à dire : - Phone - FavoriteColor

51 51 Document / PI Element FitnessCenter Element Member Element Name Element Phone Element Phone Element FavoriteColor Text Jeff Text Text Text lightgrey descendants À partir de FitnessCenter, descendant::* sélectionnera tous les descendants, c’est à dire : - Member - Name - Phone, etc

52 52 Liste des axes ancestor : sélectionne tous les ancestors ancestor-or-self : sélectionne tous les le noeud 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 noeud courant plus tous ses descendants following : sélectionne tout ce qui suit le noeud 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 noeud courant dans le document preceding-sibling : sélectionne tous les frêres à gauche self : sélectionne le noeud courant

53 53 Exemples

54 54 L'axe child:: est l'axe par défaut, abrège l'axe attribute::, "//" abrège descendant-or-self::, "." abrège l'axe self:: et ".." l'axe parent::.

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

56 56 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. impossible 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 58 xsl:if Le premier texte du corpus a un élément sourceDesc Permet de filtrer ou de choisir entre différentes possibilités. Si l’expression XPath renvoie une valeur non nulle ou vraie, alors le contenu de xsl:if est exécuté.

59 59 Exemples de xsl:if Ici c'est l'équivalent de :

60 60 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 trouve des nœuds. –Elle retourne faux si elle ne trouve rien.

61 61 xsl:choose Exprimer des alternatives avec xsl:choose. Le premier élément when dont le test est positif est exécuté. [action] [action] [action]

62 Titre : Source du texte : ( ),...

63 63 Extraire une sous-chaîne Dans un nœud texte, on peut extraire une sous chaîne. ex. Extraire la date seule dans " value = "2002" " Utiliser la fonction XPath " substring-after() " qui prend deux arguments –La chaîne source –La chaîne à partir de laquelle sélectionner le texte. substring-after(chaîne, pattern)

64 64 Exemple ( ), value = "2002" substring-after(docDate, ‘= ’) "2002" docDate

65 65 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 sont nombreuses mais rudimentaires:

66 66 Fonctions sur des chaînes substring-before(chaîne, pattern) substring-after(chaîne, pattern) substring(chaîne, index, len?) ex: substring(‘ ’, 2, 5) => ‘23456’ string-length(chaîne) ex: string-length(‘ ’) => 10 concat(chaîne cible, chaîne à ajouter) Deux fonctions sur les chaînes retournent une valeur booléenne : starts-with() ex: [action] contains(chaîne à tester, chaîne test) ex:

67 67 Exemple d'utilisation : on veut les éléments en italique, avec la valeur IT dans peut également contenir "IT BO" ou " BO IT" pour marquer italique + gras, etc. On ne les extraira pas si on utilise = 'IT']", qui recherchera avec comme valeur exactement IT. contains permet ici de récupérer tous les italiques 'IT')]"

68 68 Ces fonctions ne sont utiles que sur des contenus très normalisés : XSLT n’est pas adapté au traitement de chaînes de caractères. –Impossible par exemple de s’en servir pour extraire les phrases en se basant sur la ponctuation

69 Quantifier

70 70 count(), la fonction magique Cette fonction XPath permet de retourner le nombre de nœuds trouvés dans l’expression XPath entre parenthèses Permet de dénombrer tout phénomène exprimé en XML

71 71 Jusqu’à présent on a systématiquement mis le résultat d’une expression XPath dans xsl:value-of, qui affiche directement le résultat. Mais si l’on veut stocker et manipuler la valeur, pour afficher par exemple un pourcentage plutôt que le chiffre brut ? Utiliser des variables

72 72 xsl:variable xsl:variable permet de strocker puis de réutiliser une chaîne ou un fragment d’arbre. On crée une variable avec pour lui donner un : calculer sa valeur (expression XPath ou texte littéral) On désigne la valeur de la variable avec le nom préfixé de $ dans une expression XPath Hello World hello Nom de la variable : Valeur de la variable :

73 73 Stocker une valeur calculée Pourcentage de section de niveau 1 : Pourcentage de section de niveau 2 : Évite de recalculer plusieurs fois count(//div) Code plus lisible

74 74 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.

75 75 Quelques fonctions arithmétiques sum(node set) calcule la somme de toutes les valeurs présentes dans le node set round(numbre) arrondit number à l’entier le plus proche –Exemple round(2.3) retourne 2 Etc.

76 76 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

77 77 Pourcentage de section de niveau 1 : Pourcentage de section de niveau 2 : Appel d’un template xsl:with-param permet de transmettre les arguments xsl:param permet de nommer les arguments reçus

78 Utiliser des templates

79 79 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…

80 80 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.

81 81 Plutôt que de décrire des opérations, on dessine un nouvel arbre en indiquant seulement les points à modifier de l'arbre existant.

82 82 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.

83 83 Comment utiliser les templates ? Il suffit, pour l’élément que l’on veut traiter, de lui faire un élément template avec qui lui correspond. peut correspondre à tout nœud : élément, attribut ) ou texte (avec text() ). –Exemple : un template qui s’appliquera à chaque élément TEI.2 dans le document :...

84 84 Exemple : mettre un titre HTML à chaque texte nouveau texte :

85 85 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 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 dessous

86 86 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. S’il trouve un nœud texte, il imprime son contenu.

87 87 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 (les attributs d'un élément dans un ordre non prévisible)

88 88 Tant que parmi les descendants le processeur ne trouve pas de templates à appliquer, il continue à descendre dans l’ordre 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 l’applique, sinon il descend au nœud texte, l’imprime, et remonte au p suivant Idem : s’il n’existe pas de template pour name, passe aux nœuds enfants

89 89 Si un template correspond, le processeur l’exécute, et ne passe aux descendants que lorsqu’il est explicitement relancé avec l’instruction xsl:apply-templates Element p Element p Text Element name Ce template est exécuté à chaque p rencontré. Une balise p est ouverte, l’analyse reprend dans la sous- arborescence (d’autres templates peuvent être exécutés), puis le p est fermé M. *** Toutes les balises name et leur contenu sont remplacés par « M. *** ».

90 90 L’enchâ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 l’exé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

91 91 L'enchâssement (2) 1. Imprimé en premier 2. Passe à la descendance, alors que le template n'est pas fini. Imprime le texte contenu dans les éléments sauf p 3. Tous les p sont traités 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

92 92 Utilisation de xsl:apply-templates On peut mettre plusieurs xsl:apply-templates dans le même template. 1. les ref 2. les id

93 93 apply-templates : Voir les deux schémas permet de préciser au processeur où reprendre la recherche de templates Ici on évite de recopier les header, front et back, en passant directement aux p

94 94 Document / PI Element corpus Element text Element p Element p Element p Element p Text Element name Text …

95 95 Element p Element p Element p Element p Text Element name Text Pour chacun des fragments désignés par select, la recherche de templates et le parcours dans la sous- arborescence reprend

96 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, voire relancer l'analyse à la racine avec un select="/" qui fait boucler indéfiniment. Note : par défaut, un xsl:apply-templates contient donc qui le fait sélectionner ses enfants

97 97 Supprimer les balises Une feuille de style contenant ce seul template recopie le document source en enlevant toutes les balises : Par défaut, dans tous les nœuds où il ne trouve pas de xsl:template qui s’applique, le processeur imprime le contenu pour les noeuds de type texte et passe aux enfants pour les autres types de nœuds.

98 98 select : exemple d'utilisation On veut recopier le texte du corpus sans balises, et sauter les header du corpus et des textes. Dans ce cas de figure, la majorité du corpus est recopié, et c'est seulement un tag dont le contenu est à exclure. La méthode la plus économique consiste donc à laisser le processeur recopier par défaut, et indiquer le tag à exclure.

99 99 Méthode 1 select permet de paramétrer le chemin du processeur pour exclure les headers

Présentations similaires


Annonces Google