107
11/06/22 1 XML Avancé DTD, XSD, XPATH, XSLT, XQuery Rachid NID SAID [email protected]

XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Embed Size (px)

Citation preview

Page 1: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

03/05/23 1

XML AvancéDTD, XSD, XPATH, XSLT, XQuery

Rachid NID [email protected]

Page 2: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

03/05/23 2

Plan

Introduction XML validation

DTD XSD

XPath XML Transformation - XSLT XML query – XQuery

Page 3: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

03/05/23 3

Partie 1

Introduction XML

XML Validation DTD

Structure Entités Utiliser DTD

XSD Schéma XML Types simples Types complexes Annotation

Page 4: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XML

XML pour « eXtensible Markup Language »

XML C’est est un langage à balise définissant un format universel de représentation des données.

XML est issue du langage de balise SGML dont est issue HTML

Si HTML est conçu pour l’affichage, XML est conçu pour le représentation des données.

Page 5: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XML

XML décrit les données de manière aussi bien compréhensible par les Hommes qui écrivent les documents XML que par les machines qui les exploitent.

Un document XML contient à la fois des données et les méta données qui les décrivent.

Ces méta données permettent de déterminer la structure du document : ce sont des balises.

Page 6: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XML

Page 7: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Structure XML : entête

version : de façon générale 1.0 Il existe deux versions 1.0 et 1.1

encoding : valeur par défaut UTF-8

standalone : valeur par défaut yes Indique si le document en lui seul est suffisant

pour être interprété ou s'il nécessite l'adjonction d'un autre document externe (DTD)

Page 8: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Structure XML : balise

Les balises sont les éléments de base d'un document XML

Les balises permettent de décrire les données contenu dans le document XML

Deux types de balise : balise par pair : <balise>contenu</balise> balise unique : <balise/>

Page 9: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Structure XML : racine

L’ensemble du contenu d’un document XML est encapsulé au sein d’une balise qui vient directement après l’entête. c’est la balise racine (root)

Un document XML ne contient qu’une seule balise racine

Page 10: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Structure XML : attribut

Un attribut est une information supplémentaire qui est ajouté à la balise pour apporter plus de détail.

On peut ajouter autant d’attributs qu’on veut à la balise

Deux attributs d’une même balise peuvent avoir le même nom.

Page 11: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Structure XML : CDATA

Le contenu d’une balise ne peut contenir certains caractères comme > < & et doivent être remplacés par leur encodage html.

CDATA permet de contourner cette limitation et de saisir n’importe quel caractère comme contenu.

Le contenu du CDATA est interpréter par l’éditeur XML comme du texte brute.

Page 12: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Structure XML : commentaire

Permet de commenter et simplifier la lecture du contenu XML pour l’humain.

Page 13: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Structure XML : processing-instruction

Les processing-instructions sont le moyen d'envoyer des ordres à l‘éditeur XML.

Une processing-instruction commence par <? et se termine par ?>.

Exemple : <?xml-stylesheet type="text/css" href="style.css" ?>

Page 14: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Les parseurs XML

DOM : Document Object Model Le document est chargé en entier en mémoire Une api offre la possibilité d’accéder aux différents

éléments du document de façon hiérarchique

SAX : Simple API for XML API basé sur un modèle événementiel qui transforme

un document XML en un flux d'événements déclenchés par la lecture d'éléments syntaxiques XML (balise ouvrante, balise fermante, etc.).

Page 15: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Validation XML

Pour qu'un document XML soit utilisé comme un langage ou comme un format d'échange, il doit respecter certaines contraintes syntaxiques :

Nom des éléments et des attributs autorisés, Hiérarchie(père/fils) et appartenance des éléments et

attributs, Séquencement et itérations des éléments, Contraintes d'unicités et de référence.

Page 16: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Validation XML La validation XML est contrôle du contenu XML par

rapport à une grammaire fournie. DTD : le plus ancien, très restreints en termes de

