Vous êtes sur la page 1sur 100

Architecture SOA (Software

Oriented Architecture) et
services web

Enseignante: Nourhene Ellouze

Niveau: GLSI3
Plan du cours
▪ Chapitre I : Technologies XML

▪ Chapitre II : Calcul orienté service

▪ Chapitre III : Services Web

▪ Chapitre IV : Services REST

▪ Chapitre V : Composition de services

▪ Chapitre VI : Bus de services


2
Chapitre 1: Technologies
XML

Matière: SOA (Architecture Orienté Service)

Enseignante: Nourhene Ellouze

Niveau: GLSI3
Plan du chapitre 1
▪ Partie 1
1. XML
2. Validation des documents XML
▪ DTD
▪ XSD
▪ Partie 2
3. XSL
▪ Xpath
▪ XSLT
▪ XQuery
4
Introduction: Présentation de XML
▪ eXtended Markup Language

▪ Langage orienté texte et formé de balises


▪ Organisation des données de manière structurée

▪ 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.
5
Introduction: Présentation des technologies XML
▪ XML regroupe un ensemble de technologies
▪ Schémas XML et DTD: Modèles de documents
▪ Description des modèles de documents
▪ Schémas XML sont plus souples et puissants que DTD
▪ XPath : Langage de sélection
▪ Sélection des éléments dans un document XML
▪ XQuery : Langage de requête
▪ Extraction des informations à partir d'un ou plusieurs documents XML et
synthèse de nouvelles informations à partir de celles extraites
▪ XSLT : Transformation de documents
▪ Expression facile des transformations complexes entre documents XML
6
1. XML

7
Présentation
▪ Un document XML est un ensemble de données organisées dans un arbre
▪ Format textuel

▪ Extension de fichier :.xml

▪ Considéré compréhensible à la fois par les humains et les machines

▪ Syntaxe à base de balises (comme en HTML) Parent


▪ balise par paire (<div>...</div>)

▪ balise orpheline (<img />) Child 1 Child 2 Child 3

Desc1 Desc 2
8
Premier exemple d’un document XML
1
2
3
4

1. Entête XML avec la version 1.0 et l'encodage ISO-8859-1 des caractères


2. Commentaire délimité par les chaînes de caractères <!-- et -->
3. Balise ouvrante de l'élément racine cours
4. Balise ouvrante de l'élément intervenant avec un attribut de noms nom et de valeur
alexandre brillant
5. Balise fermante de l'élément racine cours
9
Structure d'un document XML
▪ Un document XML inclut:
▪ Prologue: Il contient des déclarations optionnelles.
▪ Corps du document: le contenu même du document.
▪ Commentaires et instructions de traitement : apparaissent partout dans le document,
dans le prologue et le corps.

Prologue

Corps

10
Structure XML : entête

C’est la première ligne d’un document XML servant à donner les


caractéristiques globales du document :
▪ 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)
11
Structure XML : Les instructions de traitement
▪ Les instructions de traitement (processing-instructions) sont le moyen
d'envoyer des ordres à l‘éditeur XML.

▪ Leurs positions sont à n’importe quel endroit du document (après le prologue)

▪ Une instruction de traitement commence par <? et se termine par ?>.

▪ Exemple: la transformation d’un document XML en document XHTML


affichable avec l’instruction :

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

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

13
Exercice d’application: Création d’un livre en XML
▪ On souhaite écrire un livre en utilisant le formalisme XML. Le livre est structuré
en sections (au moins 2), en chapitres (au moins 2) et en paragraphes (au
moins 2).
▪ Le livre doit contenir la liste des auteurs (avec nom et prénom).
▪ Tous les éléments doivent posséder un titre, sauf le paragraphe qui contient du
texte.
▪ Proposez une structuration XML de ce document (avec 2 auteurs, 2 sections, 2
chapitres par section et 2 paragraphes par chapitre).
▪ Vérifiez, à l’aide de l’éditeur, que votre document est bien formé.
▪ Attention : ne pas utiliser d’attributs ; l’encodage utilisé est ISO-8859-1
▪ Votre document sera nommé livre1.xml.

