Vous êtes sur la page 1sur 63

Cours soa et web services

Chapitre 5

Les schémas XML

Année Universitaire 2022-2023


Plan
 Introduction à XML Schema

 Définition des types simples

 Définition des types complexes

 Les restrictions / facettes

 Extension des types simples

 Identifiant et Référence: ID/IDREF

 Plus loin avec les espaces de nom

2
Présentation de XML
Schema

Un schéma XML décrit la structure d’un document XML

Il est nommé aussi définition de schéma xml: xsd

Schéma standard actuel pour la validation de


documents xml recommandé par le W3c
depuis 2001

3
Validation d’un
document XML
XML XSD

<etudiant> <xs:element
name="etudiant">
<nom>Ali</nom> <xs:complexType>
<age> 25 </age> <xs:sequence>
</etudiant> ….
</xs:sequence>
</xs:complexType>
</xs:element>

Document XML bien formé

Document XML valide

4
Exemple de schéma
xml
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="personne">
<xs:complexType>
<xs:sequence>
<xs:element name="nom" type="xs:string"/>
<xs:element name="prenom" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateNaissance" type="xs:Date"/>
</xs:sequence>
</xs:complexType>
</xs:element>

</xs:schema>

5
Apport & Avantages des
schémas XML
 Format XML

Typage des données + création de nouveaux

types Héritage des éléments

Restrictions sur les types + nombre

d’occurences Support des espaces de noms

6
Structure de base

Nœud racine

7
Lier un document xml à un
schéma xml
Un document xml décrit par un xsd est appelé instance de document

<racine

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="monFichier.xsd">
...
</racine>

Liaison à l’espace de nom


Emplacement /URL du XMLSchema-instance
schéma xml à utiliser

8
Exem
Marque.xml
ple
<?xml version="1.0" encoding="UTF-8"?>
<Marques xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Marque.xsd">
<marque> Ford</marque>
<marque> Renault</marque>
</Marques>
Marque.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs= "http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="Marques">
<xs:complexType>
<xs:sequence>
<xs:element name="marque" type="xs:string" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

9
Types simples et types
complexes
Type simple

 Elément avec un contenu textuel uniquement


 Attribut

Type complexe
 Elément vide (sans contenu et avec des attributs)
 Elément qui contient d'autres éléments
 Elément qui contient une combinaison éléments et/ou
attributs et/ou texte (élément complexe mixte)

1
Exemples
Précisez s’il s’agit d’un type simple ou complexe

<Plat type="dessert"> glace</Plat> Plat T.Complexe

<livre isbn="1345"/> livre T.Complexe

<histoire> histoire T.Complexe


La Tunisie indépendante
<date lang="fr">20/03/1956</date> ....
</histoire> lang T.Simple

<personne> personne T.Complexe


<nom>Ali</nom>
<age>15</age>
</personne> nom T.Simple

1
Définition  Définition d’un élément de type simple
des types
simples  Définition d’un attribut

12
Définition d’un élément de
type simple
<xs:element name="nn" type="tt"/>

Nom Elément Type Elément

Types les plus courants:


xs:string xs:decimal xs:integer xs:boolean
xs:date xs:time xs:double

Valeurs par défaut ou fixes

<xs:element name="color" type="xs:string" default="red"/>

<xs:element name="color" type="xs:string" fixed="red"/>

1
Exemple
Eléments XML
<nom> Ben Ali</nom>
<age> 36</age>
<dateNaissance> 1970-03-27 </dateNaissance >

Définition xsd

<xs:element name="nom" type="xs:string"/>


<xs:element name="age" type="xs:integer"/>
<xs:element name="dateNaissance" type="xs:date"/>

1
Types des données

15
Définition d’un
attribut
<xs:attribute name="nn" type="tt"/>

Nom Attribut Type attribut

Valeurs par défaut ou fixes


<xs:attribute name="lang" type="xs:string" default="fr"/>

<xs:attribute name="lang" type="xs:string" fixed="en"/>

Attributs facultatifs/obligatoires
<xs:attribute name="lang" type="xs:string" use="required"/>

