36
XML XPATH & XSLT

XML Xpath & XSLT

Embed Size (px)

Citation preview

Page 1: XML  Xpath & XSLT

XML XPATH & XSLT

Page 2: XML  Xpath & XSLT

INTRODUCTION

XPath pour XML Path Langage

XPath est un standard XML qui définit des règles grammaticales pour identifier des noeuds ou des ensembles de noeuds dans des documents XML.

XPath est un standard W3C

Page 3: XML  Xpath & XSLT

XPATH TERMINOLOGIES

• XPath se représente le document XML en tant qu’arbre

– dont la racine est l’élément racine du document XML

– les noeuds sont les différents éléments et attributs du XML

root

element

element

attribute

text

namespace

comment

processing-instruction

Page 4: XML  Xpath & XSLT

• Les relations entre nœuds :– Parent (parent) : l’élément contenant– Fils (childrens) : les éléments contenues– Fréres (siblings) : les éléments ayant le même parent– Ancetres (ancestors) : l’élément parent, le parent du

prent, …– Descendants (descendants) : les éléments fils, les fils

des fils, …

XPATH TERMINOLOGIES

Page 5: XML  Xpath & XSLT

XPATH- SYNTAXE

• Une expression XPath est composée de segments séparés par « / ».– Exemple : l’expression /annuaire/entree/nom permet de

sélectionner le nœud nom du fragment XML ci-dessus.

Page 6: XML  Xpath & XSLT

La même expression retourne des résultats différents selon son contexte d’évaluation• Exemple : /nom– Si le contxet est le root : retourne 2 éléments– Si le contexte est un élément entree : retourne l’élément

fils ‘nom’

XPATH- SYNTAXE

Page 7: XML  Xpath & XSLT

Expression Description Exemple

Nom du nœud Sélectionner Tous les nœuds fils du même nom à partir du nœud courant

telephone

/ (début de l’expression)

Sélectionner à partir de la racine du document

/annuaire/entree/nom

//node Sélectionner tous les nœuds descendants à partir du nœud courant du même nom

//nom

. Sélectionner le nœud courant

./telephone

.. Sélectionner le nœud parent

../entree

@attribut Sélectionner l’attribut du même nom

//entree/@attribut

XPATH- SYNTAXE

Page 8: XML  Xpath & XSLT

Symbole Description Exemple

* Sélectionner n’importe quel élément quel que soit le nom

//*

@* Sélectionner n’importe quel attribut quel que soit le nom

/annuaire//*/@*

Dans une expression XPath on peut utiliser le caractère générique *, pour sélectionner des noeuds dont le nom est inconnu.

XPATH- SYNTAXE

Page 9: XML  Xpath & XSLT

Dans une expression XPath on peut utiliser le caractère | , pour sélectionner sur plusieurs chemins. Exemple : /annuaire/entree/nom | //entree

Sélectionner les éléments fils nom de la racine et tous les descendants entree de la racine

XPATH- SYNTAXE

Page 10: XML  Xpath & XSLT

• Pour affiner la sélection, XPath propose la notion de prédicat pour pouvoir filtrer les nœuds à récupérer– La syntaxe : /elt1/elt2/eltAVerifier[predicat]– Le prédicat est une expression que doit vérifier le ou les nœuds

à sélectionner.

• L’expression prédicat accepte :– les opérateurs de comparaison : <, >, <=, >=, =, !=– les opérateurs logiques : not(..), and, or– les opérateurs arithmétiques : +, -, *, div, mod– les opérateurs de regroupement : (..)

XPATH- SYNTAXE

Page 11: XML  Xpath & XSLT

Exemple Description

/annuaire/entree[1] Sélectionner le 1er fils ‘entree’ de l’élément annuaire

/annuaire/entree[last()] Sélectionner le dernier fils ‘entree’ de l’élément annuaire

/annuaire/entree[last()-1] Sélectionner l’avant dernier fils ‘entree’ de l’élément annuaire

/annuaire/entree[position()<3] Sélectionner le deux 1er fils ‘entree’ de l’élément annuaire

/annuaire/entree[position()=3] Sélectionner le 3éme fils ‘entree’ de l’élément annuaire

/annuaire/entree[nom=‘paul’ ]/telephone Sélectionner les fils ‘telephone’ des éléments ‘entree’ dont le contenu du fils ‘nom’ est paul

/annuaire/entree[@attribut=‘value’] Sélectionner les fils ‘entree’ dont la valeur de l’attribut ‘attribut’ est ‘value’

/annuaire//entree[nom|telephone] Sélectionner les descendants ‘entree’ qui au moins un fils ‘nom’ ou ‘telephone’

XPATH- SYNTAXE

Page 12: XML  Xpath & XSLT

XPATH-FONCTIONS

