0% ont trouvé ce document utile (0 vote)
8 vues50 pages

Cours XML Avancé

Le cours XML avancé, d'une durée de 30 heures, vise à maîtriser la syntaxe XML, la validation de documents, les requêtes XPATH, les feuilles de style XSL et la programmation XQuery. Il aborde également l'historique et les avantages de XML, notamment sa capacité à gérer des données hétérogènes et peu structurées. Le contenu du cours inclut des chapitres sur l'introduction aux documents XML, la validation, les requêtes et la structure d'un document XML.

Transféré par

Freddy
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
8 vues50 pages

Cours XML Avancé

Le cours XML avancé, d'une durée de 30 heures, vise à maîtriser la syntaxe XML, la validation de documents, les requêtes XPATH, les feuilles de style XSL et la programmation XQuery. Il aborde également l'historique et les avantages de XML, notamment sa capacité à gérer des données hétérogènes et peu structurées. Le contenu du cours inclut des chapitres sur l'introduction aux documents XML, la validation, les requêtes et la structure d'un document XML.

Transféré par

Freddy
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Cours XML avancé

Renseignements généraux :
Cours : XML avancé

Code : GL004
Préalable : HTML
Durée : 30 heures
Enseignant : NGUETCHUENG TCHUNTE Francis
Téléphone: (237) 696 15 20 72 /679 20 87 43
Courriel: fnguetchueng@[Link]

Horaire : Selon l’horaire remis à l’étudiante ou à l’étudiant.

Matériel didactique :
Volumes de références : HAROLD, E. R., MEANS, W. S., XML in a Nutshell, 3rd Edition, O’Reilly, 2004,
ISBN: 0-596-00764-7.
Alexandre BRILLANT ,XML cours et exercices ,Eyrolles,2007
Logiciels de base : Cooktop 2.5
Xmlspy

Objectifs Généraux :
 Comprendre l’utilisation de la technologie XML pour la gestion des données en présentant
les aspects essentiels de XML de manière concise et illustrée par de nombreux exemples
 Maitriser la syntaxe XML ,la validation de document par des DTD, des schémas et
schematrons , le langage XPATH, la transformation de document par XLST ,ainsi que la
programmation XQuery

Contenu
Chapitre 1 : introduction aux document XML

Chapitre 2 : VALIDATION d’un document XML

CHAPITRE 3 : les requêtes XPATH

Chapitre 4 : les feuilles de style XSL

Chapitre 5 : les requêtes XQUERY

1
Chapitre 1 : Introduction au document XML

Introduction
Aujourd'hui, les organisations doivent faire face à des besoins de plus en plus importants
d'échanges de données entre des plate-formes hétérogènes. Par exemple : l'application de CRM(
Customer Relationship Manager) doit garder la trace de toutes les correspondances avec les
clients ; le système de gestion documentaire doit communiquer avec la suite bureautique pour
valider les rapports et les propositions commerciales ; l'ERP doit savoir retrouver, extraire et
synthétiser les données des analyses financières et des statistiques de la CRM pour aider au
mieux les dirigeants à orienter la stratégie de l'organisation, etc.
Si l'on sait, de nos jours, facilement stocker et gérer un certain nombre de données structurées
et définies (nombres, relations, etc.), il est encore relativement complexe d'appliquer ces mêmes
méthodes aux données hétérogènes et peu structurées que sont les données bureautiques
(emails, rapports, documentation technique, documentation projets, etc.). Ces données, qui
peuvent s'avérer critiques et vitales, sont peu ou pas valorisées par les organisations qui les
produisent.
Ainsi, il est très difficile, voire impossible, pour une personne de retrouver facilement les emails
envoyés par un de ses collègues à un client dans le cadre d'un projet auquel tous deux
participent.
Il en va de même pour les rapports, les notes, les analyses métiers, etc. Il est donc de plus en
plus critique pour les organisations de pouvoir capturer, gérer, partager et valoriser ces flux
d'informations peu structurées et hétorogènes.

XML, standard ouvert largement accepté et déployé par l'industrie, peut aider à résoudre ce défi
: permettre aux données hétérogènes et peu structurées d'être utilisées par le système
d'information de l'organisation dans son ensemble.

I-Présentation
L'historique suivant retrace les grandes étapes qui ont conduit à la naissance de XML.
L'ancêtre de XML est le langage SGML qui a été introduit en 1986 par C. Goldfarb. SGML a
été conçu pour des documentations techniques de grande ampleur. Sa grande complexité a
freiné son utilisation en dehors des projets de grande envergure. En 1991, T. Berners-Lee a
défini le langage HTML pour le WEB. Ce langage est une version simplifiée à l'extrême de
SGML, destinée à une utilisation très ciblée. XML est, en quelque sorte, intermédiaire entre
SGML et HTML. Il évite les aspects les plus complexes de SGML tout en gardant
suffisamment de souplesse pour une utilisation généraliste. La version 1.0 de XML a été
publiée en 1998 par le consortium W3C (World Wide Web Consortium). Une redéfinition
XHTML de HTML 4.0 à travers XML a été donnée en 1999. Une seconde version 1.1, qui est
simplement une mise à jour pour les caractères spéciaux en lien avec Unicode, a, ensuite, été
publiée en 2004.

Intérêts

2
XML est devenu omniprésent dans le monde de l'informatique. De nombreux standards sont
apparus et permettent à des applications différentes de stocker mais surtout de partager des
documents. L'exemple le plus emblématique et le plus connu est le format OpenDocument qui
est utilisé par OpenOffice, maintenant appelé LibreOffice, mais aussi par d'autres suites
bureautiques comme KOffice. Un autre exemple est le format de dessins vectoriels SVG utilisé
par Inkscape. Ce succès de XML est en grande partie du à ses qualités. Nous allons d'abord
énumérer ces caractéristiques essentielles qui ont conduit à ce développement puis nous allons
les détailler plus en profondeur.

 Séparation stricte entre contenu et présentation


 Simplicité, universalité et extensibilité
 Format texte avec gestion des caractères spéciaux
 Structuration forte
 Modèles de documents (DTD et Schémas XML)
 Format libre

Une des idées directrices de XML est la séparation entre contenu et présentation. Il faut bien
distinguer le contenu d'un document et la présentation qui en est donnée. Un même contenu
peut être rendu de façons très différentes. Cet ouvrage peut, par exemple, se présenter comme
un livre imprimé ou comme une collections de pages WEB. Le contenu est constitué, au départ,
de textes et d'illustrations mais aussi de liens entre ces éléments. L'organisation du texte en
chapitres, sections et sous-sections ainsi que les renvois entre chapitres font partie intégrante
du contenu du document. La présentation est au contraire la façon de présenter ce contenu au
lecteur.

Un des premiers principes de XML est d'organiser le contenu de manière indépendante de la


présentation. Ce principe de séparation est déjà présent dans HTML. Le rendu d'une page
HTML est globalement confié au navigateur. Les paragraphes des documents HTML sont, par
exemple, écrits au kilomètre, sans indication de fins de lignes. Il appartient au navigateur de les
découper en lignes en fonction de la taille de la page. C'est très différent d'un document PDF
où le découpage en pages et en lignes est figée par le document. La séparation n'est cependant
pas totale en HTML. Certaines balises comme <ul> et <li> sont destinées à la structuration du
document. Pour ces deux balises, il s'agit d'écrire une énumération. La présentation de cette
énumération (marges, symbole marquant chaque entrée, …) est déléguée au navigateur. D'autre
balises comme <i> ou <b> donnent davantage des indications de présentation. Cette séparation
entre contenu et présentation a été accrue en HTML par l'introduction de CSS. Une feuille de
style CSS est chargée de donner au navigateur toutes les informations relatives à la présentation.
Le document HTML peut alors se recentrer sur la structuration du contenu de façon
indépendante de la présentation.

Cette séparation entre contenu et présentation est difficile à obtenir. Le rédacteur d'un document
a souvent une présentation en tête et il est tentant pour lui d'essayer de l'imposer.

La séparation est encore plus marquée en XML car la signification des balises n'est pas figée
comme en HTML. La règle est alors de choisir les balises pour organiser le document en
privilégiant la structure de celui-ci par rapport à une éventuelle présentation.

II-Les avantages de XML


Voici les principaux atouts de XML :
3
 La lisibilité : aucune connaissance ne doit théoriquement être nécessaire pour
comprendre un contenu d'un document XML
 Autodescriptif et extensible
 Une structure arborescente : permettant de modéliser la majorité des problèmes
informatiques
 Universalité et portabilité : les différents jeux de caractères sont pris en compte
 Déployable : il peut être facilement distribué par n'importe quels protocoles à même
de transporter du texte, comme HTTP
 Intégrabilité : un document XML est utilisable par toute application pourvue d'un
parser (c'est-à-dire un logiciel permettant d'analyser un code XML)
 Extensibilité : un document XML doit pouvoir être utilisable dans tous les domaines
d'applications

Ainsi, XML est particulièrement adapté à l'échange de données et de documents.

L'intérêt de disposer d'un format commun d'échange d'information dépend du contexte


professionnel dans lequel les utilisateurs interviennent. C'est pourquoi, de nombreux formats
de données issus de XML apparaissent (il en existe plus d'une centaine) :

 OFX : Open Financial eXchange pour les échanges d'informations dans le monde
financier
 MathML : Mathematical Markup Language permet de représenter des formules
mathématique
 CML : Chemical Markup Language permet de décrire des composés chimiques
 SMIL : Synchronized Multimedia Integration Language permet de créer des
présentations multimédia en synchronisant diverses sources : audio, vidéo, texte,...

III-Structure d’ un document xml

1-EXEMPLE

On commence par donner un premier exemple de document XML comme il peut être écrit
dans un fichier [Link]. Ce document représente une bibliographie de livres sur
XML. Ce document contient une liste de livres avec pour chaque livre, le titre, l'auteur,
l'éditeur , l'année de parution, le numéro ISBN et éventuellement une URL.

<?xml version="1.0" encoding="iso-8859-1" ?>(1)


<!-- Time-stamp: "[Link] 3 Mar 2013 " -->(2)
<!DOCTYPE bibliographie SYSTEM "[Link]" >(3)
<bibliographie>(4)
<livre code ="Michard01" langue ="fr">
<titre >XML langage et applications</titre>
<auteur>Alain Michard</auteur>
<année>2001</année>
<editeur>Eyrolles</editeur>
<isbn>2-212-09206-7</isbn>
<url>[Link]
</livre>
<livre code ="Zeldman03" langue="en">

4
<ttitre>Designing with web standards</titre>
<auteur>Jeffrey Zeldman</auteur>
<annee>2003</année>
<editeur>New Riders</editeur>
<isbn>0-7357-1201-8</isbn>
</livre>
...
</bibliographie>(5)

(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) Déclaration de DTD externe dans le fichier [Link].
(4) Balise ouvrante de l'élément racine bibliographie
(5) Balise fermante de l'élément racine bibliograpie

2) Composition globale d'un document