1
XSD d’un élément qui contient
Définition d’autres éléments
des types
complexes  XSD d’un élément complexe vide

 XSD d’un élément complexe mixte

17
Définition d’un élément de
type complexe
<xs:element name="nomElément">
<xs:complexType>

</xs:complexType>
</xs:element>

Définition des éléments


internes + attributs

1
XSD d’un élément qui contient d’autres
éléments
Définition XML
<personne>
<nom>Iheb</nom>
<age>19</age>
</personne>

Définition xsd
<xs:element name="personne">
<xs:complexType>
<xs:sequence>
<xs:element name="nom" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>

1
Définition d’un
nouveau type
Pour réutiliser le type complexe qui a été défini:

<xs:element name="…" type="nomDuNouveauType" />

<xs:complexType name="nomDuNouveauType">
….
</xs:complexType>

2
Exemple
 Soient 3 éléments: etudiant, enseignant et
administrateur qui ont tous
 un nom et un âge

 Définition xsd
 <xs:element name="etudiant" type="infos" />
 <xs:element name="enseignant" type="infos" />
 <xs:element name="administrateur" type="infos" />

 <xs:complexType name="infos">
 <xs:sequence>

 <xs:element name="nom" type="xs:string"/>


 <xs:element name="age" type="xs:integer"/>
2
Définition d’un type par
dérivation
Il est possible de créer un nouveau type à partir d’un type existant en y
ajoutant d’autres éléments
<xs:element name="…" type="TypePlusGénéral" />

<xs:complexType name="TypeInitial">
….
</xs:complexType>

<xs:complexType name="TypePlusGénéral">
<xs:complexContent>
<xs:extension base="TypeInitial">

</xs:extension>
</xs:complexContent>
</xs:complexType>

2
ple
<xs:element name="etudiant" type="infoCompletes" />
<xs:element name="enseignant" type="infos" />

<xs:complexType name="infos">
<xs:sequence>
<xs:element name="nom" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="infoCompletes">
<xs:complexContent>
<xs:extension base="infos">
<xs:sequence>
<xs:element name="adresse" type="xs:string"/>
<xs:element name="ville" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>

2
XSD d’un élément
complexe vide
Définition XML
<employé matricule = "1234" service = "finance"/>

Définition xsd
<xs:element name="employé">
<xs:complexType>
<xs:attribute name= "matricule" type="xs:integer"/>
<xs: attribute name= "service" type="xs:string"/>
</xs:complexType>
</xs:element>

2
XSD d’un élément
complexe
Définition XML
mixte
<personne matricule = "1234" >
Ben Safta Mohamed
<fonction>Directeur</fonction>
</personne>

Définition xsd
<xs:element name="personne">
<xs:complexType mixed="true" >
<xs:sequence>
<xs:element name="fonction" type="xs:string"/>
</xs:sequence>
<xs:attribute name= "matricule" type="xs:integer"/>
</xs:complexType>
</xs:element>

2
Les indicateurs XSD
Ordre (Ordre des éléments)
• sequence
• all (ordre quelconque des éléments)
• choice (un des éléments)
Occurence
• minOccurs (par défaut 1, unbounded pour l’infini)
• maxOccurs (par défaut 1, unbounded pour l’infini)
Groupe
• group
• attributeGroup

2
Exemple: Indicateur d’ordre et
d’occurence (1/3)
Soit un extrait d’un document xml qui définit la liste des étudiants d’une
classe qui ne peut pas dépasser 25 étudiants. L’ordre des éléments nom et
prenom est quelconque

2
Exemple (2/3)

Schéma en profondeur

2
Exemple (3/3)
Le même exemple peut être réécrit d’une façon plus claire et lisible en séparant
la définition des éléments de leur type

Schéma à plat

2
Les indicateurs de
groupe
Il est possible de créer des groupes d’éléments/ d’attributs et les
réutiliser

Groupe d’éléments

<xs:group name="nomGroupe">
...
</xs:group>

Groupe d’attributs

<xs:attributeGroup name="groupname">
...
</xs:attributeGroup>

