Cours XML et XPATH -DSS - XML, DTD, XML

Ce document contient une introduction aux données semi-structurées et à la galaxie XML, destiné aux étudiants de l'Université de Saad Dahleb Blida 1, Faculté des Sciences, Département d'Informatique, L3 - ISIL.

Il couvre les notions suivantes:

  • Les chemins: XPATH
  • Les feuilles de style et traitements XSL
  • Applications XML : RDF, SVG, ...
  • Traitement: DOM et SAX
  • Les pointeurs: XPOINTER
  • Les liens: XLINK

Cours XML et XPATH -DSS - XML, DTD, XML

Télécharger PDF

Les chemins: XPATH

1.1 Principes

XPath est un langage non XML utilisé pour naviguer dans un document XML, Il a été proposé par la W3C.

Xpath est une technologie qui permet d'extraire des informations (éléments, attributs, commentaires, etc...) d'un document XML via l'écriture d'expressions sous la forme d’un « chemin ».

Inspiré des chemins des fichiers utilisés sur le disque dur, XPath construit l’arbre logique du document XML et permet d'accéder directement aux informations souhaitées sans avoir à parcourir tout l'arbre XML.

XPath contient plus de 200 fonctions intégrées. Les expressions XPath peuvent également être utilisées en JavaScript, Java, schéma XML, PHP, Python, C et C++, et de nombreux autres langages. Aussi, XPath est un élément majeur de la norme XSLT.

Remarque : XPath 1.0 est devenu une recommandation W3C le 16 novembre 1999. La version XPath 2.0 est devenue une recommandation du W3C le 23 janvier 2007. Le 8 avril 2014, XPath 3.0 est devenu une recommandation W3C.

Les expressions XPath consistent à décrire le chemin emprunté dans l'arbre XML pour atteindre les données qui nous intéressent. L’expression peut pointer tous les types de nœuds : éléments, attributs, texte, les commentaires, etc. L’évaluation se fait dans l’ordre d’apparition dans le document (L’ordre des nœuds est important).

Vocabulaires utilisés pour un nœud :

  • Parent : chaque élément ou attribut possède un seul parent.
  • Fils "Children" : chaque élément peut posséder un ou plusieurs fils comme il peut n’avoir aucun.
  • Frères "Siblings" : des nœuds peuvent avoir le même parent.
  • Ancêtres "Ancestors" : le parent, le parent du parent, etc.
  • Descendants : les fils, les fils des fils, etc.

Chemin relatif et chemin absolu :

  • Absolue : Si le point de départ est la racine du document.
  • Relative : Si le point de départ est un autre nœud différent de la racine du document.

Exemple de chemin absolu :

Pour récupérer le numéro de fixe, le chemin à parcourir est :

  • Etape 1 : nœud "repertoire" (racine de l’arbre)
  • Etape 2 : descendre au nœud enfant "personne"
  • Etape 3 : descendre au nœud enfant "telephones"
  • Etape 4 : descendre au nœud enfant "telephone" dont l'attribut est "fixe"

L’expression XPath est : /étape1/étape2/étape3/étape4

Exemple de chemin relatif :

Pour récupérer le prénom de la personne, le point de départ sera le nœud décrivant le téléphone portable de John DOE :

  • Etape 1 : nœud "telephone" dont l'attribut est "portable"
  • Etape 2 : remonter au nœud parent "telephones"
  • Etape 3 : aller au nœud frère "prenom"

L’expression XPath est : étape1/étape2/étape3

Une expression XPath est décrite par 3 éléments :

  • Un axe : définir le sens de la recherche, se diriger vers un nœud enfant ou remonter vers un nœud parent.
  • Un filtre : nom du nœud ou un type de nœud.
  • Un ou plusieurs prédicats (facultatif) : exprime des propriétés que doivent satisfaire les nœuds retenus à l’issue du filtrage pour être finalement inclus dans le résultat.

1.2 Les axes

L’axe définit le sens de parcours des nœuds à partir du nœud contexte.

Axes en avant :

  • Self : le nœud courant.
  • Child : les fils du nœud courant (c'est l'axe par défaut).
  • Descendant : les descendants du nœud courant.
  • Descendant-or-self : les descendants du nœud courant plus lui-même.

Axes en arrière :

  • Parent : le nœud parent du nœud courant.
  • Ancestor : les ascendants du nœud courant.

Autres formes :

  • Preceding-sibling : Frère gauche (enfant du même parent).
  • Following-sibling : Frère droit (enfant du même parent).
  • Preceding : À gauche.
  • Following : À droite.

Exemple :

Requête : Récupérer le pays de John DOE.

Expression XPath :

  • Etape 1 : descendre au nœud "repertoire"
  • Etape 2 : descendre au nœud "personne"
  • Etape 3 : descendre au nœud "adresse"
  • Etape 4 : descendre au nœud "pays"

Chemin absolu : /child::repertoire/child::personne/child::adresse/child::pays