Un document XML est composé des trois constituants suivants.


 Prologue : Il contient des déclarations facultatives.
 Corps du document : C’est le contenu même du document.
 Commentaires et instructions de traitement : Ceux-ci peuvent apparaître partout
dans le document, dans le prologue et le corps.

Le document se découpe en fait en deux parties consécutives qui sont le prologue et le


corps. Les commentaires et les instructions de traitement sont ensuite librement insérés
avant, après et à l'intérieur du prologue et du corps.

La structure globale d'un document XML est la suivante.


<?xml ... ?> Prologue
... 
<element racine> 
... Corps
</element racine>

Dans l'exemple donné au début de ce chapitre, le prologue comprend les trois premières
lignes du fichier. La première ligne est l'entête XML et la deuxième est simplement un
commentaire utilisé par Emacs pour mémoriser le nom du fichier et sa date de dernière
modification. La troisième ligne est la déclaration d'une DTD externe
contenue dans le fichier [Link]. Le corps du document commence à la
quatrième ligne du fichier
avec la balise ouvrante <bibliographie>. Il se termine à la dernière ligne de celui-ci
avec la balise fermante </bibliographie>.

2-1) Prologue
Le prologue contient deux déclarations facultatives mais fortement conseillées ainsi que des
commentaires et des instructions de traitement. La première déclaration est l'entête XML
qui précise entre autre la version de XML et le codage du fichier. La seconde déclaration est
5
la déclaration du type du document (DTD) qui définit la structure du document. La
déclaration de type de document est omise lorsqu'on utilise des schémas XML ou d'autres
types de modèles qui remplacent les DTD. La structure globale du prologue est la suivante.
<?xml ... ?> Entête XML 
<!DOCTYPE root-element [ Prologue
... DTD 
]> 
Les différentes parties du prologue sont détaillées dans les sections suivantes.

Entête XML
L'entête utilise une syntaxe <?xml ... ?> semblable à celle des instructions de
traitement qu'elle ne soit pas véritablement une instruction de traitement. L'entête XML a
la forme générale suivante.
<?xml version="..." encoding="..." standalone="..." ?>
Cette entête peut contenir trois attributs version, encoding et standalone. Il ne
s'agit pas véritablement d'attributs car ceux-ci sont réservés aux éléments mais la syntaxe
identique justifie ce petit abus de langage.
Chaque attribut a une valeur délimitée par une paire d'apostrophes ''' ou une paire de
guillemets '"'. L'attribut version précise la version d'XML utilisée. Les valeurs possibles
actuellement sont 1.0 ou 1.1. L'attribut encoding précise le codage des caractères
utilisé dans le fichier. Les principales valeurs possibles sont USASCII,
ISO-8859-1, UTF-8, et UTF-16. Ces noms de codage peuvent aussi être écrits en
minuscule. L'attribut standalone précise si le fichier est autonome, c'est-à-dire s'il
requiert ou non des ressources extérieures. La valeur de cet attribut peut être yes ou no.
L'attribut version est obligatoire et l'attribut encoding l'est aussi dès que le codage
des caractères n'est pas le codage par défaut UTF-8. Voici quelques exemples d'entête XML.
<?xml version="1.0"?>
<?xml version='1.0' encoding='UTF-8' ?>
<?xml version="1.1" encoding="iso-8859-1" standalone="no" ?>

Déclaration de type de document


La déclaration de type définit la structure du document. Elle précise en particulier quels
éléments peut contenir chacun des éléments. Cette déclaration de type peut prendre
plusieurs formes suivant que la définition du type est incluse dans le document ou externe.
Elle a la forme générale suivante qui utilise le mot clé DOCTYPE.
<!DOCTYPE ... >
La forme précise de cette déclaration est explicitée au chapitre consacré aux DTD

2-2) Corps du document

Le corps du document est constitué de son contenu qui est organisé de façon hiérarchique à
la manière d'un système de fichiers à l'exception qu'aucune distinction n'est faite entre
fichiers et répertoire. L'unité de cette organisation est l'élément. Chaque élément peut
contenir du texte simple, d'autres éléments ou encore un mélange des deux. Comme dans
une arborescence de fichiers, il y a un élément appelé élément racine qui contient
l'ensemble du document.

6
- Élément

Contenu de l'élément name


Un élément est formé d'une balise ouvrante, d'un contenu et de la balise fermante
correspondante. La balise ouvrante prend la forme <name> formée du caractère '<', du
nom name de l'élément et du caractère '>'. Des attributs peuvent éventuellement être
ajoutés entre le nom et le caractère '>'. La balise fermante prend la forme </name>
formée des deux caractères '</', du nom name de l'élément et du caractère '>'. Les
noms des éléments sont des noms XML quelconques. Ils ne sont pas limités à un ensemble
fixé de noms prédéfinis comme en HTML. Le contenu d'un élément est formé de tout ce qui
se trouve entre la balise ouvrante et la balise fermante. Il peut être constitué de texte,
d'autres éléments, de commentaires et d'instructions de traitement

Dans la balise ouvrante, le caractère '<' doit être immédiatement suivi du nom de
l'élément. En revanche, il peut y avoir des espaces entre le nom et le caractère '>'. La
balise fermante ne peut pas contenir d'espace.

- Elément vide ou Élément avec un contenu vide

Lorsque le contenu est vide, c'est-à-dire lorsque la balise fermante suit immédiatement la
balise ouvrante, les deux balises peuvent éventuellement se contracter en une seule balise
de la forme <name/> formée du caractère '<',
Comme chaque élément possède une balise ouvrante et une balise fermante, les balises
vont nécessairement par paire. À toute balise ouvrante correspond une balise fermante et
inversement. L'imbrication des balises doit, en outre, être correcte. Si deux éléments tag1
et tag2 ont un contenu commun, alors l'un doit être inclus dans l'autre. Autrement dit, si
la balise ouvrante <tag2> se trouve entre les deux balises <tag1> et <tag1/>, alors la
balise fermante </tag2> doit aussi se trouver entre les deux balises <tag1> et tag1/>

- Sections littérales
Les caractères spéciaux '<', '>' et '&' ne peuvent pas être inclus directement dans le
contenu d'un document.
Ils peuvent être inclus par l'intermédiaire des entités prédéfinies
Il est souvent fastidieux d'inclure beaucoup de caractères spéciaux à l'aide des entités. Les
sections littérales, appelées aussi sections CDATA en raison de la syntaxe permettent
d'inclure du texte qui est qui recopié verbatim.
Une section littérale commence par la chaîne de caractères '<![CDATA[' et se termine
par la chaîne ']]>'.
Tous les caractères qui se trouvent entre ces deux chaînes font partie du contenu du
document, y compris les caractères spéciaux.

<![CDATA[Contenu avec des caractères spéciaux <, > et & ]]>

7
Une section CDATA ne peut pas contenir la chaîne de caractères ']]>' qui permet à
l'analyseur lexical de détecter la fin de la section. Il est en particulier impossible d'imbriquer
des sections CDATA.
- Attributs
Les balises ouvrantes peuvent contenir des attributs associés à des valeurs. L'association de
la valeur à l'attribut prend la forme attribute='value' ou la forme
attribute="value" où attribute et value sont respectivement le nom et la
valeur de l'attribut. Chaque balise ouvrante peut contenir zéro ou plusieurs associations de
valeurs à des attributs comme dans les exemples ci-dessous.
<tag attribute="value"> ... </tag>
<tag attribute1="value1" attribute2="value2"> ... </tag>

Voici ci-dessous d'autres exemples de balises ouvrantes avec des attributs.


<body background='yellow'>
<xsd:element name="bibliography" type="Bibliography">
<a href="#{$node/@idref}">

Lorsque le contenu de l'élément est vide et que la balise ouvrante et la balise fermante sont
contractées en une seule balise, celle-ci peut contenir des attributs comme la balise
ouvrante.

<hr style="color:red; height:15px; width:350px;" />


<xsd:attribute name="key" type="xsd:NMTOKEN" use="required"/>
Le nom de chaque attribut doit être un nom XML . La valeur d'un attribut peut être une
chaîne quelconque de caractères délimitée par une paire d'apostrophes ''' ou une paire
de guillemets '"'. Elle peut contenir les caractères spéciaux '<', '>', '&', ''' et '"'
mais ceux-ci doivent nécessairement être introduits par les entités prédéfinies . Si la valeur
de l'attribut est délimitée par des apostrophes ''', les guillemets '"' peuvent être
introduits directement sans entité et inversement.
<xsl:value-of select="key('idchapter', @idref)/title"/>
<xsl:if test='@quote = "&apos;"'>
Comme des espaces peuvent être présents dans la balise après le nom de l'élément et entre
les attributs, l'indentation est libre pour écrire les attributs d'une balise ouvrante. Aucun
espace ne peut cependant séparer le caractère '=' du nom de l'attribut et de sa valeur. Il
est ainsi possible d'écrire l'exemple générique suivant.
<tag attribute1="value1"
attribute2="value2"
...
attributeN="valueN">
...
</tag>
L'ordre des attributs n'a pas d'importance. Les attributs d'un élément doivent avoir des
noms distincts. Il est donc impossible d'avoir deux occurrences du même attribut dans une
même balise ouvrante.

- Élément racine
Tout le corps du document doit être compris dans le contenu d'un unique élément appelé
élément racine. Le nom de cet élément racine est donné par la déclaration de type de

8
document si celle-ci est présente. L'élément bibliographie est l'élément racine de
l'exemple donné au début du chapitre.
- Commentaires
Les commentaires sont délimités par les chaînes de caractères '<!--' et '-->' comme
en HTML. Ils ne peuvent pas contenir la chaîne '--' formée de deux tirets '-' et ils ne
peuvent donc pas être imbriqués. Ils peuvent être présents dans le prologue et en particulier
dans la DTD. Ils peuvent aussi se situer dans le contenu de n'importe quel élément et après
l'élément racine. Un exemple de document XML avec des commentaires partout où ils
peuvent apparaître est donné ci-dessous.