3
Exemple/ Indicateur de
groupe d’éléments
<xs:group name="infoGroup">
<xs:sequence>
<xs:element name="nom" type="xs:string"/>
<xs:element name="prenom" type="xs:string"/>
<xs:element name="dateNaissance" type="xs:date"/>
</xs:sequence>
</xs:group>

<xs:element name="personne" type="infoPerso"/>

<xs:complexType name="infoPerso">
<xs:sequence>
<xs:group ref="infoGroup"/>
<xs:element name="nationalite" type="xs:string"/>
</xs:sequence>
</xs:complexType>

3
Restrictions sur les types de
Restrictions données numériques ou dates
sur les types
de données  Restrictions sur les chaînes
(Facettes)
 Les patterns

32
XSD Restrictions/
Facettes
Les restrictions/facettes sont utilisées pour définir les
valeurs acceptables pour les éléments XML ou les attributs

Syntaxe
<xs:element name="nomElément">
<xs:simpleType>
<xs:restriction base="typeDeBase">
<!-- Définition de la restriction -->
</xs:restriction>
</xs:simpleType>
</xs:element>

3
Restrictions sur les types
numériques ou dates
<xs:nomAttribut value="…"/>

Attribut Description
minInclusive Minimum inclus
maxIncusive Maximum inclu
minExclusive Minimum exclu
maxExclusive Maximum exclu
totalDigits Nombre maximal de chiffres
fractionDigits Nombre de chiffres après la virgule
pattern Expression régulière

3
Exemple: minInclusive et
maxInclusive
On souhaite que la moyenne d’un étudiant soit entre 0 et 20

<moyenne> 19.5 </moyenne>

Définition xsd

<xs:element name="moyenne">
<xs:simpleType>
<xs:restriction base="xs:float">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

3
pattern
Un pattern permet de décrire une expression régulière
Expression Signification
. Tout caractère autre que le retour à la ligne
\d Un chiffre
\D Tout caractère autre qu’un chiffre
\s Caractère blanc (espace, tabulation,…)
\w Caractères alphanumériques et le tiret [_a-zA-Z]
a|b a ou b
[abcd] Equivalent à a|b|c|d
[0-9] Les chiffres de 0 à 9
a? 0 ou 1 occurrence de a
a+ 1 ou plusieurs occurrences de a
a* 0 ou plusieurs occurrences de a

3
Exemple: pattern

<xs:element name="chiffre">
Un chiffre variant entre 2 et 8 <xs:simpleType>
<xs:restriction base="xs:integer">
<xs:pattern value="[2-8]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

<xs:element name="codePostal">
Code postal sur 4 chiffres
<xs:simpleType>
exactement sachant que le
<xs:restriction base="xs:integer">
1er chiffre ne peut pas être 0
<xs:pattern value="[1-9][0-9]{3}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
37
Restrictions sur les
chaînes
Restrictions sur les chaînes

Attribut Description
length Nombre de caractères
minLength Nombre minimum de caractères
maxLength Nombre maximum de caractères
enumeration Liste de valeurs possibles
pattern Schéma à respecter
whiteSpace Défini comment sont gérées les
espaces: preserve, replace, collapse

3
Exemple:
enumeration
On souhaite restreindre la spécialité d’un étudiant aux 3 valeurs
suivantes: DSI, RSI et SEM

<specialite> DSI </specialite>


Définition xsd
<xs:element name="specialite">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="DSI"/>
<xs:enumeration value="RSI"/>
<xs:enumeration value="SEM"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

3
Exemple: pattern
<xs:element name="code">
Code formé d’un chiffre suivi <xs:simpleType>
d’une lettre de l’alphabet sans <xs:restriction base="xs:string">
accent <xs:pattern value="[0-9][a-z A-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

Code formé par un nombre <xs:element name="code">


quelconque de lettres en <xs:simpleType>
miniscule (un ou plusieurs) <xs:restriction base="xs:string">
suivi d’une suite quelconque <xs:pattern value="[a-z]+[!é]*"/>
(0 ou plusieurs occurrences) </xs:restriction>
des symboles ! ou é </xs:simpleType>
 aav!!é!é </xs:element>