Les fonctions XPath permettent d’affiner les expressions prédicat

conversion : string(object?), number(object?), boolean(object?)

ensemble de nœud : position(), last(), count(), name(node-set?), local-

name(node-set?), Namespace_uri(node-set?)

traitement de string : concat( string , string , string *), starts-with( string,string ),

contains( string , string ), substring-before( string , string ), substring-after( string ,

string ) …

numériques : sum( node-set ), floor( number ), ceiling( number ), round( number )

booléennes : not( boolean ), true(), false()

Page 13: XML  Xpath & XSLT

Expression Description

//*[starts-with(name(),'B')] Recherche de balise dont le nom commence par B

/ROOT/*[contains(translate(.,'0123456789',''),‘abs')]

<ROOT><A>ab128s</A><A>ab9877V</A></ROOT>

Recherche de contenu de chaîne dont on exclut certains caractères

/ROOT/A[concat( substring(., 7, 4),substring(., 4, 2),substring(., 1, 2))<20071201]

Comparaison de dates

sum(/ROOT/A[number(.)!='NaN'])

<ROOT><A>abs</A><A>10</A><A>15</A></ROOT>

Éliminer les noeuds non numériques lors d'une somme

XPATH-FONCTIONS

Page 14: XML  Xpath & XSLT
Page 15: XML  Xpath & XSLT

XPATH- Chemin de localisation

• Une expression XPath utilisée pour sélectionner une collection de nœuds s’appelle un chemin de localisation.

• Un chemin de localisation se compose d'une ou de plusieurs étapes de localisation, séparées par /.– Chaque étape sélectionne à son tour des nœuds par rapport à l’étape

précedente– Un chemain de localisation qui commence par / est un chemain absolu– La syntaxe /elt1/elt2/elt3 est dite abrégé

Page 16: XML  Xpath & XSLT

• La syntaxe non abrégé écrit chaque étape sous la forme :axe::test[prédicat]

– Elle permet plus de possibilité de sélection (voisins, commentaire, processing-instruction, …)

• axe : spécifie la relation d'arborescence entre le nœud de contexte et les nœuds que l'étape de localisation doit sélectionner : parents, fils, ancêtres, voisin...– exemple :Child, parent, ancestor, self....

• test :  indique parmi tous les nœuds de l'axe spécifié, celui ou ceux à considérer comme des candidats, Il suit l'axe et doit être précédé de :: .– exemple : parent::*, child::comment(), child::A ...

• Prédicat (optionnel) : il consiste en des conditions sur les noeuds parcourus. Il est encadré par [ ] .

XPATH- Chemin de localisation

Page 17: XML  Xpath & XSLT

Axe Description

ancestor:: Les ancêtres du nœud courant

ancestor-or-self:: Nœud courant et ses ancêtres

attribute:: Attributs du nœud courant

child:: Les fils du nœud courant,  n'inclut pas de nœud d'attribut ou d'espace de noms

descendant:: Les descendants du nœud courant ,  n'inclut pas de nœud d'attribut ou d'espace de noms

descendant-or-self:: Nœud courant et ses descendants

following:: Tous les nœuds qui suivent le nœud courant dans l'arborescence, sauf ses nœuds descendants, d'attribut et d'espace de noms.

XPATH- Chemin de localisation

Page 18: XML  Xpath & XSLT

Axe Descriptionfollowing-sibling:: Tous les frères suivants du nœud courant, il ne

comprend pas les autres enfants qui apparaissent avant le nœud courant.

namespace:: Nœuds d'espace de noms du nœud courant.

parent:: Le parent du nœud de contexte

preceding:: Tous les nœuds qui précèdent le nœud de contexte dans l'arborescence, sauf les nœuds ancêtres, d'attribut et d'espace de noms.

preceding-sibling:: Tous les frères suivants du nœud courant, il ne comprend pas les autres enfants qui apparaissent avant le nœud courant.

self:: Nœud courant

XPATH- Chemin de localisation

Page 19: XML  Xpath & XSLT

Exemple RésultatA/B[1]/following::*

A/B[2]/preceding::*

A/B[1]/following::D

A/descendant::*

XPATH- Chemin de localisation

Page 20: XML  Xpath & XSLT

XML TRANSFORMATIONUtiliser un CSS pour formater un contenu XML

À l'aide de feuilles de style CSS, il est possible de formater des éléments HTML (h1, div, href, span, …)

Il est aussi possible de réaliser le même formatage pour des éléments d’un document XML, peut importe le nom de ces éléments.

L’incorporation d’un CSS dans un XML se fait de la même façon que dans un HTML

Page 21: XML  Xpath & XSLT

Démo

Page 22: XML  Xpath & XSLT

XSLT

XSLT pour Extensible Stylesheet Language Transformation.

Langage de programmation qui sert à transformer le contenu d'un document XML source en un autre document dont le format et la structure diffère.  XML HTML XHTML Texte (C++, php, java, csv, …)

XSLT est un standard de la W3C

Un document XSLT est exprimée comme un document XML , pouvant aussi bien contenir des éléments définis par XSLT que d'autres éléments non définis par XSLT.

Page 23: XML  Xpath & XSLT

Démo

XSLT

Page 24: XML  Xpath & XSLT

XSLT- Structure

Page 25: XML  Xpath & XSLT

XSLT- Structure

• La racine d’un document XLST est la balise <stylsheet>– Indique la version à utiliser et le namespace XSLT

http://www.w3.org/1999/XSL/Transform

• La balise <transform> peut aussi être utilisé comme racine

Page 26: XML  Xpath & XSLT

XSLT-Templates

Le processeur XSLT fait subir au document XML des transformations selon des modèles de transformation (template) décrits dans la feuille XSL pour produire un nouveau document selon le type de sortie souhaité.

Chaque modèle de transformation définit des traitements à effectuer sur un élément ou un ensemble d’éléments du document XML source.

Un modèle est représenté par la balise <template> dans la feuille XSL

Une feuille XSL peut contenir plusieurs modèles

Page 27: XML  Xpath & XSLT

La balise template définit un modèle de transformation. match : expression XPath qui permet de sélectionner des éléments du document XML sur

lesquels sera appliqué la transformation

name : nom du modèle, il permet de faire appel au modèle directement sans passer par l’évaluation des nœuds du document <xsl:call-template>

priority : priorité du modèle, utilisé si le processeur XSLT identifie plusieurs modèles de transformation pour le même noeud

XSLT-Templates

Page 28: XML  Xpath & XSLT

Le contenu de la balise template représente les règles de transformation à appliquer sur les éléments sélectionnés par l’expression du match texte, balises XSLT, balises d’autres namespace (XSLFO, XHTML, …)

XSLT-Templates

Page 29: XML  Xpath & XSLT

XSLT-Templates

Page 30: XML  Xpath & XSLT

• La balise <apply-templates> permet de demander au processeur XSLT d’appliquer un modèle définie et qui correspond à l’expression XPath fournit par son attribut select– select : expression XPath, sert à identifier les modèles qui vont

être appliqués, la correspondance est effectué sur la base de l’attribut match du modèle

– Si select n’est pas fourni, le modèle est appliqué sur tous les fils du nœud courant.

• Au cas ou plusieurs modèles correspondent à l’expression select– Utilisation de l’attribut priority du modèle– Utilisation du modèle dont l’expression match est la plus

spécifique

XSLT-Templates

Page 31: XML  Xpath & XSLT

XSLT- Logique : boucle

<for-each> permet d’effectuer une boucle sur les éléments qui correspondent au résultat de l’expression XPath de l’attribut select

Page 32: XML  Xpath & XSLT

XSLT- Logique : traitement conditionnel

• <if> permet d’effectuer un traitement conditionnel si le résultat de l’expression de l’attribut test est vrai– L’expression test accepte la même syntaxe que les prédicats

XPath.

Page 33: XML  Xpath & XSLT

XSLT- Logique : traitement conditionnel

• <choose> permet de faire un choix parmi plusieurs alternatives.– <when>, traitement a effectuer si l’expression test est vrai– <otherwise>, traitement a effectuer si aucune condition

<when> n’est réalisé

Page 34: XML  Xpath & XSLT

XSLT- Logique : ordonnancement

• <sort> permet d’effectuer l’ordonnancement d’un ensemble d’éléments

• <sort> vient comme fils d’un <template> ou d’un <for-each> pour en ordonner les éléments– select : expression qui sert de critère de tri– data-type : text ou number ,spécifie le type de tri – order : ascending ou descending– case-order : upper-first ou lower-first

Page 35: XML  Xpath & XSLT

XSLT- Génération de contenu XML

<copy> fournit un moyen simple pour copier le noeud courant dans la sortie use-attribute-sets : les attributs du nœud qui seront copiés, si vide tous <copy> ne copie pas les enfants du nœud

<element> permet de créer un element XML dans la sortie name : nom local de l’élément use-attribute-sets : es attributs du nœud qui seront associés à l’élément.

<attribute> utilisé en association avec <element> pour y ajouter un attribut name : nom de l’attribut

Page 36: XML  Xpath & XSLT

XSLT- Sortie

• La balise <output> est le 1er fils de la racine du document XSLT, cette balise indique :– method : le format de sortie xml, html ou texte.– doctype-public : est le nom du standard respecté par la sortie.– doctype-system : est le lien vers la DTD de ce standard.– indent=yes : indique que le fichier généré sera

automatiquement indenté. • désactiver l'indentation diminue la taille des fichiers générés.