14
Types de nœuds XML
Un arbre XML possède différents types de nœuds :
▪ Racine: nœud élément contenant l’intégralité du document. C’est labalise racine (root)
▪ Un document XML ne contient qu’une seule balise racine

▪ Élément: nœud possédant un nom (balise). Il peut posséder des nœuds filles de tous
types (sauf racine)

▪ Attribut: nœud sous forme ”nom = valeur” et qui est rattaché à la balise ouvrante d’un
élément. Pour un élément donné, impossible d’avoir deux attribut portant le même nom

▪ Texte entre une balise ouvrante et une fermante

▪ Commentaire
15
Types de nœuds XML
1. Éléments
▪ Un élément est formé d'une balise ouvrante, d'un contenu et de la balise
fermante correspondante.

▪ Lorsque le contenu est vide, il pourra être représenté comme suit:

▪ L’imbrication des éléments doit être correcte

16
Types de nœuds XML
1. Éléments
▪ Exemple d’imbrication d’éléments
Parent

Child 1 Child 2 Child 3

Desc1 Desc 2

Enf1 Enf2

17
Types de nœuds XML
2. Attributs
▪ Les balises ouvrantes peuvent contenir des attributs associés à des valeurs. Chaque
balise ouvrante peut contenir 0, 1 ou plusieurs associations de valeurs à des attributs
▪ L'association de la valeur à l'attribut prend la forme:
▪ attribute='value’ ou
▪ attribute="value"; où attribute et value sont respectivement le nom et la valeur de l'attribut.

▪ Les espaces peuvent être présents dans la balise après le nom de l'élément et entre les
attributs.
▪ Aucun espace ne peut séparer le caractère '=' du nom de l'attribut et de sa valeur.
▪ L'ordre des attributs n'a pas d'importance
18
Exercice d’application: Utilisation des attributs
▪ Conception de livre2.xml à partir de livre1.xml

▪ On souhaite compléter la structure du document XML de l’exercice précédent


par:
▪ les attributs nom et prenom pour les auteurs

▪ titre pour le livre, les sections et les chapitres

▪ Analysez la structure du nouveau document. Y a-t-il des simplifications


possibles ?

▪ Vérifiez, à l’aide de l’éditeur, que votre document est bien formé.


19
Règles de syntaxe
▪ Le nom d’un élément ne peut commencer par un chiffre.
▪ Si le nom d’un élément est composé d’un seul caractère il doit être dans la
plage [a-z A-Z] (c’est-à-dire une lettre minuscule ou majuscule sans accent) ou _
ou :
▪ Avec au moins 2 caractères, le nom d’un élément peut contenir _, -, . et : plus
les caractères alphanumériques
▪ Le caractère : est réservé à un usage avec les espaces de nom que nous aborderons par
la suite
▪ Tous les éléments ouverts doivent être fermés.
▪ Un élément parent est toujours fermé après la fermeture des éléments fils.
▪ Voici un contre-exemple où l’élément fils b est incorrectement fermé après la fermeture
de son élément parent a : <a><b></a></b>.

20
Quelques conventions de nommage
▪ Employer des minuscules pour les attributs et les éléments.
▪ Éviter les accents dans les noms d’attributs et d’éléments pour des raisons de
compatibilité avec les outils du marché qui proviennent souvent d’un univers
anglo-saxon.
▪ Préférer les guillemets délimitant les valeurs d’attribut.
▪ Séparer les noms composés de plusieurs mots par les caractères -, _, . ou une
majuscule.
▪ Essayer d’être homogène dans votre document en gardant la même
convention. 21
Exercice d’application: Document bien formé
<?xml version="1.0"?>
<!-- this is a note -->
<note date=3 janvier>
▪ Observez le document XML suivant <to>Bob</To>
<from>Alice</from>
▪ Ce document est-il bien formé (i.e. <heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
respecte-t-il la syntaxe XML) ? </note>
<note date="5 janvier" <!-- this is another note -->
▪ S'il ne l'est pas, corrigez les erreurs. >
<to>Alice</to>
<from>Bob
<body>No problem & see you soon</body>
</note>
<note />