40
Exemple:
Définition xsd
whiteSpace
<xs:element name="specialite">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

les caractères blancs (espace, tabulation, retour à la ligne,…) sont


preserve: conservés
replace: remplacés: un espace blanc  un espace
collapse: supprimés et remplacés par un seul espace

4
Extension  Extension avec union
des types
 Extension avec list
simples

42
Extension avec
union
union permet de définir un type dont les valeurs sont des types
listés dans l’attribut memberTypes

Syntaxe

<xs:simpleType name="nomType">
<xs:union memberTypes="type1 type2…typen"/>
</xs:simpleType>

4
Exemple: Union
<tailles> <taille> 42 </taille>
<taille> XL </taille>
</tailles>

<xs:element name="taille">
<xs:simpleType>
<xs:union memberTypes= "tailleLettres xs:integer />
</xs:simpleType>"
</xs:element>

<xs:simpleType name="tailleLettres">
<xs:restriction base="xs:string">
<xs:enumeration value="S"/>
<xs:enumeration value="M"/>
<xs:enumeration value="XL"/>
</xs:restriction>
</xs:simpleType>

4
List
list permet de définir une liste de valeurs séparées par un espace
Syntaxe

<xs:simpleType name="nomType">
<xs:list itemType="typeElémentListe"/>
</xs:simpleType>

Exemple

<plat> coucous pâtes salade </plat>

<xs:element name="plat" type="listePlats"/>


<xs:simpleType name="listePlats">
<xs:list itemType="xs:string"/>
</xs:simpleType>

4
Identifiant
et  Identifiant unique: ID
Référence:
 Référence vers un ID: IDREF

ID/IDREF

4
Identifiant unique: ID
Le type ID attribue à un élément un identifiant unique

Particularités du type ID

 De type NCNAME (combinaison de: chiffres, lettres, ., - et _)


 S’applique uniquement à un attribut
<xs:attribute type="xs:ID"/>
 Peut prendre une valeur unique dans tout le document xml
 Un élément ne peut avoir qu’un seul attribut de type ID
 Un attribut de type ID peut être obligatoire ou optionnel

4
Exemple
<?xml version="1.0" encoding="UTF-8"?>
<ISET xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ISET.xsd">

<etudiants>
<etudiant id="E1">Jawhar Ghodhbane</etudiant>
<etudiant id="E2">Mouna Ben Ali</etudiant>
<etudiant id="E3">Amani Chaouachi</etudiant>
<etudiant id="E4">Mounir Bettoumi</etudiant>
</etudiants>
</ISET>

XSD
<xs:element name="etudiant">
<xs:complexType mixed="true">
<xs:attribute name="id" type="xs:ID" use="required"/>
</xs:complexType>
</xs:element>

4
Référence vers un ID:
IDREF
Le type IDREF fait référence à un élément identifié

Particularités du type IDREF

 De type NCNAME (combinaison de: chiffres, lettres, ., - et _)


 S’applique uniquement à un attribut
<xs:attribute type="xs:IDREF"/>
 Sa valeur doit correspondre à la valeur d’un attribut de type ID
présent dans le document.

4
Exemple (1/2)
….
<LesClasses>
<classe délégué="E3">TI 106 </classe>
<classe délégué="E2">TI 103 </classe>
</LesClasses>

<etudiants>
….
</etudiants>
</ISET>

XSD
<xs:element name="classe">
<xs:complexType mixed="true">
<xs:attribute name= "délégué" type="xs:IDREF"/>
</xs:complexType>
</xs:element>

