Académique Documents
Professionnel Documents
Culture Documents
Chapitre 5
2
Présentation de XML
Schema
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>
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
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>
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
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
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"/>
1
Exemple
Eléments XML
<nom> Ben Ali</nom>
<age> 36</age>
<dateNaissance> 1970-03-27 </dateNaissance >
Définition xsd
1
Types des données
15
Définition d’un
attribut
<xs:attribute name="nn" type="tt"/>
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
17
Définition d’un élément de
type complexe
<xs:element name="nomElément">
<xs:complexType>
…
</xs:complexType>
</xs:element>
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: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: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: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
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
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>
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>
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
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
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é
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
XML
5
En résumé: Lier un document
xml à un schéma xml
La liaison peut se faire dans le fichier xml
XML XML
noNamespaceSchemaLocation schemaLocation
XSD
+
targetNamespace
6
Inclusion des
schémas
Un schéma xml peut utiliser/inclure un autre schéma xml
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