Choix entre éléments et attributs


L’attribut peut sembler superflu. En effet, ce qui s’écrit avec des attributs peut également
l’être en s’appuyant uniquement sur des éléments.
Exemple :
Cas avec attributs :
<personne nom="brillant" prenom="alexandre"/>
Cas sans attribut :
<personne>
<nom>
brillant
</nom>
<prenom>
alexandre
</prenom>
</personne>
Cependant, l’inverse n’est pas vrai car un attribut ne peut pas être répété dans un élément
(mais il peut l’être au travers d’éléments différents).
Exemple :
Cas avec éléments :

<carnet>
<personne>…
</personne>
<personne>…
</personne>
</carnet>
S’il fallait supprimer les éléments personne au profit d’attributs, il faudrait utiliser une
convention de nommage complexe des attributs (avec une numérotation pour chaque
personne…) ce qui ferait perdre tout intérêt à XML qui sert justement à structurer des
données.
On peut définir cependant quelques règles simples pour déterminer s’il est préférable
d’utiliser un attribut ou un élément. Lorsqu’une valeur est de taille modeste, a peu de
chance d’évoluer vers une structure plus complexe, et n’est pas répétée, alors l’attribut
peut tout à fait convenir. Dans tous les autres cas, l’élément reste incontournable. Si vous
avez un doute entre un attribut et un élément, alors choisissez toujours l’élément qui est
le plus ouvert et garantira le plus facilement une évolution.

9
Les noeuds textes
Dans un document XML, ce qui est appelé donnée est le texte qui est associé à l’attribut,
c’est-à-dire sa valeur, ou à l’élément, c’est-à-dire son contenu. Les données constituent le
coeur du document, et tout le reste, le formalisme, ne sert qu’à séparer et classer ces
données.
Celles-ci sont dites terminales dans l’arborescence XML, dans la mesure où il ne peut
y avoir de structuration supplémentaire. Dans le vocabulaire propre à DOM (Document
Object Model), que nous aborderons dans un autre chapitre, la donnée apparaît comme un
noeud texte. Elle est bien entendu liée au prologue puisque l’encodage sert à désigner le jeu
de caractères utilisé dans votre document.
Dans le premier exemple XML que nous avons donné, le texte XML est une donnée liée à
l’attribut titre de l’élément cours. Introduction… est une donnée liée à l’élément plan.
Comme certains caractères sont réservés à la syntaxe XML, il faut être vigilant lors de
l’écriture des données.
Exemple :
<calcul>
if ( a<b et b>c) ...
</calcul>
Dans cet exemple, on voit bien que <b et b> n’est pas une balise mais fait partie des données
liées à l’élément calcul. Ce que nous comprenons facilement n’est pas sans ambiguïté pour
un parseur qui identifiera une balise de syntaxe incorrecte.
Pour résoudre ce problème, nous disposons d’entités prédéfinies. L’entité en elle-même
peut être perçue comme un raccourci vers une autre valeur, ce qui a l’avantage de faciliter la
maintenance (changement de valeur avec répercussions) et de masquer les conflits
syntaxiques.
Voici la liste des entités prédéfinies :
• &lt; équivalent de < (less than) ;
• &gt; équivalent de > (greater than) ;
• &amp; équivalent de & (ampersand) ;

• &quot; équivalent de " (quote) ;

• &apos; équivalent de ' (apostrophe).


L’exemple précédent peut donc être correctement réécrit :
If (a&lt;b et b&gt;c)
Bien entendu, les entités prédéfinies ne servent qu’à lever une ambiguïté syntaxique pour le
parseur.
Ces entités peuvent être utilisées dans un élément, pour du texte, ou dans un attribut, pour
sa valeur.
Les entités prédéfinies présentes en trop grand nombre dans un même bloc peuvent
alourdir inutilement le document. Dans le cas du contenu textuel d’un élément (et
uniquement dans ce cas), nous disposons des sections CDATA (Character Data). Cette
section doit être considérée comme un bloc de texte dont les caractères seront pris tel
quel par le parseur jusqu’à la séquence de fin ]]>.

3)-Quelques règles de syntaxe