5
Exemple
XSD (2/2)
…. <xs:element name="classe">
<LesClasses> <xs:complexType mixed="true">
<classe délégué="E3">TI 106 <xs:sequence>
<apprenant id="E1"/> <xs:element ref= "apprenant"
<apprenant id="E3"/> maxOccurs = "unbounded" />
</classe> </xs:sequence>
<classe délégué="E2">TI 103 <xs:attribute name= "délégué"
<apprenant id="E2"/> type="xs:IDREF"/>
<apprenant id="E4"/> </xs:complexType>
</classe> </xs:element>
</LesClasses>
<xs:element name="apprenant">
<etudiants> <xs:complexType>
…. <xs:attribute name="id"
</etudiants> type="xs:IDREF"/>
</ISET> </xs:complexType>
</xs:element>
51
Code exemple au complet:
« ISET.xml »
<?xml version="1.0" encoding="UTF-8"?>
<ISET xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ISET.xsd">
<LesClasses>
<classe délégué="E3">TI 106
<apprenant id="E1"/> <apprenant id="E3"/>
</classe>
<classe délégué="E2">TI 103 "/>
<apprenant id="E2"/> <apprenant id="E4"/>
</classe>
</LesClasses>
<etudiants>
<etudiant id="E1">Jawhar Ghodhbane</etudiant>
<etudiant id="E2">Mouna Ben Ali</etudiant>
<etudiant id="E3">Amani Chaouachi</etudiant>
<etudiant id="E4">Mounir Bettoumi</etudiant>
</etudiants>
</ISET>

5
Schéma XML au complet: « ISET.xsd »
(1/3)

53
Schéma XML au complet: « ISET.xsd »
(2/3)

54
Schéma XML au complet: « ISET.xsd »
(3/3)

55
 Attribution d’espaces de noms aux
Plus loin
nouveaux types et éléments développés
avec les
espaces de  Liaison XML <--> XSD
nom  Inclusion d’espaces de noms

56
types et éléments
développés
Le schéma XML mélange le vocabulaire de XML Schema + vocabulaire créé
<xs:element name="etudiant">
<xs:complexType>
<xs:attribute name= "cin" type="xs:integer"/>
<xs:attribute name= "nom" type="typeNom"/>
</xs:complexType>
</xs:element>

element etudiant
nom
attribute
complexType cin
integer typeNom

http://www.w3.org/2001/XMLSchema http://etudiant.com

5
Liaison XML <- -> XSD
Etud.xml XSD
Etud.xsd
XML
<classe xmlns="http://etudiant.com" <xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XML xmlns ="http://etudiant.com"
Schema-instance" targetNamespace="http://etudiant.com"
elementFormDefault=“qualified“>
xsi:schemaLocation="http://etudiant.com
Etud.xsd"> <xs:element name="etudiant">
<xs:complexType>
<xs:attribute name="cin"
type="xs:integer"/>
<xs:attribute name=
"nom" type="typeNom"/>
</xs:complexType>
</xs:element>
</xs:schema>

58
Description des
attributs
XSD

xmlns:xs  Espace de nom des éléments et types XSD


xmlns Espace de nom par défaut des nouveaux types et éléments
définis par le développeur
targetNamespace  Espace de nom du schema XSD cible
 C’est l’espace de noms qui sera référé par le fichier XML

XML

xmlns:xsi  Instance du schéma xsd


xmlns:  Espace de noms des éléments utilisés dans le fichier XML
xsi:schemaLocation  Localisation du document XSD

5
En résumé: Lier un document
xml à un schéma xml
La liaison peut se faire dans le fichier xml

En ignorant les espaces de En prenant compte des


nom d’un document espaces de nom d’un document

XML XML
noNamespaceSchemaLocation schemaLocation

XSD
+

targetNamespace

6
Inclusion des
schémas
Un schéma xml peut utiliser/inclure un autre schéma xml

<xs:include schemaLocation= URI vers le fichier .xsd/>

Exemple:

Personne.xsd

Employe.xsd

6
? ? ? ?
?
Des questions?

? ? ?
?
62
Références
https://www.w3.org/TR/xmlschema-1/

https://www.w3schools.com/xml/schema_complex.asp

http://miage.univ-nantes.fr/miage/D2X1/chapitre_xmlschema/sommaire.htm

https://wdi.supelec.fr/appliouaibe/Cours/ValidationXML

http://www.gchagnon.fr/cours/xml/schema.html

http://www.grappa.univ-
lille3.fr/~torre/Enseignement/Cours/XML/xmlschema.php

Vous aimerez peut-être aussi