XML 3
XML 3
XML 3
2. XML
◻ Introduction au standard XML (formations XML)
Objectifs et définition
Les limites de HTML
Les apports de XML
Les champs d'application
Les standards et outils associés (Open Document, RSS, SVG...)
Les langages du Web : XHTML, WML, XFORM, XUL...
◻ Les documents XML
La structure et la définition du document
Les balises, les éléments et les attributs
Commentaires, Texte et CDATA.Document bien formé versus document valide
Le Document Type Definition (DTD)
Les espaces de noms (namespaces)TP : Définir des DTD internes et externes
Plan
2
◻ XML Schema
XML Schema : rôle et intérêt par rapport aux DTD
Les types de bases : integer, string, date, decimal...
La syntaxe des schémas : les listes, les unions, les séquences, les choix...
Les dérivations : par restriction et extension
XML Schema et les espaces de nomsTP : Concevoir, à partir de spécifications, des XML
Schema utilisant les notions de bases et avancées (dérivation)
◻ XPath et la navigation
XPath : le langage de navigation.Les axes nodaux
Les types d'expression de sélection
Les expressions : booléennes, numériques, chaînes de caractères
◻ Les liens XML (XLL)
XML Linking Language : rôle et intérêt
Xlink : les liens simples et étendus
Xpointer : l'adressage de documents
Plan
3
Chapitre 5
LDW
Plan
5
◻ Transformer les documents XML vers d'autres formats comme une page
Internet.
Qu'est-ce que le XML ?
7
◻ Le langage XML est donc né. Le XML 1.0 est devenu une recommandation
du W3C le 10 février 1998.
Origine et objectif du XML
11
◻ Le XML se veut également compatible avec le web afin que les échanges de
données puissent se faire facilement à travers le réseau Internet.
◻ Le XML se veut donc standardisé, simple, mais surtout extensible et
configurable afin que n'importe quel type de données puisse être décrit.
Exemple
12
◻ Le XML a été créé pour faciliter les échanges de données entre les
machines et les logiciels.
◻ Le XML est un langage qui s'écrit à l'aide de balises.
◻ Le XML est une recommandation du W3C, il s'agit donc d'une technologie
avec des règles strictes à respecter.
◻ Le XML se veut compréhensible par tous : les hommes comme les
machines.
◻ Le XML nous permet de créer notre propre vocabulaire grâce à un
ensemble de règles et de balises personnalisables.
19
Les bons
outils
L'éditeur de texte
20
◻ Bloc-notes
◻ Notepad++
Afin d'adapter la coloration syntaxique au langage XML, il vous suffit de
sélectionner Langage dans la barre de menu puis XML dans la liste.
Lorsque vous enregistrerez vos documents, il suffira alors de préciser comme
extension ".xml" pour conserver la coloration syntaxique d'une fois sur l'autre.
EditiX
21
◻ comme Editix
◻ multiplateformes.
◻ il n'existe pas de version gratuite du logiciel
23
◻ on peut mettre "des choses" entre ces balises. On parle alors de contenu.
<balise>Je suis le contenu de la balise</balise>
◻ Une balise par paires ne peut pas contenir n'importe quoi :
elle peut contenir une valeur simple comme par exemple:
■ une chaîne de caractères,
■ un nombre entier,
■ un nombre décimal,
■ etc.
<balise1>Ceci est une chaîne de caractères</balise1>
<balise2>10</balise2>
<balise3>7.5</balise3>
Les balises par paires
27
◻ Une balise par paires peut également contenir une autre balise. On parle
alors d'arborescence. <balise1>
<balise2>10</balise2>
</balise1>
◻ si une balise peut en contenir une autre, il est cependant interdit de les
chevaucher. L'exemple suivant n'est pas du XML !
<balise1><balise2>Ceci est une chaîne de caractères</balise1></balise2>
◻ une balise par paires peut contenir un mélange de valeurs simples et de
balises <balise1>
Ceci est une chaîne de caractères
<balise2>10</balise2>
7.5
</balise1>
Les balises uniques
28
◻ Une balise unique est en réalité une balise par paires qui n'a pas de contenu.
<balise />
Les règles de nommage des balises
29
◻ Exemple :
La valeur d'un attribut doit impérativement être délimitée par des guillemets, simples
ou doubles.
◻ Un commentaire est un texte qui permet de donner une indication sur ce que
l'on fait.
une grande aide pendant la rédaction de longs documents XML !
◻ C'est une balise unique qui commence par <!-- et qui se termine par -->.
◻ Exemple:
<?xml version = "1.0" encoding="UTF-8" standalone="yes" ?> ,
◻ le prologue est une balise unique qui commence par <?xml et qui se termine
par ?>.
Le prologue
35
◻ La version:
indiquer la version de XML que l'on utilise pour décrire les données.
il existe actuellement 2 versions : 1.0 et 1.1.
n'est obligatoire que depuis la version 1.1
il est plus que conseillé de l'ajouter quand même lorsque vous utilisez la
version 1.0.
La différence entre les 2 versions est une amélioration dans le support des
différentes versions de l'Unicode.
il conviendra d'utiliser la version 1.0 qui est encore aujourd'hui la version la
plus utilisée.
Le prologue
36
◻ Le jeu de caractères
La seconde information du prologue est encoding="UTF-8".
Il s'agit du jeu de caractères utilisé dans le document XML.
par défaut, l'encodage de XML est l'UTF-8,
si l’éditeur de texte enregistre les documents en ISO8859-1, il
suffit de la changer dans le prologue :
◻ Un document autonome
la dernière information présente dans le prologue est
standalone="yes".
permet de savoir si le document XML est autonome ou si un autre
document lui est rattaché.
Le corps
38
◻ Le corps d'un document XML est constitué de l'ensemble des balises qui
décrivent les données.
◻ une règle très importante à respecter dans la constitution du corps :
une balise en paires unique doit contenir toutes les autres.
■ Cette balise est appelée élément racine du corps.
Exemple:
<racine>
<balise_paire>texte</balise_paire>
<balise_paire2>texte</balise_paire2>
<balise_paire>texte</balise_paire>
</racine>
Le corps
39
◻ le but est d'être le plus explicite possible dans le nommage des balises.
◻ la balise racine aura pour mission de décrire ce quelle contient.
◻ Si on choisit de décrire un répertoire, on peut par exemple nommer les
balises comme:
<repertoire>
<personne>Rachid</personne>
<personne>Kamal</personne>
</repertoire>
Un document bien formé
40
Chapitre 6
◻ Une définition d'un document XML est un ensemble de règles que l'on
impose au document.
◻ Ces règles permettent de décrire la façon dont le document XML doit être
construit.
◻ Elles peuvent être de natures différentes.
◻ Ces règles peuvent imposer la présence d'un attribut ou d'une balise:
imposer l'ordre d'apparition des balises dans le document.
ou
imposer le type d'une donnée (nombre entier, chaîne de caractères, etc.).
Un document valide
57
la définition impose une écriture uniforme que tout le monde doit respecter.
on évite ainsi que l'écriture d'un document soit anarchique et, par conséquent,
difficilement exploitable.
Exploitable par qui ?
59
◻ les règles des DTD internes s'écrivent directement dans le fichier XML
qu'elles définissent
◻ les règles des DTD externes sont écrites dans un fichier séparé portant
l’extension .dtd
Les éléments
62
◻ La syntaxe :
Pour définir les règles portant sur les balises, on utilise le mot clef ELEMENT.
une valeur
Cas d'une balise contenant une autre
64
◻ Cette règle signifie que la balise <personne /> contient la balise <nom />.
◻ Le document XML respectant cette règle ressemble donc à:
<personne>
<nom>John DOE</nom>
</personne>
◻ lors de l'utilisation du mot clef EMPTY, l'usage des parenthèses n'est pas
obligatoire !
Cas d'une balise pouvant tout contenir
67
◻ Une liste de choix permet de dire qu'une balise contient l'une des balises
décrites.
◻ Il suffit d'indiquer le nom des balises en les séparant par une barre verticale.
◻ Pour indiquer qu'une balise est optionnelle, on fait suivre son nom par un
point d’interrogation.
◻ Exemple :
<!ELEMENT personne (nom, prenom?)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
◻ Cette définition impose que la balise <personne /> contienne obligatoirement
la balise <nom /> puis éventuellement <prenom />.
74
◻ Une balise peut être répétée plusieurs fois même si elle est optionnelle.
◻ Pour indiquer une telle balise, on fait suivre son nom par une étoile.
<!ELEMENT balise (balise2, balise3*, balise4)>
◻ Cette définition impose que la balise <repertoire /> contienne entre 0 et une
infinité de fois la balise <personne />.
◻ La balise <personne />, quant à elle, doit obligatoirement contenir les
balises <nom /> et <prenom /> dans cet ordre.
<!-- valide -->
<repertoire>
76
<personne>
<nom>DOE</nom>
<prenom>John</prenom>
</personne>
<personne> <!-- valide -->
<nom>POPPINS</nom> <repertoire ></repertoire>
<prenom>Marie</prenom> <!-- invalide -->
</personne> <!-- il manque la balise prenom dans la seconde balise personne-->
</repertoire> <repertoire>
<!-- valide --> <personne>
<repertoire> <nom>DOE</nom>
<personne> <prenom>John</prenom>
<nom>DOE</nom> </personne>
<prenom>John</prenom> <personne>
</personne> <nom>POPPINS</nom>
</repertoire> </personne>
</repertoire>
La balise répétée
77
• Un document conforme à une définition est un document qui respecte toutes les
règles qui lui sont imposées dans les fameuses définitions.
• Le mot clef ELEMENT permet de d'écrire les règles relatives aux balises XML.
80
◻ Pour indiquer que la règle porte sur un attribut, on utilise le mot clef
ATTLIST: <!ATTLIST balise attribut type mode>
◻ Une règle peut donc se diviser en 5 mots clefs : ATTLIST, balise, attribut,
type et mode.
il suffit simplement d'écrire le nom de la balise et de l'attribut concerné par la
règle.
Exemple: une balise du TP<personne
de la partie 1:
sexe="masculin" />
■ On écrira :
<!ATTLIST personne sexe type mode>
le type
83
◻ Les différentes valeurs possibles pour l'attribut sont séparées par une barre
verticale.
<!ATTLIST balise attribut (valeur 1 | valeur 2 | valeur 3 | etc.) mode>
◻ il est possible de fixer la valeur d'un attribut quand celui-ci est présent
grâce au mot clef #FIXED suivi de ladite valeur
◻ Exemple: lorsque l'on souhaite travailler dans une devise bien précise et
que l'on souhaite qu'elle apparaisse dans le document.
la règle suivante permet d'indiquer que la devise, dans le cas où elle est
renseignée, doit obligatoirement avoir pour seule valeur possible l'euro
<!ATTLIST objet devise CDATA #FIXED
"Euro">
<!-- valide -->
<objet devise="Euro" ></objet>
<!-- invalide -->
<objet devise="Dollar" ></objet>
<!-- valide -->
<objet ></objet>
Les entités
94
◻ Pour utiliser une entité générale dans le document XML, il suffit d'utiliser la
syntaxe suivante : <!ENTITY samsung "Samsung">
&nom; <!ENTITY apple "Apple">
<telephone>
<marque>&samsung;</marque>
<modele>Galaxy S3</modele>
</telephone>
<telephone>
<marque>&apple;</marque>
<modele>iPhone 4</modele>
</telephone>
Les entités générales
96
<telephone>
<marque>Samsung</marque>
<modele>Galaxy S3</modele>
</telephone>
<telephone>
<marque>Apple</marque>
<modele>iPhone 4</modele>
</telephone>
Les entités paramètres
97
◻ Pour utiliser une entité paramètre dans la DTD, il suffit d'utiliser la syntaxe
suivante :
%nom;
◻ à l'aide d'une entité paramètre, cette même règle s'écrit de la façon suivante :
<!ENTITY % listeMarques "marque (Samsung|Apple) #REQUIRED">
<!ATTLIST telephone %listeMarques; >
◻ La syntaxe
<!ENTITY nom SYSTEM "URI">
◻ Pour utiliser une entité externe dans notre XML, il suffit d'utiliser la
syntaxe suivante : &nom;
<!ENTITY samsung SYSTEM "samsung.xml">
<!ENTITY apple SYSTEM "apple.xml"> ◻ Le contenu des fichiers samsung.xml et
<telephone> apple.xml sera par exemple le suivant :
&samsung;
<modele>Galaxy S3</modele>
</telephone> <!-- Contenu du fichier samsung.xml -->
<telephone> <marque>Samsung</marque>
&apple; <!-- Contenu du fichier apple.xml -->
<modele>iPhone 4</modele> <marque>Apple</marque>
</telephone>
Les entités externes
101
◻ Une DTD interne est une DTD qui est écrite dans le même fichier que le
document XML.
Elle est généralement spécifique au document XML dans lequel elle est écrite.
◻ La syntaxe:
Une DTD interne s'écrit dans le DOCTYPE.
On le place sous le prologue du document et au dessus du contenu XML.
<!DOCTYPE racine [ ]>
La DTD interne est écrite entre les [].
Dans le DOCTYPE, le mot racine doit être remplacé par le nom de la balise qui
forme la racine du document XML.
Les DTD internes
104
◻ Exemple:
<?xml version = "1.0" encoding="UTF-8" standalone="yes" ?>
Une boutique <boutique>
possède plusieurs téléphones.
Chaque téléphone<telephone>
est d'une certaine marque et d'un certain modèle représenté
<marque>Samsung</marque>
par une chaîne de caractère.
<modele>Galaxy S3</modele>
</telephone>
<telephone>
<marque>Apple</marque>
<modele>iPhone 4</modele>
</telephone>
<telephone>
<marque>Nokia</marque>
<modele>Lumia 800</modele>
</telephone>
</boutique>
<?xml version = "1.0" encoding="UTF-8" standalone="yes" ?>
Les DTD internes <!DOCTYPE boutique [
<!ELEMENT boutique (telephone*)>
105 <!ELEMENT telephone (marque, modele)>
<!ELEMENT marque (#PCDATA)>
◻ La définition DTD: <!ELEMENT boutique (telephone*)>
<!ELEMENT modele (#PCDATA)>
<!ELEMENT telephone (marque, modele)>
]>
<!ELEMENT marque (#PCDATA)>
<boutique>
<!ELEMENT modele (#PCDATA)>
<telephone>
<marque>Samsung</marque>
◻ Le document XML complet avec <modele>Galaxy
la DTD interne S3</modele>
</telephone>
<telephone>
<marque>Apple</marque>
<modele>iPhone 4</modele>
</telephone>
<telephone>
<marque>Nokia</marque>
<modele>Lumia 800</modele>
</telephone>
</boutique>
Les DTD externes
106
◻ Une DTD externe est une DTD qui est écrite dans un autre document que
le document XML.
elle est commune à plusieurs documents XML qui l'exploitent.
◻ Les DTD externes PUBLIC sont généralement utilisées lorsque la DTD est
une norme.
dans les documents xHTML 1.0.
<!DOCTYPE racine PUBLIC "identifiant" "url">
si on l'applique à un document xHTML, on obtient alors le DOCTYPE suivant :
Chapitre 7
XML Schema
LDW
Les défauts des DTD
118
Un nouveau format:
◻ les DTD ne sont pas au format XML.
un nouveau langage avec sa propre syntaxe et ses propres règles.
Le typage de données:
◻ les DTD ne permettent pas de typer des données.
◻ on se contente d'indiquer qu'une balise contient des données
impossible de préciser si l'on souhaite que ça soit un nombre entier, un nombre
décimal, une date, une chaîne de caractères, etc.
Les apports des schémas XML
120
◻ pour pallier les défauts des DTD, les Schémas XML ont été créés.
◻ apportent de nouvelles fonctionnalités :
Le typage des données
■ les Schémas XML permettent tout d'abord de typer les données.
■ il est possible de créer nos propres types de données.
Les contraintes
■ les Schémas XML permettent d'être beaucoup plus précis que les DTD lors de l'écriture
des différentes contraintes qui régissent un document XML.
Des définitions XML
■ Un des principaux avantages des Schémas XML est qu'ils s'écrivent grâce au XML.
■ pour exploiter un document XML et le Schéma qui lui est associé, on n'a en théorie plus
besoin de plusieurs outils.
Structure d'un schéma XML
121
◻ L'extension du fichier
Comme pour les DTD, on sépare les données formatées avec XML et le Schéma
XML associé dans 2 fichiers distincts.
les Schémas XML soient écrits avec un langage de type XML,
■ Un fichier dans lequel est écrit un Schéma XML porte l'extension ".xsd".
◻ Le prologue
Puisque c'est le XML qui est utilisé, il ne faut pas déroger à la règle du prologue.
la première ligne d'un Schéma XML est :
<?xml version="1.0" encoding="UTF-8" ?>
Structure d'un schéma XML
122
◻ Le corps
le corps d'un Schéma XML est constitué d'un ensemble de balises
la présence d'un élément racine, c'est-à-dire la présence d'une balise qui contient
toutes les autres.
■ contrairement à un fichier XML, son nom nous est imposé.
<!-- Prologue -->
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Elément racine -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
</xsd:schema>
■ l'élément racine est <xsd:schema />.
■ la présence de l'attribut xmlns:xsd.
■ xmlns nous permet de déclarer un espace de noms.
■ A travers la déclaration de cet espace de noms, tous les éléments doivent commencer par
Référencer un schéma XML
123
◻ Un élément simple est un élément qui ne contient qu'une valeur dont le type
est dit simple.
Il ne contient pas d'autres éléments.
◻ Un élément simple peut donc être une balise qui ne contient aucun attribut
et dans laquelle aucune autre balise n'est imbriquée.
◻ Un attribut d'une balise peut également être considéré comme un élément
simple.
En effet, la valeur d'un attribut est un type simple.
◻ Un type simple, c'est par exemple un chiffre, une date ou encore une chaîne
de caractères.
Les éléments simples
128
◻ Exemples:
<!-- Ne contient ni attribut ni aucun autre élément => élément simple -->
<nom>ROBERT</nom>
<!-- Contient un attribut => n'est pas un élément simple -->
<!-- Cependant l'attribut "sexe" est un élément simple -->
<personne sexe="masculin">Robert DUPONT</personne>
<!-- La balise personne contient d'autres éléments (les balises nom et prénom) => n'est pas un
élément simple -->
<personne>
<!-- Ne contient ni attribut ni aucun autre élément => élément simple -->
<nom>DUPONT</nom>
<!-- Ne contient ni attribut ni aucun autre élément => élément simple -->
<prenom>Robert</prenom>
</personne>
Les éléments simples
129
<nom>DUPONT</nom>
<prenom>Robert</prenom>
<age>38</age>
Les éléments simples
130
◻ String est utilisé pour qualifier une chaîne de caractères et int est utilisé pour qualifier
un nombre entier.
Les éléments simples
131
◻ Valeur constante
il est également possible d'imposer une valeur.
■ Cette valeur inchangeable est appelée constante.
Pour indiquer une valeur constante, c'est l'attribut fixed qui est utilisé au niveau
de la balise <element /> du Schéma XML.
obliger toute les personnes de mon document XML à porter le prénom Robert:
<xsd:element name="prenom" type="xsd:string" fixed="Robert" />
Exemple: <!-- valide -->
<prenom>Robert</prenom>
<!-- invalide -->
<prenom>Marie</prenom>
<!-- invalide -->
<prenom></prenom>
Les attributs
133
◻ dans un Schéma XML, tous les attributs d'une balise XML sont
considérés comme des éléments simples.
◻ ils ne peuvent prendre comme valeur qu'un type simple, c'est-à-dire un
nombre, une chaîne de caractère, une date, etc.
Les attributs
134
◻ Déclarer un attribut
C'est le mot attribut qui est utilisé.
n'oubliez pas de faire précéder son utilisation par xsd.
Cette balise prend 2 attributs : un nom et un type.
<xsd:attribut name="mon_nom" type="xsd:mon_type" />
Exemple :
<personne sexe="masculin">Robert DUPONT</personne>
la balise contient un attribut, c'est ce qu'on appelle un élément complexe
déclarer l'attribut dans le Schéma XML :
<xsd:attribut name="sexe" type="xsd:string" />
Les attributs
135
◻ Valeur constante
il est possible d'imposer une valeur.
■ Cette valeur inchangeable est appelée constante.
Pour indiquer une valeur constante, c'est l'attribut fixed qui est utilisé au
niveau de la balise <attribut /> du Schéma XML.
Exemple: obliger toutes les personnes du document XML à être des femmes :
◻ Attribut obligatoire
les attributs sont, par défaut, optionnels.
Pour indiquer qu'un attribut est obligatoire, on doit renseigner la propriété use à
laquelle on affecte la valeur required.
Exemple: obliger l'utilisation de l'attribut sexe :
◻ Un élément simple est un élément qui ne contient qu'une valeur dont le type
est dit simple comme par exemple une balise qui ne contient aucun attribut et
dans laquelle aucune autre balise n'est imbriquée.
◻ Pour décrire un élément simple, on utilise la balise <xsd:element />.
◻ Il est possible de définir une valeur par défaut ou une valeur constante à un
élément simple.
◻ Un attribut est également un élément simple.
◻ Pour décrire un attribut, on utilise la balise <xsd:attribut />.
◻ Il est possible de définir une valeur par défaut, une valeur constante à un
élément simple ou rendre obligatoire un attribut.
139
◻ Le type normalizedString est basé sur le type string et représente une chaîne
de caractères normalisée,
◻ une chaîne de caractères qui peut contenir tout et n'importe quoi à l'exception
de tabulations, de sauts de ligne et de retours chariot.
◻ Dans la pratique, il n'est pas interdit de les écrire, mais ils seront
automatiquement remplacés par des espaces.
◻ toutes les règles du type string s'applique également au
type normalizedString.
les caractères spéciaux comme le & doivent être écrits avec leur notation HTML.
Le type token
143
◻ Le type language est basé sur le type token et représente une langue.
◻ Cette langue doit être identifiée par 2 lettres (selon la norme ISO 639 dont
la liste est disponible par sur wikipedia).
Ces 2 caractères peuvent éventuellement être suivi d'un code pays (selon la
norme ISO 3166)
Exemple: la règle suivante : <xsd:element name="langue" type="xsd:language" />
Les lignes XML suivantes sont alors valides :
<langue>fr</langue>
<langue>en</langue>
<langue>en-GB</langue>
<langue>en-US</langue>
Le type NMTOKEN
145
◻ Le type NMTOKEN est basé sur le type token et représente une chaîne de
caractères "simple",
une chaîne de caractères sans espace qui ne contient que les symboles suivants :
■ Des lettres.
■ Des chiffres.
■ Les caractères spéciaux .-_ et :
◻ Si la chaîne de caractères contient des espaces au début ou à la fin, ils seront
automatiquement supprimés.
◻ Afin d'assurer une compatibilité entre les Schémas XML et les DTD, il
convient de n'utiliser le type NMTOKEN que pour un attribut.
Le type NMTOKENS
146
◻ Le type Name est basé sur le type token et représente un nom XML,
une chaîne de caractères sans espace qui ne contient que les symboles suivants :
■ Des lettres.
■ Des chiffres.
■ Les caractères spéciaux .-_ et :
La différence avec le type NMTOKEN est qu'une chaîne de caractères de type
Name doit obligatoirement commencer par une lettre, ou l'un des 2 caractères
spéciaux suivants : _ et :
Le type NCName
148
<personne num="P1">Paul</personne>
<personne num="P2">Marie</personne>
<personne enfants="P1 P2">Jeanne</personne>
Le type ENTITY
152
◻ Le type ENTITY permet de faire référence à une entité le plus souvent non
XML et déclaré dans des fichiers DTD.
◻ Ce type est basé sur le type NCName, il hérite donc de toutes ses règles.
◻ Afin d'assurer une compatibilité entre les Schémas XML et les DTD, il
convient de n'utiliser le type ENTITY que pour un attribut.
◻ Exemple:
<xsd:attribut name="marque" type="xsd:ENTITY" />
Type Description
duration représente une durée
date représente une date
time représente une heure
dateTime représente une date et un temps
gYear représente une année
gYearMonth représente une année et un mois
gMonth représente un mois
gMonthDay représente un mois et un jour
gDay représente un jour
Le type duration
155
<madate>1924-01-13</madate>
<madate>-0034-12-12</madate>
<madate>12405-11-04</madate>
Le type time
158
<nombre>42</nombre>
<nombre>-42.25</nombre>
<nombre>+.42</nombre>
<nombre>00042.420000</nombre>
Les autres types numériques
169
◻ Le type integer
basé sur le type decimal.
un nombre de type integer peut être précédé par le symbole + ou -.
◻ Le type long
basé sur le type integer
doit forcément être compris entre les valeurs -9 223 372 036 854 775 808 et 9
223 372 036 854 775 807.
◻ Le type int
basé sur le type long si ce n'est qu'un nombre de type int doit forcément être
compris entre les valeurs -2 147 483 648 et 2 147 483 647.
Les autres types numériques
170
◻ Le type short
basé sur le type int si ce n'est qu'un nombre de type short doit forcément être
compris entre les valeurs -32 768 et 32 768.
◻ Le type byte
basé sur le type short si ce n'est qu'un nombre de type byte doit forcément être
compris entre les valeurs -128 et 127.
◻ Le type nonPositiveInteger
Basé sur le type integer,
représente un nombre entier qui n'est pas positif. <nombre>-42</nombre>
<nombre>0</nombre>
cela correspond à un nombre négatif ou au nombre zéro.
<nombre>-00042</nombre>
Exemple:
<xsd:element name="nombre" type="xsd:nonPositiveInteger" />
Les autres types numériques
171
◻ Le type negativeInteger
Basé sur le type nonPositiveInteger,
représente un nombre entier strictement négatif, c'est-à-dire strictement inférieur
à zéro.
◻ Le type nonNegativeInteger
Basé sur le type integer,
représente un nombre entier qui n'est pas négatif, c'est-à-dire un nombre
supérieur ou égal à zéro.
Exemple:
<nombre>42</nombre>
<xsd:element name="nombre" type="xsd:nonPositiveInteger" /> <nombre>0</nombre>
<nombre>+00042</nombre>
Les autres types numériques
172
◻ Le type positiveInteger
Basé sur le type nonNegativeInteger, le type positiveIntegerreprésente un nombre entier
strictement positif, c'est-à-dire strictement supérieur à zéro.
◻ Le type unsignedLong
Le type unsignedLong est basé sur le type nonNegativeInteger et représente un entier compris
entre les valeurs 0 et 18 446 744 073 709 551 615.
◻ Le type unsignedInt
Le type unsignedInt est basé sur le type unsignedLong et représente un entier compris entre les
valeurs 0 et 4 294 967 295.
◻ Le type unsignedShort
Le type unsignedShort est basé sur le type unsignedInt et représente un entier compris entre les
valeurs 0 et 65 535.
◻ Le type unsignedByte
Le type unsignedByte est basé sur le type unsignedShort et représente un entier compris entre
les valeurs 0 et 255.
Les autres types
173
Type Description
boolean représente l'état vrai ou faux
QName représente un nom qualifié
NOTATION représente une notation
anyURI représente une URI
base64Binary représente une donnée binaire au format Base64
hexBinary représente une donnée binaire au format hexadecimal
Le type boolean
174
◻ le contenu d'un élément complexe qui n'est composé que d'attributs et d'un
texte de type simple.
<!-- contient un attribut et du texte -->
◻ Quelques exemples: <prix devise="euros">35</prix>
<!-- contient un attribut et du texte -->
<voiture marque="Renault">Clio</voiture>
◻ Du côté du Schéma XML
<xsd:element name="mon_nom">
La syntaxe <xsd:complexType>
■ Pour déclarer un élément complexe faisant référence à une balise contenant des attributs
<xsd:simpleContent>
et du texte: <xsd:extension base="mon_type">
<xsd:attribute name="mon_nom" type="mon_type" ></xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
Les contenus simples
181
<xsd:element name="prix">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:positiveInteger">
<xsd:attribute name="devise" type="xsd:string" ></xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
l'ordre dans lequel les attributs sont déclarés
Les contenus simples dans le Schéma XML n'a aucune importance.
182
◻ Dans le cas où la balise que l'on cherche à décrire contient plusieurs attributs,
il convient de tout simplement les lister entre les balises <xsd:extension/>
◻ Exemple : <voiture marque="Renault" type="essence">Clio</voiture>
<xsd:element name="voiture">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="marque" type="xsd:string" ></xsd:attribute>
<xsd:attribute name="type" type="xsd:string" ></xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
Les contenus "standards"
183
◻ le contenu d'un élément complexe qui n'est composé que d'autres éléments
(simples ou complexes) ou uniquement d'attributs.
◻ Quelques exemples
◻ l'ordre dans lequel les balises <xsd:attribute /> sont placées n'a aucune
importance.
Balise contenant d'autres éléments
186
◻ La séquence :
Une séquence est utilisée lorsque l'on souhaite spécifier que les éléments contenus
dans un type complexe doivent apparaître dans un ordre précis.
déclaration d’une séquence au niveau d'un Schéma XML :
<xsd:element name="mon_nom">
<xsd:complexType>
<xsd:sequence>
<!-- liste des éléments -->
</xsd:sequence>
<!-- listes des attributs -->
</xsd:complexType>
</xsd:element>
Balise contenant d'autres éléments
187
◻ la balise <personne /> qui possède l'attribut sexe, contient les balises <nom
/> et <prenom /> dans cet ordre.
Balise contenant d'autres éléments
188
◻ Exemple:
<!-- valide -->
<personne sexe="masculin">
<nom>DUPONT</nom>
<prenom>Robert</prenom>
</personne>
<!-- invalide => les balises nom et prenom sont inversées -->
<personne sexe="masculin">
<prenom>Robert</prenom>
<nom>DUPONT</nom>
</personne>
Balise contenant d'autres éléments
189
◻ Le type all
Le type all est utilisé lorsque l'on veut spécifier que les éléments contenu dans un
type complexe peuvent apparaître dans n'importe quel ordre.
Ils doivent cependant tous apparaître une et une seule fois.
déclaration le type all au niveau d'un Schéma XML :
<xsd:element name="mon_nom">
<xsd:complexType>
<xsd:all>
<!-- liste des éléments -->
</xsd:all>
<!-- listes des attributs -->
</xsd:complexType>
</xsd:element>
Balise contenant d'autres éléments
190
◻ Exemple :
<xsd:element name="personne">
<xsd:complexType>
<xsd:all>
<xsd:element name="nom" type="xsd:string"></xsd:element>
<xsd:element name="prenom" type="xsd:string"></xsd:element>
</xsd:all>
</xsd:complexType>
</xsd:element>
◻ la balise <personne /> contient les balises <nom /> et <prenom /> dans
n'importe quel ordre.
Balise contenant d'autres éléments
191
◻ Exemple:
<!-- valide -->
<personne sexe="masculin">
<nom>DUPONT</nom>
<prenom>Robert</prenom>
</personne>
<!-- valide -->
<personne sexe="masculin">
<prenom>Robert</prenom>
<nom>DUPONT</nom>
</personne>
Balise contenant d'autres éléments
192
◻ Le choix
Un choix est utilisé lorsque l'on veut spécifier qu'un élément contenu dans un type
complexe soit choisi dans une liste pré-définie.
déclaration d’un choix au niveau d'un Schéma XML :
<xsd:element name="mon_nom">
<xsd:complexType >
<xsd:choice>
<!-- liste des éléments -->
</xsd:choice>
<!-- listes des attributs -->
</xsd:complexType>
</xsd:element>
Balise contenant d'autres éléments
193
◻ Exemple:
<xsd:element name="personne">
<xsd:complexType>
<xsd:choice>
<xsd:element name="nom" type="xsd:string"></xsd:element>
<xsd:element name="prenom" type="xsd:string"></xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
◻ la balise <personne /> contient soit la balise <nom />, soit <prenom />.
Balise contenant d'autres éléments
194
◻ Exemple:
<!-- valide -->
<personne sexe="masculin">
<nom>DUPONT</nom>
</personne>
<!-- valide -->
<personne sexe="masculin">
<prenom>Robert</prenom>
</personne>
<!-- invalide => les 2 balises prenom et nom ne peuvent pas apparaître en même temps -->
<personne sexe="masculin">
<prenom>Robert</prenom>
<nom>DUPONT</nom>
</personne>
Cas d'un type complexe encapsulant un type complexe
195
◻ Ce document XML permet d'identifier une personne via son nom et son
prénom.
Cas d'un type complexe encapsulant un type complexe
196
◻ Un contenu mixte est le contenu d'un élément complexe qui est composé
d'attributs, d'éléments et de texte.
<balise1>
◻ Un exemple : Ceci est une chaîne de caractères
<balise2>10</balise2>
7.5
</balise1>
◻ Du côté du Schéma XML
La syntaxe
<xsd:element name="mon_nom">
■ Pour déclarer un élément complexe au contenu mixte, voici la syntaxe à utiliser
<xsd:complexType :
mixed="true">
■ La nouveauté est donc l'utilisation du mot clef mixed. <!-- liste des éléments -->
</xsd:complexType>
<!-- liste des attributs -->
</xsd:element>
Les contenus mixtes
198
◻ Un exemple:
une facture fictive dans laquelle on souhaite identifier l'acheteur et la somme qu'il
doit payer.
. <facture><acheteur>Zozor</acheteur>, doit payer <somme>1000</somme>€.</facture>
Schéma XML :
<xsd:element name="facture">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="acheteur" type="xsd:string" ></xsd:element>
<xsd:element name="somme" type="xsd:int" ></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Les contenus mixtes
199
Le nombre
d'occurrences
Exemple (étudier un morceau de Schéma
202
XML)
◻ une personne qui possède un nom et un prénom :
<xsd:complexType name="personne">
<xsd:sequence>
<xsd:element name="nom" type="xsd:string" ></xsd:element>
<xsd:element name="prenom" type="xsd:string" ></xsd:element>
</xsd:sequence>
</xsd:complexType>
◻ signifie que la balise <personne/> contient les balises <nom /> et <prenom/>
dans cet ordre.
◻ La notion d'occurrence va nous permettre de préciser si les balises, dans le cas
de cet exemple<nom />et<prenom />, peuvent apparaître plusieurs fois, voire
pas du tout.
Le nombre d'occurrences
203
<xsd:complexType name="personne">
<xsd:sequence>
<xsd:element name="nom" type="xsd:string" ></xsd:element>
<xsd:element name="prenom" type="xsd:string" minOccurs="2" maxOccurs="unbounded" ></xsd:element>
</xsd:sequence>
</xsd:complexType>
◻ signifie, que dans le fichier XML, cette balise devra apparaître entre 2 et
une infinité de fois
<personne>
<nom>Zozor</nom>
<prenom>Robert</prenom>
<prenom>Bernard</prenom>
</personne>
<personne>
<nom>Zozor</nom>
<prenom>Robert</prenom>
<prenom>Bernard</prenom>
<prenom>Paul</prenom>
<prenom>Pierre</prenom>
</personne>