22
Les espaces de noms dans un document XML
▪ Problématique: Comment garantir, quand nous choisissons une balise ou un attribut,
que personne n’a eu la même idée dans un contexte d’application différent ?
▪ le choix de l’élément titre peut représenter le titre d’un livre, mais pourquoi pas le titre de
noblesse d’une personne…
▪ Pour délimiter la portée d’une balise, d’un attribut ou d’une valeur d’attribut, nous
utilisons les espaces de noms (namespace)
▪ L’utilisation des espaces de noms garantit une forme de traçabilité de la balise et
évite les ambiguïtés d’usage
▪ Concept très connu en informatique
▪ Exemple: packages dans le langage de programmation Java qui servent à délimiter la portée
d’une classe. En choisissant un package, le développeur lève tout conflit potentiel sur le nom, car
la classe sera par la suite utilisée directement ou indirectement via son package et son nom.

23
Les espaces de noms dans un document XML
▪ 3 documents de sociétés différentes qui sont
intégrés dans un document utilisé par la
société 4.
▪ Il faux que:
▪ ces mélanges se fassent sans conflit
▪ L’application sache différencier ce qui vient de
telle ou telle société.
▪ Pour que les espaces de noms aient un sens, il
faut pour chacun d’eux un identifiant unique.
▪ Cet identifiant unique peut être simplement l’URL

24
Les espaces de noms dans un document XML
▪ Plusieurs méthodes pour l’intégration des espaces de noms, exemples: Les
règles implicites et explicites (la plus employée).
▪ L’espace de noms par défaut
▪ Il est précisé par un pseudo-attribut xmlns et la valeur associée est une URL garantissant
l’unicité de l’espace de noms.
▪ Il s’applique à l’élément où se situe sa déclaration et à tout son contenu.

l’élément chapitre et l'élément paragraphe


sont dans l’espace de noms
http://www.masociete.com
Car l'élément paragraphe est dans
l’élément chapitre

25
Les espaces de noms dans un document XML
▪ L’espace de noms par défaut même dans les éléments enfants, peut être
changé : une règle de priorité est appliquée.
L’élément paragraphe n’appartient pas à
l’espace de noms
http://www.masociete.com mais
uniquement à l’espace de noms
http://www.autresociete.com

▪ Les espaces de noms ne sont pas imbriqués


▪ Un seul espace de noms est appliqué à la fois.
▪ Un espace de noms par défaut ne concerne que les éléments
▪ Les attributs et les textes n’y appartiennent pas.
26
Les espaces de noms dans un document XML
▪ L’espace de noms explicite
▪ Il introduit la notion du préfixe qui est déclaré par xmlns:prefixe
▪ Un préfix déclaré n’est employable que dans l’élément le déclarant et dans son contenu
▪ Noté que: Lorsqu’un élément est préfixé, son contenu doit l’être aussi si l’on souhaite
que l’espace de noms s’applique également
▪ l’élément autreelement, qui n’est pas préfixé, n’a pas d’espace de noms
▪ On peut déclarer et utiliser plusieurs espaces de noms grâce aux préfixes

27
Exercice d’application: Utilisation des espaces de noms
▪ Il s’agit de créer un document livre3.xml sur la base de livre1.xml en respectant
les points suivants :
▪ Mettez tous les éléments dans l’espace de noms http://www.masociete.com sans utiliser
d’espace de noms par défaut.

▪ Mettez la deuxième section dans un espace de noms http://www.monentreprise.com.

▪ Mettez le dernier paragraphe du dernier chapitre de la dernière section sans espace de


noms.

28
2. Validation des documents XML