contraintes pouvant être exprimées;

XML Schéma : norme fournie par le W3C, permet un très grand choix de contraintes et de types.

Relax NG : l'équivalent de XML Schéma mais proposé par OASIS.

Schematron : il est orienté « sémantique » en permettant d'ajouter des contraintes sur les valeurs des éléments et des attributs.

Page 17: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

DTD

DTD pour Document Type Definition

DTD permet de décrire la structure d'un document XML liste des balises attributs des balises organisation des balises

La validation est le mécanisme qui vérifie qu’un document XML respecte une DTD

Page 18: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

DTD

Page 19: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

DTDStructure : élément

Définit une balise XML ELEMENT : mot clé pour déclarer une balise nom : le nom de la balise (contenu) : le contenu de la balise

Un contenu peut être vide, texte, ou contenir des sous éléments

Page 20: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

DTDStructure : élément

Type DTD XML

Elément vide <!ELEMENT elt EMPTY> <elt/>

Elément contenant du texte

<!ELEMENT elt (#PCDATA)> <elt>texte</elt>

Elément avec sous éléments

<!ELEMENT elt (sous-elt)><!ELEMENT sous-elt EMPTY>

<elt><sous-elt/>

</elt>

Page 21: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

DTDStructure : élément

Type DTD XMLElément avec plusieurs sous éléments

<!ELEMENT elt (s1, s2)><!ELEMENT s1 EMPTY><!ELEMENT s2 EMPTY>

<elt><s1/><s2/>

</elt>Elément avec contenu variable

<!ELEMENT elt (#PCDATA|s1)><!ELEMENT s1 EMPTY>

<elt>texte</elt>ou<elt><s1/></elt>

Elément à contenu non défini

<!ELEMENT elt ANY><!ELEMENT s1 EMPTY>

<elt>texte</elt>ou<elt><s1/></elt>etc.

Page 22: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

DTDStructure : élément

Cardinalité Signification<!ELEMENT elt (s1)> Le contenu de la balise elt est une seule

balise s1

<!ELEMENT elt (s1*)> Le contenu de la balise elt est 0 à n occurrence de la balise s1

<!ELEMENT elt (s1?)> Le contenu de la balise elt est 0 à 1 occurrence de la balise s1

<!ELEMENT elt (s1+)> Le contenu de la balise elt est 1 à n occurrence de la balise s1

Page 23: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

DTDStructure : attribut

Définit l’attribut d’une balise XML ATTLIST : mot clé pour déclarer un attribut nom : le nom de la balise nom-attribut : le nom de l’attribut type : type de l’attribut

CDATA : chaîne de caractères liste de valeurs possibles ("v1"|"v2"|"v3")

valeur-par-defaut : valeur par défaut de l’attribut si aucune valeur n’est fournie

Page 24: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

DTDStructure : attribut

contrainte : définit les contraintes que doit respecter l’attribut, n’est pas obligatoire

#REQUIRED : l’attribut est obligatoire #IMPLIED : l’attribut est optionnel #FIXED : la valeur de l’attribut est fixé, et

prends comme valeur la valeur par défaut

Page 25: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

DTDStructure : identifiant

Un attribut peut être déclaré comme identifiant d’un élément avec le mot clé ID

Un attribut peut être déclaré comme référence vers un autre élément (clé étrangère) avec le mot clé IDREF

Page 26: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Mécanisme qui permet de déclarer un alias vers une information qui va être réutilisé dans un XML ou une DTD

entité générale : utilisé dans le document XML

entité paramètre : utilisé dans une DTD

entité externe : même rôle que l’entité générale, sauf que les informations sont stockés dans un fichier externe

L’attribut standalone au niveau de l’entête doit être a no

DTD Les entités

Page 27: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

DTDUtiliser une DTD

DOCTYPE permet de déclarer la DTD à utiliser pour valiser le document XML,

vient directement après l’entête balise-racine : l’élément XML qui sera la racine (root)

du document XML

Page 28: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

DTDUtiliser une DTD interne

La DTD est déclaré directement dans le document XML dans la balise DOCTYPE

Page 29: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

DTDUtiliser une DTD externe

La DTD est déclaré dans un fichier externe

SYSTEM : la DTD est indiqué en fournissant sa location par son URI

PUBLIC : la DTD est dans le domaine public (norme), indiqué par son identifiant (FPI) et sa location par son URI

Page 30: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSD XSD pour XML Schema Definition

Avantages par rapport à DTD : Le typage poussé des données (booléens, entiers,

intervalles de temps...)

Possibilité de créer de nouveaux types à partir de types existants.

Dérivation, Les éléments peuvent hériter du contenu et des attributs d'un autre élément..

Les indicateurs d'occurrences des éléments peuvent être tout nombre non négatif autre que 0,1 ou infini

Page 31: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSD

Page 32: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType de données

Plus de 40 types de données, string, integer, date, year, CDATA, float, double,

binary, ENTITIES, token, byte, etc.

Fournit un mécanisme pour définir des types de données complexes Créer un type de données totalement nouveau, Restreindre ou d’étendre un type de données existant.

On distingue deux sortes de types, simple et complexe

Page 33: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType simple

Un élément de type simple ne peut comporter ni attributs, ni sous-éléments.

Il est possible d’utiliser les types prédéfinis ou d’en dériver de nouveaux à partir de types déjà existant.

La liste complète des types prédéfinis est disponible à http://www.w3.org/TR/xmlschema-0/#CreatDt

Page 34: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType simple

Page 35: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType simple

La création de nouveaux types simples est réalisée au travers de la balise <simpleType>

Trois façons pour créer un nouveau type : Restriction : <restriction> permet de dériver un

nouveau type sur la base d’un existant en ajoutant de nouvelles contraintes

List : <list> permet de créer un nouveau type liste Union : <union> permet de créer un nouveau type en

faisant l’union de plusieurs types existants

Page 36: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType simple : Restriction

Les restrictions sur les types simples (Facets) permettent de dériver de nouveaux types à partir de types existants

La restriction de type permet de définir des contraintes sur le nouveau type à créer

La restriction est exprimée par la balise <restriction>

Page 37: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType simple : Restriction

maxExclusive : limite supérieure (exclue)

maxInclusive : limite supérieure (incluse)

minExclusive : limite inférieure (exclue)

minInclusive : limite inférieure (incluse)

enumeration : liste de valeurs autorisée

length : nombre de caractères ou d’élément d’une liste autorisé

Page 38: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType simple : Restriction

minLength : nombre minimum de caractères ou d’élément d’une liste

pattern : expression régulière à respecter

fractionDigits : nombre maxi de digits autorisé

totalDigits : nombre exact de digits autorisé

whiteSpace : politique de gestion des espaces blancs (tab, retour ligne, fin de ligne, …)

La définition de l’ensemble des restrictions pour chaque type est disponible à www.w3.org/TR/xmlschema-0/#SimpleTypeFacets

Page 39: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType simple : Restriction

Page 40: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType simple : Listes

Il existe trois types de liste intégrés NMTOKENS, ENTITIES, IDREFS

Ces types existent pour garder la compatibilité avec les DTD

Il est possible de créer de nouveaux liste de types simple par dérivation de type existant

La création de liste est exprimé par <list>

Page 41: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType simple : Union

XSD permet de définir de nouveaux types simple par union de types existants i.e le nouveau type accepte les valeurs de l’ensemble

des types qui participent à l’union

L’union est exprimé par <union>

Page 42: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType complexe

Un élément de type complexe peut contenir d'autres éléments et / ou des attributs

Un attribut ne peut être de type complexe

Un élément de type complexe peut être Elément vide qui ne contient que des attributs Elément de type simple qui contient des attributs Elément qui contient des sous éléments et des

attributs Elément qui contient des attributs, des sous éléments

et du texte

La création d'un éléments de type complexe est réalisée au travers de la balise <complexType>

Page 43: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType complexe

Type avec des attributs et sans contenu

Page 44: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType complexe

Type avec ou sans attributs et un contenu de type simple

La balise <simpleContent> précise qu’il ne peut y avoir que des attributs et un contenu de type simple

Page 45: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType complexe

Type avec ou sans attributs et un contenu composé de sous éléments

La balise <sequence> dite indicateur d’ordre, indique la logique de placement des sous éléments dans le document XML

Page 46: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType complexe

Trois balises indicateurs d’ordre peuvent être utilisé pour indiquer la logique de placements des sous éléments dans le document XML:

<all> : les sous éléments sont placés quelque soit l’ordre

<sequence> : les sous éléments doivent respectés l’ordre de déclaration dans le type

<choice> : un seul des sous éléments déclarés est utilisé

Page 47: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType complexe

Les indicateurs d'occurrence sont utilisés pour exprimer le nombre de fois qu'un sous élément peut apparaître dans le document XML

maxOccurs : précise le nombre d'occurrence maximum, la valeur par défaut est 1

minOccurs : précise le nombre d'occurrence minimum, la valeur par défaut est 1

Pour définir une valeur infinie, fixer la valeur à unbounded

Page 48: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType complexe

Il est possible de créer un type d’élément dont le contenu est composé de texte et de sous éléments en même temps

L’attribut mixed de la balise complexType doit être positionné à true

Page 49: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType complexe

Page 50: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType complexe

Il est possible de définir un nouveau type complexe sur la base d'un type complexe existant

Étendre le type existant en y ajoutant des attributs est des sous éléments <extension>

Restreindre le type existant en limitant les valeurs possibles des attributs et sous éléments existants <restriction>

La balise <complexContent> est utilisé pour implémenter cette possibilité

Page 51: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDType complexe

Page 52: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDVisibilité des Types

Un type est visible par tous les descendants du noeud dans lequel il a été déclaré.

Un type déclaré sous le noeud principal (root) <schema> est visible dans tout le document XSD.

Un type déclaré sous un nœud autre que le root, n’est visible que dans ce nœud.

Page 53: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDStructure : entête

XSD est un document XML, Il commence par un prologue et un élément racine (root) L’élément racine est <schema>

targetNameSpace : libelle du namespace associé au document XSD

elementFormDefault : indique si les éléments du XSD doivent être préfixé par l’alias du namespace lors de son utilisation dans un document XML

Page 54: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Espaces de nom (XML Namespaces)

XML Namespaces est une spécification W3C, son objectif est

de permettre l’utilisation de plusieurs grammaires dans un seul document.

de lever les ambiguïtés lorsque plusieurs grammaires offre des éléments avec les même nom.

Page 55: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDStructure : élément

La définition d’éléments se fait dans une balise <element>.

Définir un type de données et l’utiliser dans la définition de l’élément.

Définir le type de données à l’intérieur de l’élément.

Page 56: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDStructure : attribut

La définition d’attributs associés à un élément se fait dans par la balise <attribute>. name : nom de l’attribut type : type de l’attribut, ne peut être qu’un type

simple. use : permet de préciser si l’attribut est obligatoire,

optionnel ou interdit. Valeurs possibles : required : obligatoire optional : optionnel prohibited : interdite

fixed : valeur fixe, ne change pas default : valeur par défaut.

Page 57: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDStructure : attribut

La définition d’attributs peut se faire de deux façons différents.

Définir l’attribut et l’utiliser dans la définition du type. Définir l’attribut directement à l’intérieur du type.

Page 58: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSDAnnotation

L'annotation permet d'enrichir la description d'un XSD, c’est un commentaire.

L'annotation est réalisée au travers de la balise <annotation> et propose deux sous éléments (occurrences multiples) <documentation> : son contenu est en direction de

l’utilisateur humain <appinfo> : son contenu est en direction des outils

d’édition XML

Page 59: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Utiliser un XSD

A la différence du DTD, n’importe quel élément de la XSD peut servir de racine pour le document XML

xmlns:xsi : identifier le namespace de la norme W3C xmlns:… : identifier les autres namespaces à utiliser dans le

document XML xsi:schemaLocation : identifier pour chaque namespace utilisé

par le document XML, la localisation physique du document XSD (sauf pour le namespace de la norme W3C)

Page 60: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Partie 2

XML Transformation XPath Utiliser un CSS pour formater un

contenu XML XSLT

Page 61: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPath 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 62: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathTerminologies

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 processing-instruction

attribute

text

namespace

comment

element

Page 63: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathTerminologies

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

Page 64: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathSyntaxe

Une expression XPath décrit l'emplacement d'éléments et d'attributs XML comme un chemin similaire à des URL.

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

Page 65: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathSyntaxe

Une expression XPath est évalué au sein d’un contexte C’est le nœud par rapport auquel cette expression est

évalué 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 est un élément entree : retourne l’élément

fils ‘nom’

Page 66: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathSyntaxe

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

Page 67: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathSyntaxe

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.

Page 68: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathSyntaxe

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

Page 69: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathSyntaxe

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 : (..)

Page 70: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathSyntaxe

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

annuairePour IE le 1er fils est l’indice 0

/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’

Page 71: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathFonctions

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 72: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathFonctions

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

Page 73: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathChemin 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 74: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathChemin de localisation

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 [ ] .

Page 75: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathChemin de localisation

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.

Page 76: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathChemin de localisation

Axe Description

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

Page 77: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathChemin de localisation

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

A/B[2]/preceding::*

A/B[1]/following::D

A/descendant::*

Page 78: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathChemin de localisation

Le test de nœud est la seule partie obligatoire d'une étape de localisation XPath.

Trois types de test : name test : utilise un nom développé et la relation

entre ce nom et l'axe spécifié pour identifier les nœuds à sélectionner.

node type test : sélectionne les nœuds en se basant sur leur type.

targeted processing instruction test : ne sélectionne que les nœuds processing-instruction qui correspondent au type spécifié.

Page 79: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathChemin de localisation

Name test Description Exemple

* retourne tous les nœuds de l’axe

ancestor::*

QName retourne les nœuds de l’axe qui ont le même nom local (QName)

child::entree

NSName:* retourne tous les nœuds de l’axe dont le nom développé comprend le namespace NSName

child::tns:*

NSName:QName retourne les nœuds de l’axe dont le nom développé est NSName:QName

child::tns:entree

Page 80: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathChemin de localisation

Type test Description Exemple

Comment() retourne les nœuds de l’axe de type commentaire

following::comment()

Node() retourne les nœuds de l’axe de n’importe quel type

preceding::node()

text() retourne les nœuds de l’axe de type texte (contenu texte d’un élément)

child::text()

processing-instruction()

retourne les nœuds de l’axe de type processing-instruction

self::processing instruction()

processing-instruction(‘name’)

retourne les nœuds de l’axe de type processing-instruction dont le nom est name

/child::processing-instruction("xml-stylesheet")

Page 81: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XPathChemin de localisation

Chemin Description

child::chapter/descendant::para Sélectionne les descendants <para> des éléments <chapter> enfants du nœud de contexte.

/descendant::olist/child::item Sélectionne tous les éléments <item> qui ont un parent <olist> contenu dans le même document que le nœud de contexte.

/child::doc/child::chapter[position()=5]/child::section[position()=2]

Sélectionne le deuxième élément <section> contenu dans le cinquième élément <chapter> de l'élément de document <doc>.

child::para[attribute::type="warning"][position()=5]

Sélectionne le cinquième enfant <para> du nœud de contexte ayant un attribut type dont la valeur est "warning".

child::para[position()=5 and attribute::type="warning"]

Sélectionne le cinquième enfant <para> du nœud de contexte ayant un attribut type dont la valeur est "warning".

child::*[self::chapter or self::appendix and position()=last()]

Sélectionne le dernier enfant <chapter> ou <appendix> du nœud de contexte.

Page 82: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

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 83: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XML TransformationUtiliser un CSS pour formater un contenu XML

Démo

Page 84: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

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 85: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSLT

Démo

Page 86: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSLTStructure

Page 87: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSLTStructure

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 88: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSLTTemplates

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 89: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSLTTemplates

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

Page 90: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSLTTemplates

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, …)

Page 91: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSLTTemplates

Page 92: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSLTTemplates

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

Page 93: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSLTLogique : 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 94: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSLTLogique : 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 95: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSLTLogique : 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 96: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSLTLogique : 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 97: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSLTGé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 98: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XSLTSortie

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.

Page 99: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

Partie 3

XML Query – XQuery Définition Syntaxe & Expressions Selection et filtrage de données Fonctions

Page 100: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XQueryDéfinition

XQuery pour XML Query

C’est un langage de requête permettant d'extraire des informations d'un document XML, ou d'une collection de documents XML

XQuery joue par rapport aux données XML un rôle similaire à celui du langage SQL vis-à-vis des données relationnelles

Page 101: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XQuerySyntaxes

La syntaxe FLWOR dont le nom vient des cinq clauses principales qui la composent (for, let, where, order by et return)

La syntaxe XQueryX pour « XML Syntax for XQuery », dans laquelle une requête est un document XML.

XQuery se base sur XPath pour sélectionner les éléments à traiter

Page 102: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XQueryClause LET

Une expression FLWR permet d’utiliser des affectations de variables, et d’utiliser ces variables dans la suite de la requête.

L’affectation se fait au moyen de la clause LET les variables sont ensuite non mutables.

LET $noms := document(“annuaire.xml”)//nomRETURN$noms

Page 103: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XQueryClause FOR

La clause For permet d’effectuer des itérations sur un ensemble de noeuds obtenus dans une requête.

A chaque itération un élément de cette liste est affecté à une variable de boucle, et le traitement explicité dans le For est appliqué à cette variable.

FOR $element IN //entreeRETURN$element/nom

Page 104: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XQueryClause RETURN

La clause RETURN permet d’envoyer une valeur de retour à chaque itération de la boucle FOR,

La valeur de retour est concaténée à une variable de sortie, qui est renvoyée à l’utilisateur lors de la dernière itération.

RETURN ne provoque pas de sortie de la boucle For, le retour effectif à l’utilisateur se fait uniquement lors de la dernière itération !

FOR $element IN //entreeRETURN $element/nom

Résultat :<nom>Nom1</nom><nom>Nom2</nom><nom>Nom3</nom>

Page 105: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XQueryClause WHERE

La clause WHERE permet de filtrer les noeuds obtenus par la requête dans une clause For, à la manière du WHERE SQL.

Le contenu de la clause WHERE est une expression dont le résultat de l’évaluation est booléen.

il est possible d’utiliser des opérations logiques AND et OR. il est possible d’utiliser des expressions et fonctions XPath

FOR $element IN //entreeWHERE $ element /nom = “Harry Cover”OR $ element /nom = “Paul Lafargue”RETURN $element

Page 106: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XQueryImbrication de requêtes

XQuery permet d’imbriquer les requêtes.

LET $entrees:=//entreeRETURNFOR $nom IN $entrees/nomRETURN$nom

Résultat :<nom>Nom1</nom><nom>Nom2</nom>

Page 107: XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

XQueryRequêtes XQuery avancées