XML et XSD
Asma NAFTI
Institut supérieur d’Informatique
XML?
• XML signfie eXtensible Markup Language
• Un langage de scrutation des données
• XML a été conçu pour transporter et stocker des
données.
• HTML a été conçu pour afficher les données.
• Il est important de comprendre que XML n'est pas un
remplacement pour le HTML. Dans la plupart des
applications Web, XML est utilisé pour transporter les
données, tandis que HTML est utilisé pour formater et
afficher les données.
2
Syntaxe XML
• XML utilise des balises pour délimiter les
composants
• L'unité de base est un élément
<nom> Salhi Ahmed </nom>
• Un élément peut contenir du texte et d'autres
éléments
• Structure arborescente et hiérarchisation des
éléments
3
Quelques propriétés
de XML
Les noms des balises sont libres avec
certaines règles :
• Pas d’espaces, pas d’apostrophe, pas de /
• Premier caractère alphabétique ou _
• Noms sensibles aux majuscules-
minuscules
• Noms composés avec le
caractère - autorisés : exemple : ordre-
achat
4
Structure logique
•Structure de document XML
•Un prologue
•Des commentaires
•Un seul élément racine
•Un arbre d'éléments (et leurs attributs)
<?xml version="1.0" encoding="UTF-8"?> prologue
<!-- un exemple de compte -->
<compte monnaie="dinar"> commentaire
<numéro>123456ZT</numéro>
racine <client>
<nom>Salhi</nom>
<prénom>Ahmed</prénom> arbre
</client>
<solde>1542.6</solde>
</compte>
5
Les éléments et leur
contenu
<?xml version="1.0" encoding="UTF-8"?>
<!-- this is a note -->
<notes>
<note date="3 janvier">
<to>Bob</to> balise ouvrante
<from>Alice</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!
</body>
</note> élément
<note date="5 janvier">
<to>Alice</to>
<from>Bob</from>
<body>No problem & see you
soon</body> contenu textuel
</note> balise fermante
</notes>
6
Les attributs
<?xml version="1.0" encoding="UTF-8"?>
<!-- this is a note -->
<notes>
<note date="3 janvier">
valeur d'attribut
<to>Bob</to>
<from>Alice</from>
<heading>Reminder</heading> nom d'attribut
<body>Don't forget me this
weekend!</body>
</note>
<note date="5 janvier">
<to>Alice</to>
<from>Bob</from>
<body>No problem & see you
soon</body>
</note>
</notes>
7
Bien formé (Well-
formed)
Document bien formé
• Un seul élément racine
• Balises correctement imbriquées : balise
ouvrantes ont une balise fermante
associée et il n'y a pas de chevauchement
…
• Les règles de nommage des balises sont
respectés
• Les attributs des balises ont
obligatoirement une valeur qui doit
apparaître entre double ou simple
quottes.
8
Autres objets (1/2)
• Déclaration XML
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"
standalone="yes"?>
La déclaration XML est optionnelle et si elle est présente,
doit toujours
figurer en tête du fichier : la première ligne du fichier XML
9
Autres objets (2)
• Commentaires
<!-- ceci est un commentaire -->
Les commentaires peuvent se trouver n'importe où, sauf
avant la
déclaration XML.
• Caractères spéciaux
10
XSD
(XML Schema
Definition)
Définition (1/2)
• XSD : XML Schema Definition
• Un schéma d'un document définit:
• les éléments possibles dans le document,
• les attributs associés à ces éléments,
• Imbrication des éléments,
• Ordre d’apparition des éléments,
• Le nombre d’occurrences des éléments,
• Les restrictions.
12
12
Définition (2/2)
• Le schéma est spécifié en XML
• pas de nouveau langage
• balisage de déclaration
• utilise un espace de nom xsd: (ou xs:)
• Présente de nombreux avantages
• types de données personnalisés
• analysable par un parseur XML standard
13
13
Les types simples
String: Chaine de Caractères
Boolean: true, false
Byte: 1 126
Date: 1999-05-31
Integer: -126789 126789
positiveInteger: 1 126789
ID
negativeInteger: -126789 -1
hexBinary
IDREF
Int: -126789675 126789675
unsignedInt: 0 1267896754
14
14
Les éléments (1/2)
• Un élément peut être de type:
• Simple s’il n’a pas ni des fils ni des
attributs:
Syntaxe:
<xs:element name="…" type=" xs:…"/>
• name: permet de nommer l’élément
• type: donne le type de l’élément, il peut
être un type prédéfini en XML-SCHEMA
(xs:string, xs:int, xs:decimal,
xs:double,…) ou une extension de ces
types. 15
15
Les éléments (2/2)
• Complexe s’il contient au moins un sous élément et/ou s’il
comporte au moins un attribut:
Syntaxe:
<xs:element name="…" >
<xs:ComplexType>
//déclarer les éléments fils
//déclarer les attributs
</xs:ComplexType>
</xs:element >
Pour déclarer les éléments fils d’un élément, on utilise:
• xs:all tous les éléments doivent exister (peu importe l’ordre)
• xs:choice un des éléments doit exister
• xs:sequence tous les éléments doivent exister dans l’ordre
spécifie
16
16
Les attributs (1/2)
• L' attribute d'un Schema XML peut avoir
trois attributs optionnels : use, default
et fixed.
• use : les valeurs possible sont :
• required
<xs:attribute : obligatoire
name="dateTraduction" use=" required "
type="xs:date"/>
<xs:attribute name="dateTraduction"
• optional : optionnel use="optional"
type="xs:date"/>
• Par défaut use prend la valeur « optional »
17
17
Les attributs (2/2)
• default : spécifie la valeur par défaut de
l'attribut
<xs:attribute name="Language" default=" FR"
type="xs:string"/>
• fixed : L'attribut fixe indique que la valeur
de l'attribut si elle est présente doit être
égale à la valeur de la contrainte fournie.
<xs:attribute name="Language" fixed=" FR"
type="xs:string"/>
18
18
Les occurrences
• minOccurs: Indique le nombre minimum
d'occurrences pour cette particule (Par
défaut est 1).
• maxOccurs: Spécifie le nombre maximal
d'occurrences pour cette particule (Par
défaut est 1).
<xs:element name="traducteur"
• unbounded: Spécifie un type="xs:string"
nombre illimité
minOccurs="2" maxOccurs="unbounded"/>
d'occurences.
19
19
<xs:schema >
• <xs:elementExemple d’un XSD (1/2)
name="notes">
• Solution imbriquée:
<xs:complexType>
• <xs:sequence>
• <xs:element name="note"
maxOccurs="unbounded">
• <xs:complexType>
• <xs:sequence>
• <xs:element name="from"
type="xs:string" />
• <xs:element name="to"
type="xs:string" />
• <xs:element
name="heading" type="xs:string"
• minOccurs="0"/>
• <xs:element name="body"
type="xs:string" />
• </xs:sequence>
• <xs:attribute name="date"
type="xs:date" use="required"/>
• </xs:complexType> 20
• </xs:element>
• </xs:sequence> 20
Exemple d’un XSD
(2/2)
Solution
<xs:schema > avec référence:
• <xs:element name="notes">
• <xs:complexType>
• <xs:sequence>
• <xs:element ref="note"
maxOccurs="unbounded"/>
• </xs:sequence>
• </xs:complexType>
• </xs:element>
• <xs:element name="note">
• <xs:complexType>
• <xs:sequence>
• <xs:element name="from" type="xs:string" />
• <xs:element name="to" type="xs:string" />
• <xs:element name="heading" type="xs:string"
• minOccurs="0"/>
• <xs:element name="body" type="xs:string" />
• </xs:sequence>
• <xs:attribute name="date" type="xs:date"
use="required"/>
• </xs:complexType> 21
• </xs:element>
• </xs:schema> 21
Exemple d’un fichier XML crée à partir d’un XSD
<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSpy v2011 sp1
([Link]
<notes xsi:noNamespaceSchemaLocation="[Link]"
xmlns:xsi="[Link]
<note>
<idnote>N000E</idnote>
<from>String</from>
<to>String</to>
<heading>String</heading>
<body>String</body>
</note>
</notes>
22
Les restrictions (1/8)
• length : la longueur d’une donnée.
• minLength: la longueur minimum.
• maxLengtht la longueur maximum.
• pattern: défini par une expression régulière.
• enumeration: un ensemble discret de valeurs.
• maxInclusive: une valeur max comprise.
• maxExclusive: une valeur max exclue.
• minInclusive: une valeur min comprise.
• minExclusive: une valeur min exclue.
• totalDigits: le nombre total de chiffres.
• fractionDigits: le nombre de chiffres dans la partie
23
fractionnaire.
23
Les restrictions (2/8)
Les patterns: Utilisation des expressions
régulières
Classe Nom de la Signification
classe
L'ensemble des caractères
[0-9] \d
compris entre 0 et 9.
L'ensemble des lettres
[a-z]
minuscules.
L'ensemble des lettres
[A-Z]
majuscules.
[^0-9] \D Tout sauf un chiffre.
L'ensemble des caractères
[a-zA-Z0-9] \w utilisables pour représenter des
identificateurs.
Tout caractère sauf ceux utilisé
24
[^a-zA-Z0-9] \W pour représenter des
identificateurs. 24
Les restrictions (3/8)
Exemple1: ajouter un attribut idnote à l’élément note qui doit
commencer par N suivi de 3 chiffres et prend par défaut la valeur N000
• <xs:attribute name="idnote" default="N000">
• <xs:simpleType>
• <xs:restriction base="xs:string">
• <xs:pattern value="N\d{3}"/>
• </xs:restriction>
• </xs:simpleType>
• </xs:attribute>
25
25
Les restrictions (4/8)
Exemple2: Ajouter un attribut year à l’élément notes qui peut prendre l’une des valeurs (2018|2019|2020|2021|2022)
• <xs:attribute name="year">
• <xs:simpleType>
• <xs:restriction base="xs:int">
• <xs:minInclusive
value="2018" />
• <xs:maxInclusive
value="2022" />
• </xs:restriction>
• </xs:simpleType>
• </xs:attribute> 26
26
Les restrictions (5/8)
Exemple3: l’élément heading est une chaine de caractère de longueur minimale égale à 0 et de longueur
maximale 60
• <xs:element name="heading" minOccurs="0">
• <xs:simpleType>
• <xs:restriction base="xs:string">
• <xs:minLength value="0"/>
• <xs:maxLength value="40"/>
• </xs:restriction>
• </xs:simpleType>
• </xs:element>
27
27
Les restrictions (6/8)
Exemple4: un élément jour qui peut prendre l’une des valeurs (un|deux|trois|quatre|cinq)
• <xs:element name="day" >
• <xs:simpleType>
• <xs:restriction
base="xs:istring">
• <xs: enumeration
value="un" />
• <xs: enumeration
value="deux"/>
• <xs:enumeration
value="trois"/>
• <xs:enumeration
value="quatre"/>
• <xs:enumeration
value="cinq"/>
• </xs:restriction> 28
• </xs:simpleType> 28
Les restrictions (7/8)
Exemple5: Attribut CatgType appartient à l’intervalle [1..5]
• <xs:attribute name="CategType" use=" required ">
• <xs:simpleType>
• <xs:restriction base="xs:int">
• <xs:minInclusive value="1"/>
• <xs:maxInclusive value="5"/>
• </xs:restriction>
• </xs:simpleType>
• <xs:attribute>
29
29
Les restrictions (8/8)
Autres exemples:
• <xs:attribute name= "ChiffresOctaux">
• <xs:simpleType>
<xs:restriction base="xs:int">
<xs:minInclusive value= " 0" />
<xs:maxInclusive value= "7" />
</xs:restriction>
• </xs:simpleType>
• </xs:attribute>
<xs:element name= "typeAdresseElectronique">">
<xs:simpleType >
<xs:restriction base="xs:string">
<xs:pattern value="(.)+@(.)+" />
</xs:restriction>
</xs:simpleType>
Mediouni Mohamed Arbi 30
</xs:element>
30
Document XML valide
Document XML valide:
o Bien formé
o respecte un XSD
o respecte l’intégrité référentielle:
• toutes les valeurs d’attributs de type ID sont
distinctes
• toutes les références sont valides
31