29
Validation XML
▪ Pour qu'un document XML soit utilisé 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.
▪ Validation XML est le contrôle du contenu XML par rapport à une grammaire
fournie
▪ DTD (Document Type Definition): le plus ancien
▪ XML Schéma ou XSD: norme fournie par le W3C
▪ Relax NG : l'équivalent de XML Schéma mais proposé par OASIS.

30
DTD (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 (c.à.d., respecte un certains nombre de contraintes)

31
DTD Structure : é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

32
DTD Structure : é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)> <elt>
<!ELEMENT sous-elt EMPTY> <sous-elt/>
</elt>
Elément avec plusieurs sous <!ELEMENT elt (s1, s2)> <elt>
éléments <!ELEMENT s1 EMPTY> <s1/>
<!ELEMENT s2 EMPTY> <s2/>
</elt>
Elément avec contenu variable <!ELEMENT elt (#PCDATA|s1)> <elt>texte</elt> ou
<!ELEMENT s1 EMPTY> <elt><s1/></elt>
Elément à contenu non défini <!ELEMENT elt ANY> <elt>texte</elt> ou
<!ELEMENT s1 EMPTY> <elt><s1/></elt> etc.

33
DTD Structure : é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

34
DTD Structure : 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
▪ 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
35
DTD: déclaration dans un document XML

▪ 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
▪ doit être placé dans le prologue
▪ DTD peut être:
▪ Interne: directement inclus dans le document
▪ La DTD est déclaré directement dans le document XML dans la balise DOCTYPE
▪ 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
36
Exercice d’application: Utilisation d’une DTD
▪ Créez la DTD carnet.dtd suivante

▪ Créez un document XML qui soit valide par rapport à cette DTD

37
Exercice d’application: Création d’une DTD
▪ Créez une DTD livre.dtd à partir du document livre2.xml créé précédemment

38
XSD (XML Schema Definition)
▪ Un schéma XML décrit la structure d'un document XML.
▪ Le langage XML Schema est également appelé XML Schema Definition (XSD).
▪ 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

39
XSD: Exemple

Document XML

DTD Schéma XML


40
XSD Structure : entête
▪ L'élément <schema> est l'élément racine de chaque schéma XML

▪ Il contient quelques attributs. Sa déclaration ressemble souvent à celle-ci:

41
XSD Structure : entête

▪ Les éléments et types de données utilisés dans le schéma proviennent de l'espace de noms
http://www.w3.org/2001/XMLSchema
▪ Les éléments et les types de données provenant de cet espace de noms doivent être précédés de xs:

▪ Les éléments définis par ce schéma (note, to, from, head, body.) proviennent de l'espace de
noms https://www.w3schools.com

▪ L'espace de noms par défaut est https://www.w3schools.com

▪ Tous les éléments utilisés par le document d'instance XML qui ont été déclarés dans ce
schéma doivent être qualifiés d'espace de noms
42
XSD: Déclaration dans un document XML
▪ xmlns: : identifie l’espace de noms par
défaut
▪ Indique au validateur de schéma que tous les
éléments utilisés dans ce document XML sont
déclarés dans l'espace de noms
https://www.w3schools.com
▪ xmlns:xsi : identifie le namespace de la
norme W3C, plus précisément l'instance du
schéma XML
▪ xsi:schemaLocation : identifie pour chaque
namespace utilisé par le document XML, la
localisation physique du document XS
▪ xsi:noNamespaceSchemaLocation identifie
la localisation physique du document XS
(Absence de namespace)
43
XSD Structure : élément
▪ La définition d’éléments se fait dans une balise <element>.
▪ Définir le type de données à l’intérieur de l’élément.

44
XSD Structure : 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

45
XSD: Types 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


46
XSD: Type 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 à partir de ce lien:


http://www.w3.org/TR/xmlschema-0/#CreatDt

▪ L’ajout des restrictions (facettes) à un type de données afin de limiter son


contenu, ou exiger que les données correspondent à un modèle spécifique,
sont possibles
47
XSD: Type Simple
▪ Le syntaxe de la définition d’un élément de type simple est comme suit:

▪ xxx est le nom de l'élément


▪ yyy est le type de données de l'élément.

▪ Exemple

Extrait d’un document XML Extrait d’un Schéma XML

48
XSD: Type Simple
▪ Les éléments simples peuvent avoir:
▪ Valeurs par défaut: Une valeur par défaut est automatiquement attribuée à l'élément
lorsqu'aucune autre valeur n'est spécifiée.

▪ Valeurs fixes: Une valeur fixe est également automatiquement affectée à l'élément
cependant on peut pas spécifier une autre valeur.

49
XSD: Type Simple Restriction
▪ La création de nouveaux types simples est réalisée au travers de la balise
<simpleType>
▪ Les restrictions sur les types simples permettent de dériver de nouveaux types
à partir de types existants et de définir des contraintes sur le nouveau type à
créer
▪ La restriction est exprimée par la balise <restriction>

Restrictions sur les valeurs


L'exemple suivant définit un élément
appelé "age" avec une restriction. La valeur
de l'âge ne peut pas être inférieure à 0 ou
supérieure à 120
50
XSD: Type Simple Restriction

Restrictions sur un ensemble de valeurs


Pour limiter le contenu d'un élément XML à un
ensemble de valeurs acceptables, on utilise la
contrainte enumeration.

Restrictions sur une série de valeurs


Pour limiter le contenu d'un élément XML afin
de définir une série de chiffres ou de lettres p,
on utilise la contrainte pattern.

51
XSD: Type Simple Restriction
Contraintes Descriptions
maxExclusive limite supérieure (exclue)
minExclusive limite inférieur (exclue)
length nombre de caractères ou d’élément d’une listeautorisé
minLength nombre minimum de caractères ou d’élément d’une liste
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
▪ Pour plus d’exemples visiter le lien suivant: XML Schema Restrictions/Facets
(w3schools.com)
52
XSD: Type 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>
53
XSD: Type complexe
▪ Type avec des attributs et sans contenu

Extrait d’un document XML Extrait d’un Schéma XML

54
XSD: Type complexe
▪ Type avec ou sans attributs et un contenu de type simple
▪ La balise <simpleContent> doit être ajouté autour du contenu.
▪ Avec l’utilisation d’un contenu simple, une extension OU une restriction dans l'élément
simpleContent doit être ajouté

Extrait d’un document XML

Extrait d’un Schéma XML


55
XSD: Type complexe
▪ Types complexes contenant uniquement des sous éléments
▪ La balise <sequence> dite indicateur d’ordre, indique la logique de placement des sous
éléments dans le document XML

Extrait d’un document XML


Extrait d’un Schéma XML

56
XSD: Type 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é

▪ Deux balises indicateurs d’occurrence peuvent être utilisé pour définir la


fréquence à laquelle un élément peut apparaître.
▪ maxOccurs: spécifie le nombre maximum de fois qu'un élément peut apparaître

▪ minOccurs: spécifie le nombre minimum de fois qu'un élément peut apparaître


57
XSD: Type 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

Extrait d’un document XML Extrait d’un Schéma XML

58
XSD: Type 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é

59
XSD: Visibilité des Types
▪ Un type est visible par tous les descendants du nœud dans lequel il a été
déclaré.
▪ Un type déclaré sous le nœud 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

60
Exercice d’application 1: Schéma XML

Donner le schéma xml approprié à ce


document XML et essayer de le tester

61
Exercice d’application 2: Schéma XML

Donner un exemple de document XML qui


sera validé par ce schéma XML

62
Exercice d’application 3: Schéma XML
Donner le schéma xml approprié à ce document XML et essayer de le tester

63
Exercice d’application 4: Schéma XML
Donner le schéma xml approprié à ce document XML et essayer de le tester

64
3. XSL
3.1. XPath
3.2. XSLT
3.3. XQuery
65
3. XSL
3.1. XPath
3.2. XSLT
3.3. XQuery
66
XSL: eXtensible Stylesheet Langage
▪ C’est plus qu’un langage de style

▪ Composé des parties suivantes:


▪ XPath: un langage pour naviguer dans les documents XML

▪ XSLT: un langage pour transformer des documents XML

▪ XQuery: un langage pour interroger des documents XML

67
XPath (XML Path Langage)
▪ C’est un standard XML qui définit des règles grammaticales pour identifier des
nœuds ou des ensembles de nœuds dans des documents XML.
▪ C’est un standard W3C
▪ XPath se représente le document XML en tant qu’arbre:
root
▪ dont la racine est l’élément racine du document XML
▪ les noeuds sont les différents éléments et attributs du XML element processing-instruction

element

attribute

text

namespace

comment
68
XPath : Terminologies
▪ Les relations entre nœuds :
▪ Parent (parent) : l’élément contenant
▪ Chaque élément et attribut a un parent.

▪ L'élément book est le parent du title, author, year et price

▪ Fils (childrens) : les éléments contenues


▪ Les nœuds d'élément peuvent avoir zéro, un ou plusieurs fils.

▪ Les éléments title, author, year et price sont tous des fils de l'élément book

▪ Frères (siblings) : les éléments ayant le même parent


▪ Les éléments title, author, year et price sont tous des frères
69
XPath : Terminologies
▪ Les relations entre nœuds :
▪ Ancetres (ancestors) : l’élément parent, le parent du parent, …
▪ Les ancêtres de l'élément title sont l'élément book et l'élément bookstore

▪ Descendants (descendants) : les éléments fils, les fils des fils, …


▪ Les descendants de l’élément bookstore sont les éléments

book, title, author, year, and price elements

70
XPath: Syntaxe
▪ 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 /bookstore/book/price permet de sélectionner le nœud
price du fragment XML ci-dessous

71
XPath: Syntaxe
Expression Description Exemples Résultats
d ’expression
Path
Nom_du_nœ Sélectionner tous les bookstore Sélectionne tous les nœuds avec
ud nœuds avec le nom le nom bookstore
Nom_du_nœud
/ Sélectionner à partir de la /bookstore Sélectionne l’élément racine du
racine du document document
//node Sélectionner tous les //price Sélectionne tous les nœuds à
nœuds à partir du nœud partir du nœud price, peu
actuel qui correspondent à importe ou il se trouve dans le
la sélection document
@ Sélectionner les attributs //@lang Sélectionne tous les attributs
nommés lang
72
XPath: Syntaxe
▪ Dans une expression Xpath, on peut utiliser le caractère * pour sélectionner
des nœuds XML inconnus.

Caractères Descriptions Exemples Résultats


génériques d ’expression
Path
* Sélectionner n’importe /bookstore/* Sélectionne tous les nœuds
quel élément quel que d'élément fils de l'élément de
soit le nom bookstore
//* Sélectionne tous les éléments
du document
@* Sélectionner n’importe //title[@*] Sélectionne tous les éléments de
quel attribut quel que soit titre qui ont au moins un attribut
le nom de n'importe quel type
73
XPath: Syntaxe
▪ Dans une expression XPath on peut utiliser le caractère | , pour sélectionner
sur plusieurs chemins
▪ Exemple: /bookstore/book/title | //price
→Sélectionne tous les éléments title de l'élément book de l'élément bookstore ET tous les
éléments de price dans le document
▪ Pour affiner la sélection, XPath propose la notion de prédicat pour pouvoir
filtrer les nœuds à récupérer
▪ Le prédicat est une expression que doit vérifier le ou les nœuds à sélectionner.
La syntaxe : /elt1/elt2/eltAVerifier[predicat]
▪ 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 : (..) 74
XPath: Syntaxe
Exemple Description
/bookstore/book[1] Sélectionne le premier élément de book qui est le fils de l'élément
bookstore
/bookstore/book[last()] Sélectionne le dernier élément book qui est le fils de l'élément
bookstore
/bookstore/book[last()-1] Sélectionne l’avant dernier fils ‘book’ de l’élément bookstore
/bookstore/book[position()<3] Sélectionne les deux premiers éléments book qui sont des fils de
l'élément bookstore
//title[@lang] Sélectionne tous les éléments title qui ont un attribut nommé lang
//title[@lang='en'] Sélectionne tous les éléments title qui ont un attribut nommé lang
avec une valeur en
/bookstore/book[price>35.00] Sélectionne tous les éléments book fils de l'élément bookstore qui
ont un élément price avec une valeur supérieure à 35,00
/bookstore/book[price>35.00]/title Sélectionne tous les éléments title des éléments book fils de
l'élément bookstore qui ont un élément price avec une valeur
supérieure à 35,00
75
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écédente

▪ Un chemin de localisation qui commence par / est un chemin absolu


▪ La syntaxe /elt1/elt2/elt3 est dite abrégé

76
XPath: Chemin 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 nœuds parcourus. Il est
encadré par [ ]
77
XPath: Exercice d’application
▪ Soit le document XML suivant, donner les chemins de
localisation adéquat pour:
▪ sélectionner tous les éléments title
▪ /bookstore/book/title
▪ sélectionner l’élément title du premier élément book qui est
un sous élément de l’élément bookstore
▪ /bookstore/book[1]/title
▪ sélectionner tous les éléments price
▪ /bookstore/book/price
▪ sélectionner tous les éléments price avec un prix supérieur à
35
▪ /bookstore/book[price>35]/price
▪ sélectionner tous les éléments title avec un prix supérieur à
35
▪ /bookstore/book[price>35]/title
78
XPath: Exercice d’application 2
▪ Soit le document XML suivant, donner les chemins
de localisation adéquat pour:
▪ sélectionner la ville de la bouteille ayant un ph>7.4
▪ /cave/bouteille[ph>7.4]/source/ville
▪ sélectionner le département et la ville de la bouteille
ayant une contenance > 50 cl
▪ /cave/bouteille[contenance>50]/source
▪ sélectionner le code à barre de la bouteille ayant le fer
dans sa composition
▪ /cave/bouteille[composition/autre="fer"]/code_barre

79
XSLT (eXtensible Stylesheet Language Transformation)
▪ C’est un 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, …)
▪ C’est un standard de la W3C
▪ XSLT utilise XPath pour rechercher des informations dans un document XML.
▪ XPath : sert pour naviguer à travers les éléments et les attributs dans les documents XML
▪ 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. 80
XSLT : Premier Exemple

Résultat de la transformation du
document XML en un document
XHTML

document XML 81
XSLT : Premier Exemple
▪ La feuille de style utilisée est
présentée dans la figure suivante
▪ L’extension du fichier est: .xsl

82
XSLT: Lien avec le document XML
▪ Il faut associer la feuille du style avec le document XML pour assurer la
transformation
▪ En ajoutant la référence de feuille de style XSL au document XML

Chemin de la feuille de style

83
XSLT: Structure
▪ Pour accéder aux éléments, attributs et fonctionnalités XSLT, Il faut déclarer
l'espace de noms XSLT en haut du document

▪ 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

▪ Le xmlns: xsl = http://www.w3.org/1999/XSL/Transform pointe vers l'espace de noms


XSLT officiel du W3C.
▪ Avec cet espace de noms, vous devez également inclure l'attribut version = "1.0".

84
XSLT: Template
▪ 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

85
XSLT: Template
▪ 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

▪ 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
86
XSLT: Balises de sélection
▪ <xs:value-of> : est utilisé pour extraire la
valeur d'un nœud sélectionné
▪ <xsl:for-each>: permet d’effectuer une boucle
sur les éléments qui correspondent au
résultat de l’expression XPath de l’attribut
select
▪ 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
▪ <xsl:sort> :permet de trier le résultat 87
XSLT: Balises de sélection
▪ <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.
▪ <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é

88
Exercice d’application 1
▪ Soit le document XML suivant, essayez de donner
la feuille de style XSL pour qu’il aura l’affichage
suivant:
▪ Code couleur: #FFB6C1

89
Exercice d’application 2
▪ Mettez à jour la feuille de style XSL de l’exercice précédent afin d’avoir
l’affichage suivant:
▪ Utilisez les balises <choose>, <when> et <otherwise>
▪ Classification sur la base de l’année
▪ Codes couleurs: #FFB6C1 et #00B0C1

90
Exercice d’application 3
▪ Mettez à jour la feuille de style XSL de l’exercice précédent afin d’avoir
l’affichage suivant:
▪ Utilisez les balises <choose>, <when> et <otherwise>
▪ Classification sur la base de la catégorie du livre
▪ Codes couleurs: #FFB6C1 et #00F0C0

91
XQuery (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

▪ Il est construit sur des expressions XPath

▪ Il est pris en charge par toutes les principales bases de données

▪ C’est une recommandation du W3C

92
XQuery: Exemples
▪ Nous utilisons le document XML suivant dans les
exemples nommé "books.xml"
▪ Fonctions:
▪ XQuery utilise des fonctions pour extraire des données
de documents XML.
▪ La fonction doc () permet d'ouvrir le fichier "books.xml":
doc ("books.xml")
▪ Expressions de chemin
▪ XQuery utilise XPath expressions pour parcourir le
document XML
▪ L'expression XPath suivante est utilisée pour
sélectionner tous les éléments title dans le fichier
"books.xml" doc ("books.xml") / bookstore/book/title
93
XQuery: Exemples
▪ Prédicats
▪ XQuery utilise des prédicats pour limiter les données extraites des documents XML.

▪ Le prédicat suivant est utilisé pour sélectionner tous les éléments book sous l'élément de
bookstore qui ont un prix avec une valeur inférieure à 30:
doc("books.xml")/bookstore/book[price<30]

94
XQuery: Syntaxe FLWOR
▪ Son nom vient des cinq clauses principales qui la composent:
▪ for: pour sélectionner une séquence de nœuds, chaque élément étant stocké dans la
variable $var
▪ let: pour lier une séquence à une variable (sans itération)
▪ where: pour filtrer les nœuds (prédicats reliés par and/or)
▪ order by: pour trier les nœuds (ascending, descending)
▪ return: pour retourner un résultat par nœud (seule clause obligatoire)

95
XQuery: Syntaxe FLWOR
▪ doc("books.xml")/bookstore/book[price<30]/title
▪ L'expression FLWOR suivante sélectionnera
exactement la même chose que l'expression de
chemin ci-dessus:

for $x in doc("books.xml")/bookstore/book
where $x/price>30
return $x/title

▪ Le résultat:
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>
96
XQuery: Syntaxe FLWOR
▪ Nous pouvons trier le résultat avec le syntax FLWOR

for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title

▪ Le résultat:
<title lang="en">Learning XML</title>
<title lang="en">XQuery Kick Start</title>

97
XQuery : Syntaxe
▪ Quelques règles de syntaxe de base:
▪ XQuery est sensible à la casse

▪ Les éléments, attributs et variables XQuery doivent être des noms XML valides

▪ Une valeur de chaîne XQuery peut être entre guillemets simples ou doubles

▪ Une variable XQuery est définie avec un $ suivi d'un nom, par exemple $bookstore

▪ Les commentaires XQuery sont délimités par (: et :), ex.(: Commentaire XQuery :)

98
XQuery: Expressions conditionnelles
▪ L’expression "If-Then-Else" est possible avec Xquery

for $x in doc("books.xml")/bookstore/book
return if ($x/@category="children")
then <child>{data($x/title)}</child>
else <adult>{data($x/title)}</adult>

▪ Résultat:
<adult>Everyday Italian</adult>
<child>Harry Potter</child>
<adult>XQuery Kick Start</adult>
<adult>Learning XML</adult>
99
Récapitulant
▪ Ce chapitre a permis de vous fournir les concepts de bases des technologies
XML, y compris:
▪ XML

▪ DTD

▪ XSD

▪ XPath

▪ XSLT

▪ XQuery

100

Vous aimerez peut-être aussi