Abréviation :

  • L’axe child est l’axe par défaut donc possible de ne pas l’écrire.
  • Remplacer l'expression " /descendant-or-self::node()/pays" par "//pays".
  • Remplacer /repertoire/personne/self::node() par /repertoire/personne/.
  • Remplacer "parent::node()" par ".."

1.3 Les filtres

Un filtre permet d’éliminer un certain nombre de nœuds parmi ceux sélectionnés par un axe.

Il existe essentiellement deux types de filtrage pour sélectionner des nœuds :

  • Par leur type.
  • Par leur nom.

Ces deux critères de sélection sont les plus utilisés dans les expressions XPath.

Filtre par nom :

Exemple : L’expression /Document/A/B/D désigne, en partant de la racine du document, l’élément de nom A, puis les éléments de nom B fils de A, et enfin les éléments de nom D fils de B.

Filtres par type :

Filtre Nœuds sélectionnés sur l’axe
* tous les nœuds
node() tous les types de nœuds (éléments, commentaires, attributs,…)
text() tous les nœuds de type texte
comment() tous les nœuds de type commentaire

Exemple : L’expression /Document/* va sélectionner tous les éléments fils de l’élément racine quelque soit leur nom.

1.3 Les prédicats

Les prédicats sont utilisés pour rechercher un nœud spécifique ou un nœud contenant une valeur spécifique (exprimer une condition). Les prédicats sont toujours intégrés entre crochets [..].

Syntaxe : Elem[predicat]

Fonctions courantes :

  • string-length( ... ) : longueur d’une chaîne.
  • starts-with( chaîne1, chaîne2 ) : tester si chaîne1 commence par chaîne2.
  • substring( chaîne1, position1, longueur) : extraction d’une sous-chaîne.
  • normalize-space( chaîne ) : normalisation des occurrences de blancs à 1 blanc ; suppression des blancs d’en-tête et de fin.
  • number( chaîne ) : conversion en nombre.
  • string( expression ) : conversion en chaîne.
  • concat( chaîne1, chaîne2 ) : concaténation.
  • ceiling( nombre décimal ) : arrondi supérieur (10.1 devient 11, par exemple).
  • round( nombre décimal ) : arrondi au plus juste (10.4 devient 10 et 10.6 devient 11, par exemple).
  • count() : nombre de nœuds.
  • position() : position courante commençant par 1.
  • last() : dernière position.
  • contains( chaîne1, chaîne2 ) : tester si chaîne1 contient chaîne2.
  • floor( nombre décimal ) : arrondi inférieur (10.9 devient 10, par exemple).

Exemple :

Sélection de plusieurs chemins :

Le caractère « | » est utilisé dans une expression XPath pour sélectionner plusieurs chemins.

Exemple :

Les opérateurs :

Les opérations qui peuvent être utilisées dans les expressions XPath sont les suivantes :

  • Not()

Exemples : Résumé

Les feuilles de style et traitements XSL

2.1 Introduction

Document XML contient des informations concernant la structure d’un document. Aucune information relative à la mise en forme n’apparait dans le document. Pour présenter un document, il est possible d’utiliser des feuilles de style CSS ou des feuilles de style XSL.

XSL signifie eXtensible Stylesheet Langage, ou langage extensible de feuille de style. C’est un ensemble de recommandations qui permettent de définir la transformation et la présentation d’un document XML.

Cette abréviation recouvre en fait trois langages :

  • XPath, un langage d’interrogation de document XML. Il désigne un moyen d'accéder à un nœud quelconque de l'arborescence d'un document XML à partir d'un autre nœud quelconque.
  • XSLT signifie eXtensible Stylesheet Langage Transformation, un langage de transformation d’un document XML.
  • XSL-FO signifie eXtensible Stylesheet Langage Formating Objects, est un langage de mise en page de document. Le processus de transformation d'un document XML en un document imprimable, au format PDF par exemple.

XSL permet de transformer un document XML source en un autre, permettant d’en bouleverser la structure. Un document XSL contient un programme de transformation XSLT.

2.2 XSLT: Définition

XSLT est un standard du W3C depuis 1999. XSLT est un langage (basé sur XML) qui sait analyser un arbre XML en utilisant le langage XPath et définit des règles de transformation à appliquer aux éléments de l'arbre XML, règles dont chacune produit un fragment du document résultat.

XSLT décrit des règles pour transformer un arbre source représentant le document XML en un arbre résultat. Cette transformation s'effectue par rapport à des modèles (templates) décrits dans la feuille de style. La construction de l'arbre résultat permet de réordonner ou de filtrer le contenu du fichier XML.

2.2 XSLT: Structure de base

Une feuille de style XSLT est un document xml (avec extension “.xsl”) séparé qui contient des règles de transformation. Elle doit suivre la syntaxe globale ci-dessous :

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output …. />
<!-- template -->
</xsl:stylesheet>

L’appel d’un document XSLT se fait au niveau du document XML dont les informations seront utilisées au cours de la transformation. Ce référencement se fait via une ligne à placer sous le prologue et avant l’élément racine du document XML :

<?xml-stylesheet type="text/xsl" href="mon_document.xsl" ?>

L’attribut type permet de définir le type du document que nous souhaitons référencer. Dans notre cas, il s’agit d’un document XSLT : “text/xsl”. L’attribut href permet d’indiquer l’URI du document que l’on souhaite référencer.

L'élément <xsl:stylesheet> est l'élément racine du document XSL. Pour accéder aux éléments, attributs et fonctionnalités XSLT, nous devons déclarer l’espace de noms : “http://www.w3.org/1999/XSL/Transform” (pointe vers l’espace de noms XSLT W3C officiel). Version = “1.0” représente la version xslt utilisée.

XSLT :output, qui se place sous la racine stylesheet, désigne la nature du document en sortie.

Syntaxe : <xsl:output method="xml" encoding="UTF-8" .. />

  • method : préciser le type du document produit à l’issue des transformations : xml, html, xhtml ou text.
  • encoding : préciser l’encodage du document produit à l’issue des transformations.

La balise xsl :output peut avoir d’autres attributs.

Un programme XSLT est composé d'un ensemble de règles regroupées dans des templates. Un modèle (template) de transformation est défini dans l’élément xsl:template.

<xsl:template match="/">

L'attribut match contient une expression Xpath indiquant les éléments sur lesquels ce modèle s'applique. L'attribut match="/ " Indique que ce modèle s'applique à la racine du document XML. La valeur de l’attribut match est connue sous le nom : pattern. Le pattern indique la branche XML à partir de laquelle s’applique le Template.

Transformation d'un document XML par une feuille de style XSL s'effectue donc par un modèle traitant un nœud donné.

<xsl:template match="noeud_cible">action</xsl:template>

Chaque modèle est divisé en deux parties :

  • Un nœud cible indiqué par l'attribut match, désigne un chemin dans l'arbre définit avec XPath.
  • Une action sur le nœud.

Un modèle contient deux types d'éléments :

  • Des éléments de mise en forme html, tels que <H1>, <TITLE>, …
  • Des éléments XSL (balise avec préfixe <xsl:>)

2.2 XSLT: Element XSL:

<xsl:value-of select="expression Xpath"/>

  • Est un élément vide.
  • Permet d’extraire la valeur d'un élément.
  • Permet d'accéder au contenu des éléments du document XML.
  • L'attribut select indique une expression XPATH.

Exemple :

2.2 XSLT: Gestion des boucles:

Il arrive que la structure du document XML ne soit pas linéaire. Le document XML comporte un nombre indéterminé de fois un même élément. On peut utiliser des structures itératives dans la mise en forme avec la feuille de style XSL. Il faut tenir compte d'un nombre a priori indéterminé d'éléments livre, par exemple. Il faut introduire dans la feuille de style un élément :

<xsl:for-each select="élément à afficher"/>

<xsl:for-each> crée une boucle dans laquelle sont appliquées des transformations.

<xsl:for-each select="Expression Xpath">……
</xsl:for-each>
  • Permet de sélectionner la valeur texte de tous les éléments XML spécifiés par l’attribut « select ».
  • Select correspond au jeu de nœuds devant être parcouru par la boucle.

<xsl:sort> permet d'effectuer un tri sur un jeu de nœuds. Il doit être placé soit dans un élément <xsl:for-each> soit dans un élément <xsl:apply-templates>.

C'est un élément vide qui peut être appelé plusieurs fois pour effectuer un tri multicritères.

<xsl:sort select="noeud" >

Autres attributs optionnels :

  • Order : ascending (croissant), descending (décroissant)
  • Case-order : upper-first (les majuscules d’abord), lower-first (les minuscules d’abord)
  • Data-type : text (texte) et number (numérique)
  • Lang : code d’une langue (fr, en, etc.)

2.2 XSLT: Autres fonctions :

If : Conditionner une transformation

  • Opérateurs logiques : AND, OR, NOT
  • Opérateurs de comparaison : =, not (a = b), < pour inférieur, > pour supérieur

Choose : Traiter des cas (plusieurs conditions)

Apply-templates : appliquer les transformations aux enfants du nœud courant

Un simple apply-templates (sans attribut select) examine tous les nœuds enfants dans l’ordre. Si une règle qui correspond à un nœud est détectée, elle sera appliquée.

Exemple :

Merci Pour votre attention

FAQ

Qu'est-ce que XPath ?

XPath est un langage non XML utilisé pour naviguer dans un document XML. Il permet d'extraire des informations (éléments, attributs, commentaires, etc.) d'un document XML via l'écriture d'expressions sous la forme d’un « chemin ».

Qu'est-ce que XSLT ?

XSLT est un langage de transformation d’un document XML. Il permet de transformer un document XML source en un autre, permettant d’en bouleverser la structure.

Qu'est-ce que XSL-FO ?

XSL-FO est un langage de mise en page de document. Il permet de transformer un document XML en un document imprimable, au format PDF par exemple.

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne