Nothing Special   »   [go: up one dir, main page]

Les Schémas XML XML Schema

Télécharger au format ppt, pdf ou txt
Télécharger au format ppt, pdf ou txt
Vous êtes sur la page 1sur 51

 Les Schémas XML

 XML Schema

1
•Limitations des DTD
Caractéristiques d'un schéma

Un schéma contient la description formelle du contenu d'un


document XML. Il se présente lui-même sous la forme
d'un document XML bien formé. De ce fait il peut lui-même
être décrit par un modèle.
Un schéma XMLSchema doit donc être valide :
-Par rapport à la DTD http://
www.w3.org/2001/XMLSchema.dtd.
-Par rapport au schéma 
http://www.w3.org/2001/XMLSchema.xsd.
Caractéristiques d'un schéma

 Un schéma est un document XML bien formé, il est


composé d'éléments et d'attributs. Ceux-ci
appartiennent à l'espace de noms associé à l'url 
http://www.w3.org/2001/XMLSchema désigné par le
préfixe xs ou xsd.
 Les schémas sont habituellement sauvegardés dans
des fichiers d'extension .xsd.
Caractéristiques d'un schéma

Pour clarifier les choses, dans la suite de ce chapitre,


nous nommerons :
- schéma : un document XML contenant un schéma
servant de modèle à des documents XML,
- document : un document XML, contenant des données,
instance d'un schéma.
•Élément racine d'un schéma:
- Un schéma a un élément racine dont le nom est toujours
xs:schema ou xsd:schema
- Pour que le préfixe xs ou xsd soit connu dans tout le
schéma, il doit être déclaré dans l'élément racine à l'aide
de l'attribut xmlns:xs.
- Un schéma a la forme suivante :

- L'attribut xmlns:xs associe le préfixe xs à l'espace de nom


XMLSchema, ce qui permet d'utiliser ce préfixe pour
tous les éléments et attributs du schéma.
•Référencement:

- Le référencement d'un schéma XML se fait au niveau de


l'élément racine du fichier XML :

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


<racine xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"
xsi:noNamespaceSchemaLocation="chemin_vers_fichier
.xsd">
….
</racine>tous les éléments et attributs du schéma.
Principes généraux des schémas

 Un schéma XML est un document XML.


<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema">

<!-- Déclaration de deux types d ’éléments -->


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

8
Exemple d’adresse postale
en XML: le document

 <?xml version="1.0"?>
 <Addresse_postale pays="France">
 <nom>Mr Jean Dupont</nom>
 <rue>rue Camille Desmoulins</rue>
 <ville>Paris</ville>
 <departement>Seine</departement>
 <code_postal>75600</code_postal>
 </Addresse_postale>

9
DTD d’une adresse postale