10
Ces règles de syntaxe sont à respecter impérativement pour qu’un document XML soit bien
formé.
• 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-zA-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 (attention, 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>.
Pour connaître plus précisément les caractères autorisés, vous pouvez vous reporter à la
grammaire XML du W3C disponible à l’adresse [Link]
20060816/#sec-well-formed.

Quelques conventions de nommage


Voici quelques conventions souvent employées dans les documents XML :
• 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.
Exemples :
<value-of/>
<valEntier></valEntier>
Quelques exemples XML
Voici quelques exemples simples de documents XML. Certaines formes de structuration
d’usage courant ont été normalisées par différents organismes comme le W3C ou le
consortium OASIS ([Link] Vous pouvez à titre d’exercice essayer de
distinguer chaque composante de ces documents.
Le format MathML

MathML est une recommandation du W3C ([Link] servant à d’écrire


des expressions mathématiques.
<?xml version="1.0"?>
<math>
<mrow>
<msup> <mi>x</mi><mn>2</mn> </msup>
<mo>+</mo>
<mrow>
<mn>4</mn><mo>&InvisibleTimes;</mo><mi>x</mi>
</mrow>
<mo>+</mo>
<mn>4</mn>
</mrow>

11
</math>
Très brièvement, mo désigne un opérateur, mrow une expression, mi et mn
respectivement des opérandes variable (par exemple x) et nombre.
Ici nous avons décrit l’expression : x^2+4x+4.
Le format VoiceXML
VoiceXML est un standard pour décrire des choix (processus de questions/réponses) liés à
des répondeurs vocaux ([Link]
<vxml version="2.0">
<menu>
<prompt>Faire un choix :<enumerate/></prompt>
<choice next="[Link]
</choice>
<choice next="[Link]
</choice>
<noinput>Merci de faire un choix <enumerate/></noinput>
</menu>
</vxml>
Très brièvement, menu représente une liste de choix, prompt est une question, choice une
réponse possible et noinput la phrase produite si aucun choix n’est réalisé ; le menu est
rappelé avec enumerate.

12
Chapitre 2 : VALIDATION d’un document XML

A : DTD : DOCUMENT TYPE DEFINITION

INTRODUCTION :

Nous avons vu comment il était possible d’écrire du XML en respectant ses règles de syntaxe et
d’obtenir ainsi un document XML bien formé. Dans un document XML nous devons parfois spécifier
des contraintes plus précises et propres à notre langage XML. Cela va prendre ici la forme d’une
DTD( définition de type de document) .

On dira alors qu’ en plus d’être bien formée, le document est valide par rapport à une certaine DTD.

Cette spécification d’une grammaire pour un langage et la possibilité de tester automatiquement son
respect par un document donné, présentent les avantages suivants :

 Faciliter l’échange et la mise en commun de documents produits par des rédacteurs


différents ;
 Aider les développeurs qui conçoivent des outils automatiques pour traitre les
documents respectant la même DTD.

NB : A titre de rappel une DTD n’est pas obligatoire pour document XML.

A-1. TYPE DE DTD.

Une DTD peut être stocké dans deux endroits différents. Elle peut être incorporé au document
XML et elle est donc dite INTERNE ou bien être un fichier a part; là on parle DTD Externe.

Il est possible de meuler DTD Externe et Interne.

A.1.1 LA DTD INTERNE

La déclaration d’une dtd interne arrive dans l’entête du document XML on trouve d’abord le mot clé
"DOCTYPE" suivi de l'élément servant de racine au document et enfin, la DTD elle-même entre
crochets

Ex . <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE palette [

]>

<palette>

</palette>

A.1.2: DTD EXTERNE.

13
Lorsque la DTD est externe, celle-ci est contenue dans un autre fichier dont l'extension est
généralement .dtd.
Le document XML se contente alors de donner l'adresse de sa DTD pour que les logiciels puissent y
accéder.
L'adresse de la DTD peut être donnée explicitement par une URL ou par un FPI (Formal Public
Indentifier).
Les FPI sont des noms symboliques donnés aux documents. Ils sont utilisés avec des catalogues qui
établissent les correspondances entre ces noms symboliques et les adresses réelles des documents.

A.1.2 .1 Adressée par URL


La référence à une URL est introduite par le mot clé SYSTEM suivi de l'URL délimité par des
apostrophes '''
ou des guillemets '"'.
<!DOCTYPE root-element SYSTEM "url" >
L'URL url peut être soit une URL complète commençant par http:// ou ftp:// soit plus
simplement le nom d'un fichier local comme dans les exemples suivants.
<!DOCTYPE bibliography SYSTEM
"[Link]
<!DOCTYPE bibliography SYSTEM "[Link]">

A.1.2.2. Adressée par FPI


La référence à un FPI est introduite par le mot clé PUBLIC suivi du FPI et d'une URL délimitée par
des apostrophes ''' ou des guillemets '"'. L'URL est utilisée dans le cas où le FPI ne permet pas à
l'application de retrouver la DTD.
<!DOCTYPE root-element PUBLIC "fpi" "url" >
L'exemple suivant est la déclaration typique d'une page HTML qui utilise une des DTD de XHTML.
<!DOCTYPE html PUBLIC "-//W3C/DTD XHTML 1.0 Transitional//EN"
"[Link] >

A.1.3: DTD Mixte

Il est possible de mélanger les deux notations pour avoir une partie de la DTD dans un fichier séparé,
et une autre partie embarqué dans le document XML.

Ex. <?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!DOCTYPE palette SYSYEM "[Link]" [ . .

]>

<palette>

</palette>

A.2 DECLARATION D'ELEMENTS.

1 Généralités:

Une déclaration d'éléments est de la forme:

<!ELEMENT nom typeelement>

Le "nom" est le nom de l'élément et le type d'élément est le type auquel il est associé. Un élément peut
être du type texte, vide, en séquence ou choix d'éléments. Dans ces deux derniers cas, on indique la
liste d'éléments enfant.

14
2. Elément Texte :

C'est l'élément le plus répandu, il se déclare ainsi: <!ELEMENT elt(#PCDATA)>

3. Elément Vide : Un vide est comme son nom l'indique, un élément qui n'a aucun contenu.

Que ce soit de type texte ou bien un autre élément.

Ex. <!ELEMENT elt EMPTY>

<Couverture couleur="jaune"/> (dans le doc XML.)

<!ELEMENT Couverture EMPTY> (dans le doc DTD.)

4. Les Indicateurs D'occurrence

Lors de la déclaration de séquences, ou de choix d'éléments, à chaque élément enfant peut être attribué
une indication d'occurrence.

On a trois indicateurs d’occurrence; *, + , ?

Ex

<!ELEMENT elt0(elt1, elt2?, elt3+, elt4*)>

L'élément 1(elt1); ne comprend aucune indication d'occurrence. Il doit donc apparaitre une seule et
unique fois dans L'élément 0(elt0).

L'élément 2? (elt2?); a pour indication "?", cela signifie que l'élément doit apparaitre au maximum
une fois (il peut ne pas apparaitre du tout).

L'élément 3+ (elt3+); signifie que l’élément doit apparaitre au moins une fois.

L'élément 4*(elt4*) i.e l’élément peut apparaitre autant de fois que l'auteur le désire, voir pas du tout.

5. Séquence D'éléments

Une séquence d'éléments est une liste ordonnée d'éléments, qui doivent apparaitre en tant qu'éléments
enfants de l'élément que l'on est en train de définir.

Cette liste est composée d’éléments séparés par des virgules, et elle est placée entre parenthèses.

e.g.

<!ELEMENT elt0(elt1, elt2, elt3)>

<!ELEMENT infoindividu(nom,prenom,sexe,sp)>

<!ELEMENT CarteCNI(N°CNI, lieuetabli, infoindividu)>

Document xml valide

<infoindividu>

<nom>Kacmany</nom>

15
<prenom>Herve</prenom>

<sexe>masculin</sexe>

<SP> 70</SP>

</infoindividu>

document xml invalide

<infoindividu>

<prenom>Herve</prenom>

<nom>Kacmany</nom>

<sexe>masculin</sexe>

<SP> 70</SP>

</infoindividu>

Il est possible d'utiliser des indicateurs d'occurrence

ex. <!ELEMENT elt0(elt2?, elt3+, elt4*)>

6. Choix D'éléments

Un choix d'élément donne le choix dans une liste de plusieurs éléments possible.

L'utilisation précise dépend des indicateurs d'occurrence. Cette liste est composé d'éléments séparé par
le caractère "|".

EX

<! ELEMENT elt0(elt1|elt2|elt3)>

<!ELEMENT infoindividu(nom|prenom)>

Document xml valide;

<infoindividu>

<nom> Kacmany</nom>

</infoindividu>

7. Eléments Quelconque

L'élément quelconque est un élément fourre-tout dans une DTD. Il peut contenir tout autre élément
défini dans la DTD aussi bien qu'être vide ou contenir du texte.

Les éléments enfant éventuelle peuvent apparaitre dans n'importe quel ordre et en quantités non
définie.

Il est préférable de ne pas l'utiliser. Ex

16
<!ELEMENT elt ANY>

8. Eléments à Contenu Mixte

Un élément à contenu mixte peut contenir aussi bien du texte que des éléments enfant. Il se
présente comme une liste de choix avec des indicateurs d'occurrences bien choisi.

Ex

<!ELEMENT Citation (#PCDATA/Auteur)*>

Ex doc XML valide;

<Citation> l'argent fait le bonheur <auteur> Nguetchueng</auteur> datant de février 2008 </citation>

Note dans une DTD on ne déclare pas l'élément racine.

Ex de la carte nationale d’ identité

<!ELEMENT Carte CNI(N°CNI, Date etablissement, informationindividu)+>

<!ELEMENT N°CNI(#PCDATA)>

<!ELEMENT dateetablissement(#PCDATA)>

<!ELEMENT infoindividu(nom,prenom, sexe, sp, parents)>

<!ELEMENT nom(#PCDATA)>

<!ELEMENT prenom(#PCDATA)>

<!ELEMENT sexe(#PCDATA)>

<!ELEMENT SP(#PCDATA)>

<!ELEMENT parents (pere,mere)>

<!ELEMENT père (#PCDATA)>

<!ELEMENT mere (#PCDATA)>

A.3 : Déclaration des Attributs.

La syntaxe des DTD utilise cette fois ATTLIST suivi du nom de l’élément concerné, suivi
des attributs, pour chacun de ces attributs on trouvera son nom, son type, et son caractère optionnel ou
non. Une déclaration d’attribut typique aura la formule suivante :

< !ATTLIST identité prenom CDATA #REQUIRED

nom CDATA #REQUIRED

surnom CDATA #IMPLIED

Nationalité CDATA "Camerounaise" >

17
Dans ce cas, L’élément identité possède 4 attributs : prénom, nom, surnom et nationalité.
Les deux premiers attributs (prénom et nom) sont obligatoire (REQUIRED). Son absence déclenche
une erreur du vérificateur syntaxique sur le fichier XML. Le troisième attribut surnom est optionnel
(IMPLIED) pas obligatoire. Le dernier quant à lui attribue une valeur par défaut pour l’attribut
nationalité. Ainsi, s’il n’est pas spécifié, l’attribut par défaut prendra la valeur par défaut
Camerounaise. Il est à noter également la possibilité pour un attribut d’être fixe. I.E. prendre
systématiquement une valeur (FIXED).

A.3.1 : Les Types D’attributs

1- CDATA : C’est le type général qui permet de saisir un texte quelconque pour un attribut de ce type.
Il est même possible d’utiliser ici des caractères habituels réservé à XML <, >.

2- Le NMTOKEN : Il s’agit ici d’un nom XML sans restrictions sur le premier caractère ici qui peut
être un chiffre. Une contrainte essentielle est donc qu’un attribut de ce type ne contiendra pas
d’espace.

<!ATTLIST pays nom CDATA #REQUIRED

Code NMTOKEN #REQUIRED>

<pays nom ”Cameroun” code”237” >

3- Le NMTOKENS: C’est one suite du NMTOKEN séparé par des espaces.

4- ENUMERATION : Dans ce cas, l’attribut ne peut prendre qu’un nombre finit de valeurs. Et on la
donne la liste exhaustive, ces valeurs séparé par des traits verticaux Exemple :

< !ATTLIST date jour (lundi| Mardi| Mercredi|Jeudi| Vendredi|Samedi| Dimanche) #REQUIRED

Mois NMTOKEN #REQUIRED

Année NMTOKEN #REQUIRED >

5- ID : Il doit s’agir d’un nom XML qui identifie de manière unique l’élément autrement dit, une
valeur qui apparait dans un tel attribut n’apparait pas une seconde fois dans le même document. Cette
notion est comparable à une clé primaire mais il faut garder en esprit qu’un type ID ne peut pas être un
nombre. Ex. < !ATTLIST diplôme intitulé CDATA #REQUIRED code ID#REQUIRED>

6- IDREF : Un attribut de type IDREF dois contenir une valeur utilisé comme type ID ailleurs dans
le document.

7- IDREFS : C’est une suite de IDREF séparé par des espaces.

A.4 : Définitions D’entités

Les déclarations d’entité permettent de disposer de l’équivalant des raccourcis claviers et des
caractères à priori non accessible dans le jeu de caractères associé.

1- Les entités paramétriques :

18
Elles servent à définir des symboles qui sont utilisé ailleurs que dans les DTD. Ce sont en
quelques sortes des raccourcis d’écriture. Ex.

< ! ELEMENT identité (Nom, Prenom, Datenaissance)>

< ! ELEMENT enseignant(nom, prenom)>

Avec utilisation entités

< ! ENTITY % elementpersonne" nom,prenom ">

< ! ELEMENT identité (% elementpersonne, Datenaissance)>

< ! ELEMENT enseignant ( % elementpersonne)>.

2- Les Entités Internes.

Ce sont des symboles pouvant être définie dans une DTD et utilisé dans un document XML
comme raccourci d’écriture. La définition entière du symbole est entièrement incluse dans la DTD.
Ex.

< ! ENTITY KH "Kacmany Hervé">

Dans le document XML

<Nom> &KH </nom>

3- Les Entités Externe.

Si le code associé à une entité devient très important, il peut être intéressant de le déclarer
dans un fichier appart. Ex .

La déclaration d'une entité externe se fait de la façon suivante <!ENTITY nomentite


SYSTEM nomfichier> et vous pouvez y faire référence (comme pour une référence
interne) par &nomentite;. See
[Link] for examples

<! ENTITY piedpage SYSTEM « »[Link] »>

4- Entités prédéfinies
Il existe des entités prédéfinies permettant d'inclure les caractères spéciaux '<', '>', '&', ''' et '"' dans
les contenus d'éléments et dans les valeurs d'attributs. Ces entités sont indispensables car ces caractères spéciaux
ne peuvent pas apparaître directement dans le contenu du document. Ces entités sont les suivantes.
Entité Caractère
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '
Tableau 3.1. Entités prédéfinies

B- XML SCHEMA :
19
Dans un premier temps, un fichier XML si on voulait le standardiser, en utilisant un vrai langage générale
de description devrai dépendre d’une DTD. Mais ce format de description, hérité du SGML souffre de
nombreuses déficiences :

 Les DTD ne sont pas au format XML


 Le typage des données est extrêmement limité.
 Les DTD ne supporte pas les espaces de nom

Conçu pour pallier à déficiences précitées des DTD, XML SCHEMA propose en plus des fonctionnalités fourni
par les DTD des nouveautés :

 typage des données est introduit, ce qui permet la gestion des Booléens, les entiers des intervalles de
temps
 Les indicateurs des éléments peuvent être tout nombre négatif.
 La notion d’héritage : Les éléments peuvent hériter d’un contenu et des attributs d’un autre élément.

B.1 Structure de Base

Comme tout document XML, Un schéma XML commence par un prologue et a un élément racine.

< ? xml version=" 1.0 " encoding= " ISO-8859-1"?>

< xsd : schema xmlms :xsd= « http//[Link]/2000/10/xml schema »>

<!—déclaration des attributs, éléments, types -- >

</xsd :schema>

L’élément racine est le xsd :schema ayant pour attribut le xmlms :xsd qui fait référence à l’espace de noms
utilisé pour l’écriture du fichier.

Remarque :

Tous les éléments d’un schéma doit commencer par le préfixe xsd :

B .2 : Déclaration d’Eléments.

Un élément dans un schéma se déclare avec la balise <xsd :element>

a) déclaration d’un élément simple

La déclaration la plus simple d'un élément prend la forme suivante.

<xsd:element name="element" type="type"/>

où element et type sont respectivement le nom et le type de l'élément. Ce type peut être un des types
prédéfinis comme xsd:string ou xsd:integer ou encore un type défini dans le schéma.

EX

< ? xml version= " 1.0 " encoding= " ISO-8859-1 " ?>

< xsd : schema xmlms :xsd= " http//[Link]/2000/10/xml schema ">

<xsd:element name= " telephone " type ="typenumero" >

20
</xsd:element>

<xsd:element name="prenom" type= "xsd:string"> </xsd:element>

<! – declaration types -- >…

</xsd:schema>

Le schéma précédent déclare deux éléments; un élément telephone et un élément prenom. Chaque
élément est typé, donc doit respecter un certain format de données. L’élément telephone a ainsi un type qui est
type numéro, qui est un type complexe, définie par l’utilisateur. L’élément prenom est du type xsd :string qui est
un type simple prédéfini de XML schéma.

Remarque :

Lorsque le type est simple, il est possible de donner une valeur par défaut ou une valeur fixe à l'élément comme
dans les deux exemples suivants. Il faut pour cela donné des valeurs aux attributs default ou fixed de
l'élément xsd:element.

Les éléments pouvant contenir des éléments enfant ou possédant des attributs sont dit de type complexe alors
qu’un élément n’en contenant pas sont dit de type simple.

b) autre déclaration

Lors de la déclaration d'un élément, il est possible de décrire explicitement le type. La déclaration du type est
alors le contenu de l'élément xsd:element. Le type est alors local et sa déclaration prend alors une des deux
formes suivantes où element est le nom de l'élément déclaré.

<xsd:element name="element">
<xsd:simpleType>
...
</xsd:simpleType>
</xsd:element>
<xsd:element name="element">
<xsd:complexType>
...
</xsd:complexType>
</xsd:element>

B-3- Déclaration des Attributs.

A la différence des éléments, les attributs sont des types simple c'est-à-dire ne peut contenir d’autres
éléments ou attributs. De plus, les déclarations d’attributs doivent être placées après les définitions des types
complexes.

Exemple :

< xsd :attribute name = " langue" type= "xsd :string "/>

Nous pouvons comme dans les DTD ajouter d’autres indicateurs à l’aide des trois attributs optionnel suivants ;
« use, default, fixed ».

Dans la DTD < !ATTLIST breve langue CDATA #IMPLIED>

21
<xsd:attribute name =”langue” type=”xsd:string” use=”optional” default = “français” />

B.4- Types de Données.

XML:schema permet de spécifier des types de données bien plus fine que le langage DTD. Il distingue
notamment deux types : Les types Simple et les types Complexe.

1- Les Types Simple.

Les types de données simples ne peuvent contenir ni attribut, ni élément enfant. Il en existe de
nombreux prédéfinis, mais il est également possible d’en dériver des nouveaux.

a- Types Prédéfinie :
Il existe de nombreux types prédéfinie dans la bibliothèque de xml :schema. On peut citer quelques-
uns :

--Decimal, integer, long, negativeinteger, int, positiveinteger, byte, date, time, datetime, gyear, gday,
…, ID, IDREF, NMTOKEN, ENTITY, …

b- Les Types Dérivé des types Simple.

b. 1- Liste de valeurs d’un même type simple.

Xml schema possède 3 types de listes chaînées. Il est également possible de créer une liste
personnalisée par dérivation des types existant.

Ex

<xsd :simpleType name = " typenumerotelephone" >

<xsd : list itemType = "xsd :unsignedbyte "/>

</xsd:simpleType>

<telephone> 74 77 14 00 </telephone>

b.2- Union De Type Simple.

On peut désirer par exemple que le type autorisé soit un nombre, soit une chaîne de caractères. Il est
possible de le faire à l’aide d’une déclaration d’union.

Ex

<xsd :SimpleType name = "Typeadresse ">

<xsd :union membersTypes = " xsd :string typenumerotelephone "/>

</xsd:SimpleType>

Dans document xml

<adresse> Logbessou </adresse>

22
<adresse> 99 02 92 73 </adresse>

b.3- Restriction D’un Type Simple.

Elle consiste à ajouter des contraintes à un type de base. On distingue différents types de contraintes
qu’on appelle facettes et elles sont différentes du type qui subit la restriction.

Exemple1 :

Enumération pour les types, chaines, caractères, entiers, date …

<xsd :simpleType name = "typetheme ">

<xsd :restriction base= “xsd:string”>

<xsd :enumeration value=”sport”/>

<xsd :enumeration value=”actualite”/>

<xsd :enumeration value=”bourse”/>

<xsd :enumeration value=”media”/>

</xsd:restriction>

</xsd:simpleType>.

Ex2: longueur fixe, minimale ou maximale des chaines de caractères.

<xsd :simpleType name= " Telephone ">

<xsd :restriction base= "xsd :string">

<xsd:length value=”10”/>

</ xsd :restriction>

</xsd :simpleType>

Exemple3 : Largeur maximal ou minimale de caractères.

<xsd :simpleType name= "typemotdepasse ">

<xsd :restriction base= "xsd :string ">

<xsd:minlength value=”6”/>

<xsd:maxlength value=”20”/>

</ xsd :restriction>

</xsd :simpleType

Bornes sur les entiers et les dates.

23
<xsd :simpleType name= " typetemperature ">

<xsd :restriction base= “xsd : “inteher “>

<xsd:minInclussive Value= “-15”/>

<xsd:maxInclussive Value= “+35”/>

</ xsd :restriction>

</xsd :simpleType>

On peut utiliser les minExclusive et les maxExclusive.

Example4: Nombres de chiffres sur les nombres.

On utilise les génériques suivants pour spécifier le nombre de chiffres.

<xsd :totaldigits value= " 5 "/>

Pour le nombre de chiffres après la virgule :

<xsd :fractiondigits value= " 2 "/>

Example5: expressions régulières sur tous les types simples.

Elle permet de spécifier quels sont les caractères autorisé à l’aide de la balise <xsd :pattern>

Example :

<xsd :simpleType name= " typeadresseelectronique ">

<xsd :restriction base= »xsd :string »>

<xsd:pattern value = .+@.+>

</ xsd :restriction>

</xsd :simpleType>

Dans cet exemple, et + signifie que l’on peut mettre n’importe quel caractère au moins une fois, et qu’entre les
deux chaines dois impérativement apparaître le caractère « @ ». il existe bien d’autres types de restriction
dans le site de :

[Link]

2- Types Complexes.

Un élément de type simple ne peut contenir de sous éléments. Il est nécessaire de déclarer les types
complexes, les éléments ayant des enfants ou des attributs, et on pourra déclarer des séquences d’éléments,
des types de choix, et des contraintes d’occurrence.

a- Cas élément à contenu vide avec attribut.

24
Exemple : élément : photo ayant un attribut ; source

<xsd :element name=”photo”>

<xsd:ComplexType>

<xsd:attribute name= “source” type= “xsd:string” use=”required”/>

</xsd:complexType>

</xsd :element>

b- Cas d’un élément à contenu simple avec attribut.

On fait une extension à un type simple.

Exemple :

<xsd :element name=”url”>

<xsd:ComplexType>

<xsd:simpleContent>

<xsd:extension base= “string” >

<xsd:attribute name= “href” type= “xsd:string”/>

</xsd:extension>

</xsd:simpleContent>

</xsd:complexType>

</xsd :element>

« SimpleContent » c’est pour préciser que l’élément ne possède pas d’élément enfant.

C- Contenu Complexe.

Il s’agit à nouveau d’utiliser <xsd :complextype> puis de lister les sous éléments autorisé au sein de
l’une de ces balises. Dans la balise <xsd :sequence> les sous éléments doivent apparaître dans l’ordre quand on
use plus tôt <xsd :all >, les sous éléments doivent tous apparaître mais dans un ordre quelconque
<xsd :choice> : Seulement un des sous éléments dois apparaître au choix.

Ex.

< xsd :element name= " breve ">

<xsd :complexType>

<xsd :sequence>

<xsd :element name= "titre " monOccurs= " 1 " maxOccurs= " 1 " type ="xsd :string">

25
<xsd :element name= "photo " minOccurs= "0 " maxOccurs= "1 " type= "xsd :string">

<xsd :element name= "url " minOccurs= "1 " maxOccurs= "unbounded " type="xsd :string" >

<xsd :element name= "texte " type= "xsd :string "/>

</xsd :sequence>

</ xsd :complexType>

< /xsd :element>

d- Contenu Mixte :

On définit pour cela un type complexe en précisant un attribut «mixed :» celui-ci indiquant que du texte
peut se glisser entre tous les sous éléments autorisé.

< ! ELEMENT paragraph. (#PCDATA|referancecité)*>

Xml schema

<xsd :element name= "paragrraphe " >

<complese type mixed = " true ">

<xsd:choice minOccurs=0 maxOccurs=”Unbounded”>

<xsd:element name=”referancecité” type=”xsd:string” />

</ xsd:choice>

</xsd:complexeType>

</ xsd:element>

B.5- Comment Lier un Fichier XML à Un Schéma

Nous n’allons pas ici entrer dans les détails de la notion d’espaces de noms mais simplement apprendre
à valider un document XML d’après un schéma XML. Dans le cas d’une référence locale, correspondant à une
DTD du type externe (ou system), on fait référence au schéma dans le document XML en utilisant l’attribut
noNamespaceSchemaLocation

< ELEMENTracine xmlns :xsi= « [Link] » xsi :


noNamespaceSchemaLocation= « lienrelatif__vers_xmlschema »>.

26
CHAPITRE 3 :Le langage de requête
XPATH
Introduction
Présentation

♦ Le langage XPATH offre un moyen d'identifier un ensemble de noeuds dans un document


XML.

♦ Toutes les applications ayant besoin de repérer un fragment de document XML peuvent
utiliser ce langage.

♦ Les feuilles de style XSL, les pointers XPOINTER et les liens XLINK utilisent de manière
intensive les expressions XPATH.

♦ XPATH est un premier pas vers un langage d'interrogation d'une base de données XML
(XQuery).

I-Structure d'arbre d'un document XML

<!-- Texte -->


<stock>
<produit>
<nom> Livre </nom><prix monnaie="Francs"> 50 </prix>
<comment> Un commentaire </comment>
</produit>
<produit>
<nom> CD </nom><prix monnaie="Euros"> 23 </prix>
</produit> <!-- Texte -->
</stock>

Les expressions XPATH

La forme générale d'une expression XPATH est

 10 ou 10.12 un nombre réel (codé en virgule flottant)


 'Hello' ou "Hello" une chaîne de caractères
 nom_de_fonction() l'appel à une fonction

27
 expr1 + expr2 une opération (+, -, mod, div)
 expr1 = expr2 un test d'égalité (=, !=)
 expr1 > expr2 une comparaison (<, <=, >, >=)
 expr1 or expr2 ou expr1 and expr2
 (expression) une parenthèse
 chemin un chemin

Les chemins

Un chemin a la forme suivante :

 /sélecteur1/sélecteur2/... un chemin absolu


 sélecteur1/sélecteur2/... un chemin relatif

Chaque sélecteur sélectionne un ensemble de noeuds en fonction du résultat du sélecteur


précédent.

L'ensemble initial est soit le noeud courant (forme relative) soit la racine (forme absolue).

Exemple :

/stock/produit/comment
{ / } --> stock -->
{ /stock } --> produit -->
{ /stock/produit[1], /stock/produit[2] } --> comment -->
{ /stock/produit[1]/comment }

Les sélecteurs de noeuds

Les sélecteurs de noeuds sont de la forme :

axe::filtre[ condition1 ][ condition2 ]...

 l'axe indique un sens de recherche,


 le filtre sélectionne un type de noeud,
 les conditions sélectionnent sur le contenu.

Les parties axe:: et [condition] sont optionnelles.

II-Les axes de recherche


Les axes en avant

Les axes qui permettent de descendre dans l'arbre:

child
les fils du noeud courant (c'est l'axe par défaut). Ces deux expressions sont identiques :
produit/child::nom
produit/nom
self

28
le noeud courant,
/stock/produit[ cond1 ]/self::produit[ cond2 ]
/stock/produit/self::prix résultat vide
descendant
les descendants du noeud courant
/stock/descendant::prix
descendant-or-self
les descendants du noeud courant plus lui-même.

Les axes en arrière

Les axes qui permettent de remonter dans l'arbre:

parent
le noeud parent du noeud courant (si il existe),
/stock/produit/comment/parent::produit/prix
ancestor
les ascendants du noeud courant
/stock/produit/comment/ancestor::stock/produit
ancestor-or-self
que dire ?

Les axes à droite et à gauche

following-sibling
les noeuds frères placés après le noeud courant,

preceding-sibling
les noeuds frères placés avant le noeud courant,

Les axes avant et après

following
les noeuds placés après dans le document,

preceding
29
les noeuds placés avant dans le document,

Les axes pour les attributs

attribute
les noeuds de type attribut du noeud courant,
/stock/produit/prix/attribute::monnaie
namespace
les noeuds de type espace de nom du noeud courant,

Synthèse des axes

III-Les filtres
Filtrer les noeuds nommés

identificateur
les noeuds de l'axe qui portent ce nom.
/stock/produit/prix/attribute::monnaie
*
les noeuds de l'axe qui ont un nom (attribut ou élément)
/stock/*/prix/attribute::*

Filtrer les noeuds textuels

text()
tous les noeuds de type texte de l'axe.
/stock/produit/*/text()

Filtrer les commentaires


30
comment()
tous les noeuds de type commentaire de l'axe.

Filtrer les instructions de traitement

processing-instructions()
tous les noeuds de type instruction de traitement de l'axe,

Filtrer les noeuds

node()
tous les noeuds de l'axe sauf la racine,
/stock/produit/prix/node()

IV-Les types de base de XPATH


Il existe quatre types de base : booléen, chaîne de caractères, nombre réel et ensemble de
noeuds.

Chaîne de caractères :

 'chaine de caractères' ou "chaine de caractères"


 string(expression)
 string(10) = '10'
 string(20.300) = '20.3'
 string(/stock/*/nom) = ' Livre ' (le premier noeud)
 string(/stock/produit) = ' Livre 50 ... ' (concaténation des
noeuds text())
 string(/stockx) = ''

Booléen :

 true() ou false()
 boolean(expression) renvoie vrai ssi l'argument est
o le booléen vrai
o un nombre différent de zéro
o la chaîne de longueur supérieure à zéro
o un ensemble de noeuds non vide
 boolean(10) = true
 boolean(0) = false

 boolean('hello') = true
 boolean('') = false

 boolean(true()) = true
 boolean(false()) = false

 boolean(/stock/produit) = true
 boolean(/stock/comment) = false

Nombre réel :
31
 100 ou 234.56
 number( expression )
 number(10) = 10

 number('10.12') = 10.12
 number(' 10.120 ') = 10.12
 number(' 10x ') = NaN (not a number)

 number(true()) = 0
 number(false()) = 1

 number(/stock/*/prix) = 50 (le premier)
 number(/stock/prix) = NaN

V- Les conditions
Rappel : les sélecteurs de noeuds sont de la forme :

axe::filtre[ condition1 ][ condition2 ]...

Définition : Un sélecteur calcule

 les noeuds de l'axe


 qui respectent le filtre et
 pour lesquels les les conditions (traduites en booléen) sont vrais.

Condition d'existence

Sélectionner un noeud en fonction de son contenu :

/stock/produit[ prix/attribute::monnaie ]
/stock/produit[ prix[ attribute::monnaie ] ]

Ces expressions sélectionnent les noeuds produit à condition qu'un prix existe avec l'attribut
monnaie précisé.

Remarque : les sous-expressions sont souvent relatives.

Un exemple étrange :

/stock/produit[ /stock/*/prix ]

Condition de position

numéro
vraie ssi le noeud courant a cette position dans le contexte courant.
produit[ 2 ][ comment ]
produit[ comment ][ 2 ]
La première expression sélectionne les noeuds produit en deuxième position si il
possède un élément fils comment, la seconde sélectionne le deuxième noeud produit
qui possède un élément fil comment.

32
Les conditions logiques

Les relations portent sur deux sous-expressions XPATH :

exp1 relation exp2


vraie ssi il existe n1 (dans le résultat de exp1) et n2 (dans le résultat de exp2) qui
respectent la relation. Les relations possibles sont
= != < <= > >=
produit[ prix = 100 ] (1)
produit[ prix != 100 ] (2)
produit[ prix < /stock/produit/prix ] (3)
Explications : (1) les produits qui ont un prix à 100 ; (2) les produits qui ont un prix
différent de 100 ; (3) tous les produits sauf les plus onéreux. Conversion : Pour
l'égalité, la conversation est automatique pour les nombres et les booléens. Pour les
relations d'ordre, la conversion en nombre est automatique.
condition1 and condition2
vraie ssi les deux conditions le sont également.
produit[prix > 10 and comment]
condition1 or condition2
vraie ssi au moins une des deux conditions est vraie.

VI-Fonctions & opérations


Les fonctions et opérations sont utilisables dans

 les expressions logiques,


 les clauses <xsl:value-of .../> des feuilles de style XSL.

Opérations et fonctions sur les nombres

+, -, mod, div,
opérations utilisables sur les nombres (conversion automatique).
produit[(prix div 10) = (prix mod 10)]
sum( noeuds )
renvoie la somme des noeuds après les avoir transformés en nombre.
count( noeuds )
renvoie le nombre de noeuds.
floor( nombre )
arrondi par le bas.
ceiling( nombre )
arrondi par le haut.
round( nombre )
arrondi par le plus proche.

Fonctions sur les booléens

true() et false()
constantes
not( boolean )
vraie ssi le paramètre est faux.

33
produit[not(prix != 100)]
tous les prix sont égaux à 100.

Fonctions sur les noeuds

last()
vraie ssi le noeud est le dernier du contexte courant.
position()
renvoie la position dans le contexte du noeud courant.
local-name( noeud )
renvoie la partie locale de l'étiquette d'un noeud.
namespace-uri( noeud )
renvoie la partie espace de nom de l'étiquette d'un noeud.
name( noeud )
renvoie l'étiquette d'un noeud.
id( chaines )
renvoie les noeuds identifiés par au moins une des étiquettes,
id('CD')/prix
id('CD Voiture SX2500 CD')/prix
id( /reference/attribute::ref )/prix

Fonctions sur les chaînes

string( objet )
renvoie une version chaîne du paramètre.
concat( chaîne1, ..., chaîneN )
concaténation de chaînes.
string-length( chaîne )
renvoie la longueur d'une chaîne.
normalize-space( chaîne )
renvoie une version normalisée (suppression des blancs au début et à la fin et
remplacement de toute suite de blancs par un seul).
normalize-space(' AB CD E ') = 'AB CD E'
les blancs comprennent l'espace, le retour à la ligne (codes 10 et 13) et la tabulation
(code 9).
translate( ch1, ch2, ch3 )
renvoie une copie de ch1 dans laquelle les caractères présents dans ch2 sont remplacés
par les caractères de même position dans ch3.
translate('ABCD', 'AC', 'ac') = 'aBcD'
substring-before( ch1, ch2 )
renvoie la chaîne res définie par ch1 = res + ch2 + reste.
substring-after( ch1, ch2 )
renvoie la chaîne res définie par ch1 = reste + ch2 + res.
substring( chaîne, début ) et substring( chaîne, début, len )
extraction de sous-chaîne.
starts-with( ch1, ch2 )
vraie ssi ch1 débute par ch2.
contains( ch1, ch2 )
vraie ssi ch1 contient ch2.

34
Simplifications
Afin d'éviter une trop grande lourdeur, les simplifications suivantes sont autorisées :

originale simplifiée exemple


child:: /stock/produit
attribute:: @ /prix/@monnaie
/descendant-or-self::node()/ // //prix
self::node() . prix[. = 10]
parent::node() .. prix/../nom
[position() = x] [x] produits[4]

35
CHAPITRE 4 : XSLT

Introduction : Le XSL signifie ; eXtensible Stylesheet Language ou encore langage eXtensible de feuilles de
style. Cette abréviation recouvre en fait 3 langages.

 Le Xpath

 XSLT : eXtensible Stylesheet Language Transformation.

 XSLT -FO : pour XSLT Formating Objects. Et ça désigne un langage permettant le contrôle de la mise
en page finale de la transformation.

Toute transformation XLST est donc d'abord un fichier XML auquel on donne généralement l'extension
XSL

Il contient au minimum:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmls:xsl="[Link]

<xsl:output method="xml" encoding="iso-8859-1" doctype-public="-//W3C//DTD


XHTML 1.1//EN" doctype-
system="[Link]
......

.....

</xsl:stylesheet>

I-Extraire du document d'origine

Le premier besoin est de pouvoir récupérer des valeurs dans le document XML d'origine on utilise
Xpath.

1) L'instruction value-of

Dans sa forme la plus simple et la plus utilisée, l'élément value Of est associé à son attribut "select" qui
lui contient une requête xpath désignant une désignant une valeur(le contenu d'un élément textuel d'un attribut ou
d'un résultat de calcul.

<xsl:value-of select="nom"/>

<xsl:value-of select="@date"/>

<xsl:value-of select="."/>

<xsl:value-of select="count(/persones/personne)"/>

L'appel à l'instruction value-of provoque la sortie de la valeur calculée dans le document final.

2- Les Variables

Un autre besoin est de récupérer une valeur ou des nœuds et simplement de les stocker avant de la
traiter, pour cela on définit la variable par: xsl:variable à qui on associe deux attributs: On associe l'attribut
"name" pour nommer la variable et l'attribut "select" contenant une requête Xpath

36
Une fois la variable définie on peut l'utiliser typiquement grâce à une requête xpath en utilisant son nom
avec l'insigne Dollar

exemple:

<xsl:variable name="nbmatch" select="count(//RENCONTRE)">

<xsl:variable name="nbnul" select="count(//RENCONTRE[@SCORED=@SCOREE])"/>

<xsl:value-of select="100*$nbnul div $nbmatch"/>

3- Copy, Copy-of

L'expression Copy-of reproduit un ensemble de nœud récupéré par un select avec la sous arborescence
de chacun. Et l'instruction copy ne copie que le nœud courant sans son contenu et sans ses fils

<xsl:copy-of select="*"/>

<xsl:copy-of select="diplome"/>

<xsl:copy> coucou</xsl:copy>

II- Règles de Transformation:

On utilise des modèles pour décrire la transformation portant sur un certain type de nœud. Elle est
présentée par l'élément <xsl:template>

cet élément contient le code Xml à produire pour créer le nouveau document. On y trouve donc des
balises du nouveau format mais aussi des instructions xslt comme celle déja vue précédemment. On peut
éventuellement utiliser des appels dans d'autres modèles exactement comme les fonctions et les procédures.

1- Les principes de base

Dans l'utilisation la plus courante l'élément <xsl:template> est muni d'un attribut match, contenant une
requête Xpath. Les nœuds concernés par la transformation sont ceux qui vérifies cette requête.

exemple:

<xsl:template match="personne">

</xsl:template>

Lorsque l'on décrit une règle de transformation, il faut garder à l'esprit que les requêtes Xpath sont
évaluées par rapport au nœud courant. Dans l'exemple suivant, nom et année sont respectivement un sous
élément et un attribut diplome que l'on est en train de transformer.

<xsl:template match="diplome">

<h2>

<xsl:value-of select="nom"/>

<h2>

<p>

obtenu en <xsl:value-of="@année"/>

37
</p>

</xsl:template>

2) Apply-templates.

L’instruction apply-template permet de faire des appels dans des model Template.

Enfin, les appels se font à l'aide de l'instruction apply-templates et d'un attribut select contenant une
requête XPath : celle-ci sélectionne des nœuds pour lesquels on va chercher des règles de transformation à
activer. Ci-dessous, une feuille XSLT complète, qui commence par traiter la racine.

<?xml version="1.0" ?>


<xsl:stylesheet version="1.0"
xmlns:xsl="[Link]

<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="mesdiplomes" />
</body>
</html>
</xsl:template>

<xsl:template match="mesdiplomes">
<h1>Mon cursus</h1>
<xsl:apply-templates select="diplome" />
</xsl:template>

<xsl:template match="diplome">
<h2>
<xsl:value-of select="nom" />
</h2>
<p>
Obtenu en <xsl:value-of select="@année" />
</p>
</xsl:template>

</xsl:stylesheet>

Précisons que l'attribut select de apply-templates n'est pas obligatoire, il peut être omis. Dans ce cas, on
va chercher à appliquer les règles de transformation à chacun des noeuds fils (ce qui revient à poser
select="node()" par défaut). Cela est particulièrement intéressant dans le cas d'un contenu mixte :

<xsl:template match="paragraph">
<p>
<xsl:apply-templates />
</p>
</xsl:template>

<xsl:template match="important">
<em><xsl:value-of select="." /></em>
</xsl:template>

Lors de la transformation d'un paragraphe, les noeuds texte seront recopiés à l'identique, tandis que les éléments
important seront traités par la seconde règle.

38
Terminons avec des utilisations des instructions copy-of et copy. L'exemple suivant remplace les éléments
paragraph en éléments p tandis que le contenu, probablement mixte (texte et balises), est recopié à l'identique
:

<xsl:template match="paragraph">
<p>
<xsl:copy-of select="*" />
</p>
</xsl:template>

La règle ci-dessous permet de récupérer l'ensemble d'un document XML en ajoutant un attribut à chacune des
balises ouvertes :

<xsl:template match="*|/">
<xsl:copy>
<xsl:attribute name="lang">fr</xsl:attribute>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>

III- Gestion des Boucles.

1) <xsl :for-each>

Il permet de créer une boucle dans la quel sont appliqué des transformations. Son utilisation est. de la forme :
<xsl :for-each>

<xsl :for-each select="requettepath "> …

</xsl :for-each>.

Ex

<ul><xsl :for-each select="livre ">

<li><xsl :value-of select= "auteur "/>

</li> </xsl:for-each>

</ul>

2) <xsl :sort>

C’est un élément qui 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-template>. Ex

<xsl :sort select= " nœud " order= " ascending|descending "

data-type= "text|number|element" case-order = “upper-first|lower-first”/>

Data-type correspond au type de données, ordre correspond à l’ordre du tri et case-order indique si le tri a lieu
sur les majuscules ou les minuscules en premier.

Ex

<ul>

<xsl:for-each select = " livre ">

39
<xsl:sort select=”auteur” order=”descending”/>

<li>

<xsl:value-of select=”auteur”/>

<xsl:value-of select=”titre”/>

</li>

</xsl:for-each>

</ul>

IV- CONDITION DE TEST :

1) <xsl :if> :

Il est possible de tester la présence d’in attribut, ou d’un élément avec le <xsl :if>. Son usage
est de la forme suivante : <xsl :if test= « condition »> action </xsl :if>. le test prends la valeur 1 ou 0
suivant le resultat de la condition. Ex. <xsl :if test= "@langue= "français " "> ce livre est en français
</xsl :if>

2) <xsl :choose>

Cet élément permet de définir une liste de choix et d’affecter à chaque choix une
transformation différente. Chaque choix est définie par un élément <xsl :when> et un traitement par
défaut peut être spécifié par l’élément <xsl :otherwise>.

<ul>

<xsl :for-each select= "livre ">

<li>

<xsl:value-of select = “auteur” />

<xsl:value-of select = “titre” />

<xsl:choose />

<xsl:when test=”@langue=”français””> ce livre est en français </xsl :when>

<xsl :otherwise> cette page n’est pas répertorié. <xsl :otherwise>

</xsl :choose>

</li>

</xsl:for-each>

</ul>

V- Complément

1) L’élément <xsl :call-template>

L’élément <xsl :template> peut être appelé indépendamment d’une sélection d’un nœud. Pour cela, il faut
renseigner l’attribut nœud et l’appeler et l’utiliser.

40
2) Les éléments <xsl :param> et <xsl :with-param>

Ils permettent de passer des valeurs aux modèles. Un paramètre est crée avec un élément <xsl :param> et est
passé à un model avec <xsl :with-param>. Les deux éléments ont deux attributs. L’attribut name, qui est
obligatoire et donne un nom aux paramètres. Et l’attribut select qui est facultatif, c’est une expression Xpath,
permettant de donner une valeur par défaut aux paramètres. Ex On veut calculer une expression polynomiale.
Pour cela, créons un modele pour ce calcul. f(x)=2x²-5x+3

<xsl :template name= "polygone ">

<xsl :param name= "variable "/>

<xsl:value-of select=”2*$varriablex*$variablex+(-5)*$variablex+3”>

</xsl:template>

Il suffit alors de l’appeler en lui passant différentes valeurs pour évaluer l’expression x

<xsl :call-template name= "polygone ">

<xsl:with-param name=”variablex”select=”2”/>

</xsl:call-template>

3 <xsl :output>

: c’est un élément vide à placer comme premier enfant du <xsl :stylesheet> et qui permet de spécifier les options
concernant l’arbre de sortie. L’utilisation de cet élément est de la forme :

<xsl :output method= “xml|html|Text” version= “ “ encoding= “ ” omit-xml-declaration=”yes|no”


standalone=”yes|no” doctype-public=”” doctype-system=” “ …>

Example:

<xsl :output method= “html” version =”html 4.01” encoding=”ISO-8859-1” doctype-public=”_//W3C::DTD


HTML 4.01//EN” doctype-system=”http:[Link]/TR/html4/[Link]”/>

Cet exemple permet d’indiquer que le fichier de sortie sera au format html4.01, conforme a la DTD public de
html et que le jeu de caractères utilisé est iso 8859-1.

4 <xsl :element> et <xsl :attribute> :

Ils permettent d’insérer un nouveau élément ou un nouveau attribut dans la transformation.

<xsl :element name= "nomelement" use-attribute-sets= "Jeux des attributs"> </xsl :element>

<xsl :attribute name= "nomdel’attribut "> valeur < /xsl :attribute >

5) Inclusion des feuilles de style.

Il est parfois nécessaire de scinder une feuille de style en plusieurs feuilles différentes. Pour cela, il suffit de
spécifier dans la feuille de style maitresse un appel à une autre feuille de style soit par l’élément <xsl :include>
ou <xsl :import> exemple :

<xsl :include href="feuillestyle_inclure " />.

41
Chapitre 5 XQUERY
Le rôle de XQuery XML est similaire au rôle de la base de données dans SQL.

XQuery est conçu pour interroger les données XML.

I-Une introduction à XQuery


La meilleure façon d'expliquer XQuery est de dire ceci: XQuery par rapport à la relation entre
le XML et SQL équivalent par rapport aux tables de base de données relationnelles.

XQuery est conçu pour interroger les données XML - ne se limite pas aux documents XML,
des formulaires XML peuvent également inclure toute présentation des données, y compris les
bases de données.

Vous devez avoir une connaissance de base:

Avant de continuer à apprendre, nous avons besoin d'avoir connaissance de la compréhension


de base suivante:

 HTML / XHTML
 XML / espace de noms XML
 XPath

II-Des exemples XQuery


Dans cette section, nous apprenons en étudiant un exemple pour une syntaxe XQuery de base.

documents d'instance XML


Nous allons utiliser ce document XML dans les exemples ci-dessous.

"[Link]":

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>

42
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>

<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>

<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>

</bookstore>

III Comment sélectionner un nœud de «[Link]»?


fonction

XQuery utilise des fonctions pour extraire des données à partir du document XML.

doc () est utilisée pour ouvrir le fichier "[Link]":

doc("[Link]")

expression de chemin

XQuery utilise des expressions de chemin pour naviguer dans des documents XML à travers
les éléments.

L'expression de chemin d'accès suivant pour "[Link]" sélectionner tous les fichiers dans
l'élément de titre:

doc("[Link]") /bookstore/book/title

43
(/ Librairie select élément de librairie, / livre Sélectionne tous les éléments du livre sous
l'élément de librairie, et / titre Sélectionne tous les éléments de titre sous chaque élément de
livre)

Le XQuery ci-dessus peut extraire les données suivantes:

<title lang="en">Everyday Italian</title>


<title lang="en">Harry Potter</title>
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>

prédicat

XQuery utilise prédicats pour définir un document XML à partir des données extraites.

Le prédicat suivant est utilisé pour sélectionner tous les éléments du livre sous l'élément de
librairie, et la valeur de l'élément de livre sélectionné élément de prix de moins de 30 doit être
inférieure à:

doc("[Link]")/bookstore/book [price<30]

XQuery ci-dessus peuvent être extraites des données suivantes:

<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>

IV expression XQuery FLWOR


documents d'instance XML
Nous allons continuer à utiliser le document "[Link]" dans l'exemple ci-dessous (dans un
fichier XML dans le même).

Si vous utilisez les noeuds de sélection de FLWOR de


"[Link]"
Regardez l'expression de chemin d'accès suivant:

doc("[Link]")/bookstore/book[price>30]/title

Cette expression peut être sélectionnée au-dessus de tous les éléments de titre sous les
éléments du livre sous l'élément de la librairie, et la valeur de l'élément de prix qui doit être
supérieur à 30.

44
FLWOR expression ci-dessous les données sélectionnées et de la voie ci-dessus est le même
que l'expression suivante:

for $x in doc("[Link]")/bookstore/book
where $x/price>30
return $x/title

sortie:

<title lang="en">XQuery Kick Start</title>


<title lang="en">Learning XML</title>

Par FLWOR, vous pouvez trier les résultats:

for $x in doc("[Link]")/bookstore/book
where $x/price>30
order by $x/title
return $x/title

FLWOR est «Car, Let, Where, Order par, Return" seulement prendre acronyme.

déclarations pour tous les éléments du livre sous l'élément de librairie dans une variable
nommée $ x extraction.

où l' élément de déclarations sélectionnées élément de prix du livre des valeurs supérieures à
30.

ordre par la déclaration définit l'ordre de tri. Sera triés selon l'élément de titre.

instruction de retour précise ce qu'ils reviennent. Dans ce renvoie les éléments de titre.

Les résultats de l'expression XQuery ci-dessus:

<title lang="en">Learning XML</title>


<title lang="en">XQuery Kick Start</title>

IV XQuery FLWOR + HTML


documents d'instance XML
Nous allons continuer à utiliser le document "[Link]" (sur un fichier dans le même) dans
les exemples suivants.

Présenter les résultats dans une liste HTML


Considérez l'expression XQuery FLWOR suivante:

45
for $x in doc("[Link]")/bookstore/book/title
order by $x
return $x

L'expression ci-dessus permet de sélectionner tous les éléments de titre des éléments du livre
sous l'élément de librairie en vertu, par ordre alphabétique et retourner les éléments de titre.

Maintenant, nous voulons utiliser les listes de table HTML toute notre bibliographie de
librairie. Nous avons ajouté <ul> et <li> balises à FLWOR expression:

<ul>
{
for $x in doc("[Link]")/bookstore/book/title
order by $x
return <li>{ $x }</li>
}
</ul>

La sortie de code ci-dessus:

<ul>
<li><title lang="en">Everyday Italian</title></li>
<li><title lang="en">Harry Potter</title></li>
<li><title lang="en">Learning XML</title></li>
<li><title lang="en">XQuery Kick Start</title></li>
</ul>

Maintenant, nous voulons supprimer l'élément de titre, mais seulement afficher les données
dans l'élément de titre.

<ul>
{
for $x in doc("[Link]")/bookstore/book/title
order by $x
return <li>{ data( $x ) }</li>
}
</ul>

Le résultat sera une liste HTML:

<ul>
<li>Everyday Italian</li>
<li>Harry Potter</li>
<li>Learning XML</li>
<li>XQuery Kick Start</li>
</ul>

syntaxe XQuery
46
XQuery est sensible à la casse, les éléments de XQuery, les attributs et les variables doivent
être des noms de XML juridiques.

règles de grammaire de base de XQuery:


Quelques règles de grammaire de base:

 XQuery est sensible à la casse


 éléments de XQuery, les attributs et les variables doivent être des noms de XML
juridiques.
 XQuery valeur de chaîne peut être utilisé des guillemets simples ou doubles.
 XQuery variable à partir de «$» suivi d'un nom et est défini, par exemple, $ librairie
 commentaires XQuery sont (: :) et segmentation, par exemple, (: XQuery
Commentaire :)

XQuery expression conditionnelle


"If-Then-Else" peut être utilisé dans XQuery.

Prenons l'exemple suivant:

for $x in doc("[Link]")/bookstore/book
return if ( $x/@category="CHILDREN" )
then <child>{data($x/title)}</child>
else <adult>{data($x/title)}</adult>

Notez que les "If-Then-Else" syntaxe: parenthèses après la si expression est nécessaire. sinon
il est également nécessaire, mais en écriture seule "else ()" peut être.

L'exemple ci-dessus les résultats:

<adult>Everyday Italian</adult>
<child>Harry Potter</child>
<adult>Learning XML</adult>
<adult>XQuery Kick Start</adult>

comparaison XQuery
Dans XQuery, il y a deux façons de comparer les valeurs.

1. Comparaison générale: =, =, <, <=,>,> =!


2. Les valeurs comparatives: eq, ne, lt, le, gt, ge

Comparer les différences entre les deux procédés sont les suivants:

Considérez l'expression XQuery suivante:

47
$bookstore//book/@q > 10

Si la valeur de la propriété q est supérieur à 10, l'expression ci-dessus renvoie une valeur true.

Les exemples suivants, si le retour est seulement q, et sa valeur est supérieure à 10, alors
l'expression renvoie vrai. Si plus d'une q est retournée, une erreur se produit:

$bookstore//book/@q gt 10

V XQuery Sélection et filtrage


documents d'instance XML
Dans l'exemple suivant, nous allons continuer à utiliser ce "[Link]" (même fichier XML et
la section ci-dessus est utilisé) document.

Sélectionnez et filtrer les éléments


Comme on le voit dans le chapitre précédent, nous utilisons l'expression FLWOR ou une
expression de chemin pour sélectionner et éléments filtrants.

Considérons l'expression FLWOR suivante:

for $x in doc("[Link]")/bookstore/book
where $x/price>30
order by $x/title
return $x/title

 pour - (facultatif) pour chacun des éléments groupés renvoyés par l'expression dans
une variable
 laissez - (facultatif)
 où - (en option) fixé une condition
 commande par - (en option) définir l'ordre dans les résultats
 retour - les dispositions dans les résultats renvoyés contenu

pour la déclaration
déclaration pour la variable liée à chaque article retourné par l'expression. pour la déclaration
Iteration. Il peut y avoir plusieurs pour la même déclaration dans une expression de FLWOR.

Pour un certain nombre de fois dans une instruction for en boucle, vous pouvez utiliser des
mots-clés à:

for $x in (1 to 5)
return <test>{$x}</test>

Résultats:

48
<test>1</test>
<test>2</test>
<test>3</test>
<test>4</test>
<test>5</test>

Mots - clés peuvent être utilisés pour calculer l'itération à:

for $x at $i in doc("[Link]")/bookstore/book/title
return <book>{$i}. {data($x)}</book>

Résultats:

<book>1. Everyday Italian</book>


<book>2. Harry Potter</book>
<book>3. XQuery Kick Start</book>
<book>4. Learning XML</book>

Dans la déclaration permet également de plus d'une expression. S'il vous plaît utiliser une
virgule pour séparer chaque expression:

for $x in (10,20), $y in (100,200)


return <test>x={$x} and y={$y}</test>

Résultats:

<test>x=10 and y=100</test>


<test>x=10 and y=200</test>
<test>x=20 and y=100</test>
<test>x=20 and y=200</test>

déclaration laisse
laissez déclaration peut être répartition variable complète, et d'éviter répété la même
expression. laissez déclaration ne provoque pas itération.

let $x := (1 to 5)
return <test>{$x}</test>

Résultats:

<test>1 2 3 4 5</test>

où les déclarations
où la déclaration est utilisée pour définir le résultat d'une ou plusieurs conditions (critères).

where $x/price>30 and $x/price<100

49
commande par déclaration
commande par déclaration pour trier les résultats d'un ordre prédéterminé. Ici, nous voulons
trier les résultats en fonction de la catégorie et le titre:

for $x in doc("[Link]")/bookstore/book
order by $x/@category, $x/title
return $x/title

Résultats:

<title lang="en">Harry Potter</title>


<title lang="en">Everyday Italian</title>
<title lang="en">Learning XML</title>
<title lang="en">XQuery Kick Start</title>

déclaration de retour:
déclaration de retour précise pour renvoyer le contenu.

for $x in doc("[Link]")/bookstore/book
return $x/title

Résultats:

<title lang="en">Everyday Italian</title>


<title lang="en">Harry Potter</title>
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>

VI Fonctions XQuery
XQuery contient plus de 100 fonctions intégrées. Ces fonctions peuvent être utilisées pour les
valeurs de chaîne, numérique, date et comparaison du temps, le noeud et la manipulation
QName, la manipulation de la séquence, les valeurs booléennes, et ainsi de suite. Vous
pouvez également définir vos propres fonctions XQuery.

XQuery fonctions intégrées


XQuery fonction URI:

[Link]

L'espace de noms préfixe de fonction par défaut est fn:.

Astuce: appeler préfixe, tel que fn :: fonction souvent par chaîne de fn (). Cependant, depuis
fn: est le préfixe par défaut de l'espace de noms, les noms de fonctions ne doivent pas utiliser
le préfixe lorsqu'il est appelé.

50

Vous aimerez peut-être aussi