<!DOCTYPE Addresse_postale
[ <!ELEMENT Addresse_postale
(nom, rue, ville, département, code_postal)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT rue (#PCDATA)>
<!ELEMENT ville (#PCDATA)>
<!ELEMENT département (#PCDATA)>
<!ELEMENT code_postal (#PCDATA)>
<!ATTLIST Addresse_postale pays CDATA " France"> ]>

10
Typage d’une adresse postale
au moyen d’un schéma XML

<xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema">
<xs:complexType name="Addresse_postale" >
<xs:sequence>
<xs:element name="nom" type="xs:string" />
<xs:element name="rue" type="xs:string" />
<xs:element name="ville" type="xs:string" />
<xs:element name="departement" type="xs:string" />
<xs:element name="code_postal" type="xs:decimal" />
</xs:sequence>
<xs:attribute name= "pays" type=" value="FR"/>
</xs:complexType> </xs:schema>

11
Déclaration des éléments

 Un élément XML est déclaré par la balise ‘element’


de XML schéma qui a de nombreux attributs.
 Les deux principaux attributs sont:
- name : Le nom de l’élément (de la balise associée).
- type : Le type qui peut être simple ou complexe.
Exemple:
<xs:element name="code_postal" type="xsd:decimal"/>
<xsd:element name="date-naissance" type="xsd:date">
<xsd:element name="nombre-enfants" type="xsd:integer">

12
Déclaration des éléments

 Valeur par défaut:


on peut ajouter l'attribut default pour spécifier la valeur
par défaut
 Valeur fixe:
ou l'attribut fixed pour spécifier une valeur fixe égale à
"valeur"
Exemple:
<xs:element name="langue" type=«xsd:string»  default="ar" />

13
Eléments de types Simples :
 Un élément simple est un élément XML qui ne peut
contenir que du texte. Il ne peut contenir aucun autre
élément ou attribut.
 Un élément est dit de type complexe s’il contient
autres éléments (enfants) ou/et a des attributs.
 Le texte peut être de plusieurs types différents. Il peut
s'agir de l'un des types prédéfinis (booléen, chaîne,
date, etc.), ou il peut s'agir d'un type personnalisé qu’on
peut définir nous-même (restrictions ,union ou list )

14
Types simples prédéfinis
https://www.w3.org/TR/xmlschema-0/#CreatDt

15
Quelques types prédéfinis

Types xsd:boolean,
Numériques xsd:int ( 32 bits),
xsd:short (16 bits),
xsd:byte (8 bits),
xsd:long (64 bits),
xsd:integer (entier sans limite de précision),
xsd:positiveInteger ( entier strictement positif sans limite de
précision),
xsd:negativeInteger (entier strictement négatif sans limite de
précision),
xsd:float (32 bits conforme à la norme IEEE),
xsd:double (64 bits conforme à la norme IEEE),
xsd:decimal ( Nombre décimal sans limite de précision)

16
Quelques types prédéfinis

Types Chaines xsd:string,


de caractères xsd:normalizedString ( pas de : tabulation / de saut de
ligne / de retour chariot) , xsd:Name ( Nom XML),
xsd:language (Code de langue comme fr),
xsd:anyURI
Types Date xsd:time format hh:mm:ss[.sss][TZ]. La partie .sss des
& Heures secondes est optionnelle. Tous
les autres champs sont obligatoires. L'heure peut être
suivie d'un décalage horaire TZ qui
est soit Z pour le temps universel soit un décalage
commençant par + ou - comme -07:00.
– xsd:date : Date au format YYYY -MM-DD. Tous les
champs sont obligatoires.
– xsd:dateTime : Date et heure au format YYYY -MM-
DDThh:mm:ss, Par exemple
2008-01-16T14:07:23. Tous les champs sont obligatoires.
17
Exemple de quelques types
prédéfinis
Type Forme lexicale
 String Bonjour
 boolean {true, false, 1, 0}
 float 2345E3
 double 23.456789E3
 decimal 808.1
 dateTime 1999-05-31T13:20:00-05:00.
 binary 0100
 uriReference http://www.cnam.fr
 ….

18
Déclaration des attributs
 Un attribut est une valeur nommée et typée associée à un élément.
 Le type d’un attribut défini en XML schéma est obligatoirement
simple.

Exemple:
<xsd:complexType name="TypeRapport">
<xsd:attribute name= "Date_creation" type="xsd:date"/>
…...
</xsd:complexType>
<xsd:element name="Rapport" type="TypeRapport"/>

19
Autres attributs
 L'élément attribute de XML Schema peut avoir
deux attributs optionnels : use et value.
 On peut ainsi définir des contraintes de présence et
de valeur.
 Selon ces deux attributs, la valeur peut:
être obligatoire ou non
être définie ou non par défaut.
 Exemple: <xs:attribute name= "Date_recrutement"
type="xs:date" use="default" value= "2005-12-31"/>

20
Valeurs possibles pour use
 Use = required : L’attribut doit apparaître.
 Use= prohibited : L’attribut ne doit pas apparaître.
 Use = optional : L’attribut peut apparaître et prendre une
valeur quelconque.
 Use= default : Si l’attribut à une valeur définie il la prend
sinon il prend la valeur par défaut.
 Use= fixed : La valeur de l’attribut est obligatoirement la
valeur définie.
 Exemple : <xs:attribute name= "Date_creation"
type="xs:date" use="required"/>

21
Eléments de types Complexes:
 Un élément est dit de type complexe s’il contient
autres éléments (enfants) ou/et a des attributs.

22
Eléments Complexes:

23
Eléments Complexes:

Le type peut être global et donc associé à un nom (Méthode 2) ou bien être
local à un élément (Méthode 1)

24
Eléments Complexes:

On peut contrôler COMMENT les éléments doivent être


utilisés dans les documents avec des indicateurs :

Indicateurs d’ordre sequence, choice, all

Indicateurs maxOccurs, minOccurs


d’occurrences
Indicateurs de groupes xsd:group ,
xsd:attributeGroup.

25
Types complexes: Sequence
 Un type sequence est défini par une suite de sous-éléments
qui doivent être présents dans l'ordre donné.
 Le nombre d'occurences de chaque sous-élément est défini
par les attributs minOccurs et maxOccurs.
<xs:complexType name= "Commande">
<xs:sequence>
<xs:element name= "Ad_livraison" type="Addresse"/>
<xs:element name= "Ad_facturation" type="Addresse"/>
<xs:element name=  "texte" type="xs:string" minOccurs="1" />
<xs:element name="items" type="Items" maxOccurs= "30" />
</xs:sequence>
</xs:complexType>

26
Types complexes: Choice
 Un seul des éléments listés doit être présent.
 Le nombre d'occurences possible est déterminé par les
attributs minOccurs et maxOccurs de l’élément.
<xs:complexType name=  "type_temps">
<xs:choice >
<xs:element name= "Noire" type="Note" minOccurs="1"
maxOccurs="1" />
<xs:element name= "Croche" type="Note" minOccurs="2"
maxOccurs="2" />
</xs:choice>
</xs:complexType>

27
Types complexes: All
 C’est une composition de type ensembliste. Dans un document
conforme, les éléments listés doivent être tous présents au
plus une fois. Il peuvent apparaître dans n'importe quel ordre.
<xs:complexType name= "Commande">
<xs:all>
<xs:element name= "Ad_livraison" type="Addresse"/>
<xs:element name= "Ad_facturation" type="Addresse"/>
<xs:element name= "texte" type="xs:string" minOccurs="0" />
<xs:element name="items" type="Items" maxOccurs= "30" />
</xs:all>
</xs:complexType>

28
Indicateurs de groups:
 Il permet de de nommer des groupes d'éléments et des
groupes d'attributs afin de pouvoir les réutiliser. Ce
mécanisme aide à structurer un schéma complexe et vise à
obtenir une meilleure modularité dans l'écriture des schémas.
Les groupes d'éléments et d'attributs sont respectivement
définis par les éléments xsd:group et xsd:attributeGroup.

29
Indicateurs de groups:
 xsd:group : permet de définir un groupe d'éléments dont
le nom est donné par l'attribut name.
?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified“ xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:group name="persongroup">
<xs:sequence> <xs:element name="nom" type="xs:string"/>
<xs:element name="prenom" type="xs:string"/>
<xs:element name="date" type="xs:date"/></xs:sequence> </xs:group>

<xs:element name="formateur" type="infosFormateur"/>


<xs:complexType name="infosFormateur">
<xs:sequence> <xs:group ref="persongroup"/>
<xs:element name="matricule" type="xs:string"/></xs:sequence>
</xs:complexType>
</xs:schema>
30
Indicateurs de groups:
 xsd:attributeGroup : permet de définir un groupe
d'attributs dont le nom est donné par l'attribut name.

<xs:attributeGroup name="personattrgroup">
<xs:attribute name="nom" type="xs:string"/>
<xs:attribute name="prenom" type="xs:string"/>
<xs:attribute name="date" type="xs:date"/>
</xs:attributeGroup>

<xs:element name="formateur">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>

31
Types simples définis par
dérivation d'un autre type simple

On peut définir un nouveau type simple à l’aide de la


syntaxe suivante :

32
Types simples définis par
dérivation d'un autre type simple

Opérateurs d’union
L'opérateur xsd:union définit un nouveau type simple
dont les valeurs sont celles des types listés dans
l'attribut memberTypes.
Exemple :
<xsd:simpleType name="IntegerType">
<xsd:union memberTypes="xsd:nonPositiveInteger
xsd:nonNegativeInteger">
</xsd:simpleType>

33
Types simples définis par
dérivation d'un autre type simple

Opérateurs d’union
L'opérateur xsd:union définit un nouveau type simple
dont les valeurs sont celles des types listés dans
l'attribut memberTypes.
Exemple :
<xsd:simpleType name="IntegerType">
<xsd:union memberTypes="xsd:nonPositiveInteger
xsd:nonNegativeInteger">
</xsd:simpleType>

34
Types simples définis par
dérivation d'un autre type simple
 L'opérateur xsd:list définit un nouveau type simple
dont les valeurs sont les listes de valeurs du type simple
donné par l'attribut itemType. Il s'agit uniquement de
listes de valeurs séparées par des espaces.

Par exemple,
<xs:simpleType name="numéroDeTéléphone">
  <xs:list itemType="xs:unsignedByte" />
</xs:simpleType>

Un élément conforme à cette déclaration


serait <téléphone>01 44 27 60 11</téléphone>.
35
Dérivation par restriction

 On peut appliquer une dérivation aussi bien à un type


simple qu'à un type complexe. La dérivation par
restriction permet de créer de nouveaux types simples à
partir des types simples prédéfinis par le format XML
Schema. On utilise pour ce faire des facettes, qui sont des
contraintes supplémentaires appliquées à un type simple
particulier.
 La restriction d'un type est introduite par l'élément
xsd:restriction dont l'attribut base donne le nom du type
de base.

36
Dérivation par restriction

 Restriction par longueur: Pour limiter la longueur


d'une valeur dans un élément, nous utiliserions les
contraintes de longueur: maxLength et minLength.

37
Dérivation par restriction

 Restriction par intervalle:

38
Dérivation par restriction

 Restriction par énumération:

39
Résumé sur les restrictions (Facettes)

40
Les contraintes de facettes
 lenght : la longueur d’une donnée.
 minLenght: la longueur minimum.
 maxLenght: la longueur maximum.
 enumeration: un ensemble discret de valeurs.
 whitespace: contraintes de normalisation des chaînes
relativement aux espaces (preserve, replace, collapse).
 maxInclusive: une valeur max comprise.
 maxExclusive: une valeur max exclue.
 minInclusive: une valeur min comprise.
 maxInclusive: une valeur max exclue.
 totalDigits: le nombre total de chiffres.
 fractionDigits: le nombre de chiffres dans la partie
fractionnaire.
 … 41
Extension de types

 L'extension permet d'obtenir un type dérivé à


partir d'un type de base (Héritage). L'idée
générale de est de rajouter du contenu et des
attributs. L'extension s'applique aux types
simples et aux types complexes mais elle donne
toujours un type complexe.

42
Extension de types

 L'extension d'un type est introduite par


l'élément xsd:extension dont l'attribut base
donne le nom du type de base. Celui-ci peut
être un type prédéfini ou un type défini dans le
schéma. Le contenu de l'élément xsd:extension
explicite le contenu et les attributs à ajouter au
type de base.
 L'élément xsd:extension est enfant d'un
élément xsd:simpleContent ou
xsd:complexContent, lui-même enfant de
l'élément xsd:complexType.
43
Extension de types simples

 L'extension permet uniquement d'ajouter des


attributs pour donner un type complexe à
contenu simple.
 Lors d'une extension d'un type simple, l'élément
xsd:extension est toujours enfant d'un élément
 xsd:simpleContent. Les déclarations des
attributs qui sont ajoutés sont placées dans le
contenu de l'élément xsd:extension.

44
Extension de types simples
 Exemple : Définition d'un type Prix qui étend le
type prédéfini xsd:decimal en lui ajoutant un
attribut devise de type xsd:string

45
Extension de Types complexes à
contenu complexe

 L'extension d'un type complexe à contenu


complexe consiste à ajouter du contenu et/ou
des attributs. Le contenu est ajouté après le
contenu du type de base. L'ajout d'attribut est
semblable au cas des types complexes à
contenu simple.

46
Extension de Types complexes à
contenu complexe
 Exemple :
< xs:element name="formateur" type="nom_prenom"/>
<xs:complexType name="nom_prenom1">
<xs:sequence>
<xs:element name="nom" type="xs:string"/>
<xs:element name="prenom" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="nom_prenom">
<xs:complexContent>
<xs:extension base="nom_prenom1">
<xs:attribute name="age" type="xs:float"/>
</xs:extension>
</xs:complexContent>
</xs:complexType> 47
Référence à un élément global

 Un élément global, c'est-à-dire dont la


déclaration par xsd:element est enfant direct de
l'élément xsd:schema, peut être utilisé par des
définitions de type. Ces définitions de type se
contentent de faire référence à l'élément global.
Ce mécanisme permet une certaine modularité
dans l'écriture des schémas puisqu'il évite des
répétitions.

48
Référence à un élément global

49
Avantage des schémas xml :

 Syntaxe XML
 Un grand nombre de types de données de base :
booléens, entiers, intervalles de temps, etc.
 Il est possible de créer de nouveaux types : par ajout de
contraintes sur un type existant, ….
 La notion d'héritage : Les éléments peuvent hériter du
contenu et des attributs d'un autre élément
 Une grande facilité de conception modulaire de schémas

50
Références

“Cours XML”, ELGARRAI Zineb, ISTA NTIC SAFI,

Gérard Florin. Laboratoire CEDRIC. CNAM Paris. « XML et XML


schéma : représentation des données dans les services
Webs »

https://www.gchagnon.fr/cours/xml/schema.html#exotypes

51

Vous aimerez peut-être aussi