schema xml

36
Langages de description et modélisation Mickaël BARON – 2009 (Rév. Août 2009) mailto:[email protected] ou mailto:[email protected] Schema XML

Upload: mickael-baron

Post on 25-May-2015

3.048 views

Category:

Technology


11 download

DESCRIPTION

Ce support cours est une courte introduction au langage de description Schema XML. Nous étudions les aspects suivants : définition de types simples (Element, Attributs et Restrictions), définition de types complexes (attributs, à partir de types simples, sous éléments et mixe) puis annotations.

TRANSCRIPT

Page 1: Schema XML

Langages de description et modélisation

Mickaël BARON – 2009 (Rév. Août 2009)mailto:[email protected] ou mailto:[email protected]

Schema XML

Page 2: Schema XML

2Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Creative Commons

Contrat Paternité

Partage des Conditions Initiales à l'Identique

2.0 France

http://creativecommons.org/licenses/by-sa/2.0/fr

Licence

Page 3: Schema XML

3Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.comOrganisation du cours sur Schema XML

� Généralités

� Types simples

� Elements

� Attributs

� Restrictions

� Types complexes

� Uniquement attributs

� A partir de types simples

� Sous éléments

� Mixe

� Annotations

Tous les exemples du cours sont disponibles directement à l’adresse

mbaron.developpez.com/divers/schemaxml

Page 4: Schema XML

4Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Schema XML : généralités

� Schema XML porte également les acronymes de XSD (XML

Schema Document) ou WXS (W3C XML Schemas)

� Il s’agit d’une norme définie par W3C (www.w3.org/XML/Schema)

� Un Schema XML permet de décrire la structure XML d’un

document en XML

� Principaux avantages du Schema XML par rapport à la DTD

� Comme le Schema XML est un document XML, les langages

d’interrogation utilisés pour manipuler l’XML sont également utilisables

(XSLT, XPath, XQuery, …)

� Les outils qui manipulent du XML peuvent exploiter le Schema XML

� Contraintes plus fortes (typage fort, ordre des éléments, cardinalité

sur les éléments, expressions régulières, …)

Page 5: Schema XML

5Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.comSchema XML : Schema XML Versus DTD

� Partons d’un exemple simple d’XML qui montre les avantages

d’employer le Schema XML au lieu d’une DTD

� L’exemple simple XML est utilisé pour décrire une personne

� Soit les contraintes suivantes qui devront être respectées

� Une personne doit définir un nom puis un prénom puis un age et

peut définir un email puis des renseignements sur ces enfants

� L’age est un entier compris entre 1 et 100

� L’email est une chaîne de caractères qui doit contenir le caractère @

� Les renseignements concernant les enfants portent sur l’age(obligatoire), le sexe (obligatoire) et une remarque (facultative)

� L’age de l’enfant est une restriction de l’age de la personne dont la valeur maxi est modifiée à 50

� Le sexe est un énuméré (homme, femme et indéterminé)

� Il ne peut y avoir plus de 3 enfants

Page 6: Schema XML

6Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.comSchema XML : Schema XML Versus DTD

� Schema XML qui décrit les besoins précédents<schema xmlns="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://mbaron.developpez.com/InfoP ersoSchema"xmlns:tns="http://mbaron.developpez.com/InfoPersoSc hema" elementFormDefault="qualified" attributeFormDefault ="qualified">

<element name="person"><complexType>

<sequence><element name="name" type="string" /><element name="firstName" type="string" /><element name="old" type="tns:ageType" /><element name="email" type="tns:ageType" minOccurs="0" /><element name="childs" type="tns:childsType" minOccu rs="0" maxOccurs="1"/>

</sequence></complexType>

</element><simpleType name="ageType" >

<restriction base="integer"><minInclusive value="1" /><maxInclusive value="100" />

</restriction></simpleType><simpleType name="emailType">

<restriction base="string"><pattern value=".*@.*" />

</restriction></simpleType>

...

InfoPersoSchema.xsd du projet divers.xml.schemaXMLExample

Email optionnel

L’ordre des éléments doit être respecté

Type simple défini sur la base d’un entier avec une restriction

Type simple défini sur la base d’une chaîne de caractères avec une restriction sur le contenu

Page 7: Schema XML

7Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.comSchema XML : Schema XML Versus DTD

� Schema XML qui décrit les besoins précédents (suite)

<simpleType name="sexeTypeChild" ><restriction base="string">

<enumeration value="homme" /><enumeration value="femme" /><enumeration value="indéterminé" />

</restriction></simpleType>

<simpleType name="ageTypeChild"><restriction base="tns:ageType" >

<maxInclusive value="50" /></restriction>

</simpleType>

<complexType name="childsType" ><sequence>

<element name="child" minOccurs="1" maxOccurs="3"><complexType>

<attribute name="remark" type="string" use="required " /><attribute name="old" type="tns:ageTypeChild" /><attribute name="sexe" type="tns:sexeTypeChild" />

</complexType></element>

</sequence></complexType></schema>

InfoPersoSchema.xsd du projet divers.xml.schemaXMLExample

Type simple défini sur la base d’un type simple défini

précédemment

Type complexe définissant la structure des informations concernant les enfants

L’élément child définit trois attributs

Page 8: Schema XML

8Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.comSchema XML : Schema XML Versus DTD

� Deux instances XML qui décrivent une personne<?xml version="1.0" encoding="UTF-8"?><tns:person xmlns:tns="http://mbaron.developpez.com/ InfoPersoSchema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc e" xsi:schemaLocation="http://mbaron.developpez.com/In foPersoSchema InfoPersoSchema.xsd ">

<tns:name>BARON</tns:name><tns:firstName>Mickael</tns:firstName><tns:old>30</tns:old><tns:email>[email protected]</tns:email><tns:childs><tns:child tns:remark="He's too much" tns:old="3" tns: sexe="homme"/> </tns:childs>

</tns:person>

InfoPersoInstance.xml du projet divers.xml.schemaXMLExample

<?xml version="1.0" encoding="UTF-8"?><tns:person xmlns:tns="http://mbaron.developpez.com/ InfoPersoSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc e" xsi:schemaLocation="http://mbaron.developpez.com/In foPersoSchema InfoPersoSchema.xsd ">

<tns:firstName>John</tns:firstName><tns:name>BAD</tns:name><tns:old> 110</tns:old><tns:email> toto.fr </tns:email>

</tns:person>

BadInfoPersoInstance.xml du projet divers.xml.schemaXMLExample

Le prénom doit être positionné après le

nomL’âge ne doit pas dépasser 100

L’adresse ne contient pas le caractère @

Instance XML qui ne respecte pas le Schema XML

Page 9: Schema XML

9Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Schema XML : en-tête

� Un document Schema XML est défini dans un fichier dont

l’extension est *.xsd (monSchema.xsd)

� La balise <schema> est la balise racine de tous documents

Schema XML

� Le corps de la balise <schema> décrit le contenu de la

grammaire

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

... // Contenu du Schema XML

</ schema>

Balise racine

Précise la version XML et l’encodage

utilisés

InfoPersoSchema.xsd du projet divers.xml.schemaXMLExample

Page 10: Schema XML

10Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Schema XML : en-tête

� La configuration du document Schema XML est effectuée par

l’intermédiaire des attributs de la balise <schema>

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

xmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="http://mbaron.developpez.com/InfoP ersoSchema"xmlns:as="http://mbaron.developpez.com/InfoPersoSch ema"elementFormDefault="qualified"attributeFormDefault="qualified"

... // Contenu du Schema XML

</schema>

InfoPersoSchema.xsd du projet divers.xml.schemaXMLExample

Précise que les éléments et les types utilisés dans le

Schema XML proviennent de l’espace de nommage W3C

Précise que les éléments définis dans le Schema XML sont issus dans un autre espace de

nommage

Précise que pour cet espace de nommage les éléments sont préfixés par as

Page 11: Schema XML

11Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Schema XML : en-tête

� Possibilité de préfixer les éléments et les attributs qui

proviennent d’un espace de nommage<xs:schema

xmlns:xs="http://www.w3.org/2001/XMLSchema"targetNamespace="http://keulkeul.blogspot.com/Prefi xedInfoPersoSchema"xmlns:tns="http://keulkeul.blogspot.com/PrefixedInf oPersoSchema"

elementFormDefault="qualified" attributeFormDefault ="qualified"><xs:element name="person">

<xs:complexType><xs:sequence>

<xs:element name="name" type=" xs:string " /><xs:element name="firstName" type=" xs:string " /><xs:element name="old" type=" tns:ageType " /><xs:element name="email" type=" xs:string " /><xs:element name="childs" type=" tns:childsType " />

</xs:sequence></xs:complexType>

</xs:element>

<xs:simpleType name="ageType"><xs:restriction base=" xs:integer ">

<xs:minInclusive value="10" /><xs:maxInclusive value="100" />

</xs:restriction></xs:simpleType>...

</xs:schema>

PrefixedInfoPersoSchema.xsd du projet divers.xml.schemaXMLExample

Tous les éléments de l’espace de nommage (W3C) sont préfixés par xs

Tous les éléments de l’espace de nommage (PrefixedInfoPersoSchema)

sont préfixés par tns

Page 12: Schema XML

12Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.comSchema XML : référencer un Schema XML

� Pour référencer un document XML à un Schema XML

plusieurs informations sont à renseigner

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

xmlns:tns="http://mbaron.developpez.com/InfoPersoSc hema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc e"

xsi:schemaLocation="http://mbaron.developpez.com/In foPersoSchema InfoPersoSchema.xsd ">

...</tns:person>

L'espace de nommage par défaut où tous les éléments seront préfixés par tns

L'espace de nommage des éléments définis par la norme W3C (ex : schemaLocation)

L'espace de nommage du Schema XML utilisé et la localisation de sa définition

schemaLocation="{namespace} {location}"

Page 13: Schema XML

13Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Schema XML : types simples et types complexes

� Un élément dans un Schema XML se déclare avec la balise <element>

� Un élément est typé, il doit donc respecter une structure de données

� Deux types de données sont à distinguer : types simpleset types complexes

� Types simples

� un élément de type simple ne peut comporter ni attributs, ni de sous éléments

� possibilité d’utiliser des types prédéfinis issus de la norme W3C ou de dériver de nouveaux à partir de types déjà existant

� Types complexes

� un élément de type complexe permet d’exprimer des sous éléments et permet également d’y associer des attributs

Page 14: Schema XML

14Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Types simples : Eléments

� Un élément de type simple est un élément qui ne contient pas d’attribut ni de sous éléments

� Un élément se base sur un type simple prédéfini par la norme ou sur un type simple dérivé (voir dans Restrictions)

� Syntaxe d’un élément de type simple

� Si le type n’est pas défini, le type anyType est utilisé par défaut (aucune contrainte sur le contenu)

� Exemples

<element name="theName" type="theType" />

Le nom de l’élément Le type simple de l’élément

<element name=" firstName " type=" string " />

<firstName >BARON Mickael</ firstName >

Définition d’un élément namede type string

Du côté XML, la balise firstName contient un corps avec une valeur de type chaîne de caractères

Page 15: Schema XML

15Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.comTypes simples : principaux types simples

� anyType : BARON 123 (super type)

� string : BARON Mickael

� normalizedString : BARON Mickael

� token : BARON Mickael

� base64Binary : GpM7

� hexBinary : 0FB7

� integer : …, -1, 0, 1, …

� positiveInteger : 1, 2, …

� negativeInteger : …, -2, -1

� nonNegativeInteger : 0, 1, 2, …

� nonPositiveInteger : …, -2, -1, 0

� long : -9223372036854775808, -1, 0, 1, 92…

� unsignedLong : 0, 1, … 18446744073709…

� int : -2147483648, …, -1, 0, 1, 2147483647

� La définition de l’ensemble des types simples est disponible à

www.w3.org/TR/xmlschema-0/#CreatDt� unsignedInt : 0, 1, … 4294967295

� byte : -128, …, -1, 0, 1, …, 127

� unsignedByte : 0, 1, …, 255

� decimal : -1.23, 0, 123.4, 1000.00

� float : -INF, -1E4, -0, 0, 12.78E-2, …

� double : -INF, -1E4, -0, 0, 12.78E-2, …

� boolean : true, false, 1, 0

� duration : P1Y2M 1 année, 2 mois

� dateTime : 1999-05-21T12:20:00.000 …

� date : 1999-05-31

� time : 13:20:00.000

� gYear : 1999 (Gregorian Year)

� gMonth : --05 (Gregorian Month)

� language : en-GB, fr, …

Page 16: Schema XML

16Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Types simples : Eléments (valeur par défaut ou fixée)

� Les éléments de types simples peuvent avoir une valeur

par défaut ou une valeur fixée

� Une valeur par défaut est automatiquement assignée quand

la valeur de l’élément n’est pas explicitement donnée

� Une valeur fixée est automatiquement assignée, aucune

autre valeur ne peut être donnée à l’élément

<element name="firstName" type="string" default ="Mickael" />

L’attribut default de l’élément firstName précise une valeur au cas où elle serait absente

<element name="firstName" type="string" fixed ="Mickael" />

L’attribut fixed de l’élément firstName précise une valeur et ne peut être modifiée

Page 17: Schema XML

17Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Types simples : Attributs

� Même si un élément de type simple ne peut avoir d’attribut

(voir type complexe) l’attribut est toujours déclaré comme un

type simple

� Un attribut est optionnel par défaut, pour préciser qu’il est

obligatoire, il faut utiliser l’attribut use

� Syntaxe d’un attribut de type simple

� Exemple

<attribut name="theName" type="theType" use="required" />

Le nom de l’attribut Le type simple de l’attribut

<attribut name="remark" type="string" />Définition d’un attribut remarkde type string et qui est optionnel<child remark="He's too much" ... />

Du côté XML, la balise child contient un attribut remarkde type string

Précise le caractère obligatoire (required ou optional)

Page 18: Schema XML

18Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Types simples : Attributs (valeur par défaut ou fixée)

� Les attributs peuvent avoir une valeur par défaut ou une

valeur fixée tout comme les éléments simples

� Une valeur par défaut est automatiquement assignée quand

la valeur de l’attribut n’est pas explicitement donnée

� Une valeur fixée est automatiquement assignée, aucune

autre valeur ne peut être donnée à l’attribut

<attribut name="remark" type="string" default ="Remarque à préciser" />

L’attribut default de l’attribut remark précise une valeur au cas où elle serait absente

<attribut name="remark" type="string" fixed ="Remarque à préciser" />

L’attribut fixed de l’attribut remark précise une valeur et ne peut être modifiée

Page 19: Schema XML

19Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.comTypes simples : Restrictions « Facets »

� Les restrictions sur les types simples (Facets) permettent de

dériver de nouveaux types à partir de types existants

� La création de nouveaux types simples est réalisée au travers

de la balise <simpleType>

� La restriction de type permet de définir des contraintes sur le

nouveau type à créer

� La restriction est exprimée à partir de la balise <restriction>

<simpleType name="newType" >...

</simpleType>

Définition d’un nouveau type nameType

<simpleType name="newType" ><restriction base="type" >

...</restriction>

</simpleType>

La restriction précise sur quel type elle doit être

appliquée

Les différentes restrictions sont

précisées dans la suite

Page 20: Schema XML

20Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.comTypes simples : Restrictions « Facets »

� La définition de l’ensemble des restrictions est disponible à

www.w3.org/TR/xmlschema-0/#SimpleTypeFacets

� maxExclusive : limite supérieure (exclue)

� maxInclusive : limite supérieure (incluse)

� minExclusive : limite inférieure (exclue)

� minInclusive : limite inférieure (incluse)

� enumeration : liste de valeurs autorisée

� length : nombre de caractères ou d’élément d’une liste autorisé

� minLength : nombre minimum de caractères ou d’élément d’une liste

� pattern : expression régulière à respecter

� fractionDigits : nombre maxi de digits autorisé

� totalDigits : nombre exact de digits autorisé

� whiteSpace : politique de gestion des espaces blancs (tab, retour ligne, fin de ligne, …)

Page 21: Schema XML

21Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.comTypes simples : Restrictions « Facets »

� Exemple : restriction sur des valeurs

<simpleType name="ageType"><restriction base="integer">

<minInclusive value="1" /><maxInclusive value="100" />

</restriction></simpleType>

� Exemple : restriction sur une liste de valeur autorisée

� Exemple : restriction à partir d’une expression régulière

<simpleType name="sexeTypeChild" ><restriction base="string">

<enumeration value="homme" /><enumeration value="femme" /><enumeration value="indéterminé" />

</restriction></simpleType>

<simpleType name="emailType"><restriction base="string">

<pattern value=".*@.*" /></restriction>

</simpleType>

Restriction du type integer

Les valeurs de type ageType ne doivent pas dépasser 100 et doivent être supérieures à 1

Restriction du type string

Trois valeurs sont autorisées

Restriction du type string

Toutes chaînes de caractères de type emailType doit

respecter ce pattern

Page 22: Schema XML

22Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.comTypes simples : Restrictions « Facets »

� L'utilisation d'un nouveau type impose d'exploiter l'espace de

nommage du Schema XML en cours <xs:schema

xmlns:xs="http://www.w3.org/2001/XMLSchema"targetNamespace="http://keulkeul.blogspot.com/Prefi xedInfoPersoSchema"xmlns:tns="http://keulkeul.blogspot.com/PrefixedInf oPersoSchema"

elementFormDefault="qualified" attributeFormDefault ="qualified"><xs:element name="person">

<xs:complexType><xs:sequence>

...<xs:element name="old" type=" tns:ageType " />...

</xs:sequence></xs:complexType>

</xs:element>

<xs:simpleType name="ageType"><xs:restriction base="xs:integer">

<xs:minInclusive value="10" /><xs:maxInclusive value="100" />

</xs:restriction></xs:simpleType>...

</xs:schema>

InfoPersoSchema.xsd du projet divers.xml.schemaXMLExample

Utilisation du nouveau type ageType défini dans

l'espace de nommage tns

Nous verrons l'utilisation des attributs lors de la présentation

des types complexes

Page 23: Schema XML

23Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.comTypes simples : Restrictions « Facets »

� La création d’un nouveau type peut être anonyme, de ce fait

aucune valeur n’est précisée dans l’attribut name de la balise

simpleType

� Une déclaration d’un type anonyme doit se faire dans le

corps d’un élément ou d’un attribut simple

� L'utilisation de types anonymes ne permet pas de réutiliser

les nouveaux types définis, ils ne sont utilisables qu'une

seule fois <element name="old" /><simpleType>

<restriction base="integer"><minInclusive value="1" /><maxInclusive value="100" />

</restriction></simpleType>

</element>

Le type utilisé pour l'élément old ne peut être ré-utilisépar un autre

élément ou attribut

Page 24: Schema XML

24Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Types complexes : généralités

� Un élément de type complexe peut contenir d'autres éléments

et / ou des attributs

� Un attribut ne peut être de type complexe

� Quatre combinaisons d'éléments complexes sont à distinguer

� Eléments vides qui ne contiennent que des attributs

� Eléments de type simple qui contiennent des attributs

� Eléments qui peuvent contenir des sous éléments et des attributs

� Eléments qui contiennent des attributs, des sous éléments et du texte

� La création d'un éléments de type complexe est réalisée au

travers de la balise <complexType>

Page 25: Schema XML

25Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.comTypes complexes : Uniquement attributs

� Il s'agit d'un élément de type complexe ne contenant que

des attributs, appelé également élément vide

� Exemple

� Lister l'ensemble des attributs (comme défini précédemment)

dans la balise <complexType>

<tns:child tns:remark="He's too much" tns:old="3" tns:sexe="homm e" />

Dans une instance XML, la balise child contient 3 attributs

Le corps de l'élément child est vide

<xs:element name="child"><xs:complexType>

<attribute name="remark" type="string" use="required " /><attribute name="old" type="tns:ageTypeChild" /><attribute name="sexe" type="tns:sexeTypeChild" />

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

Page 26: Schema XML

26Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Types complexes : A partir de types simples

� Il s'agit d'un élément de type complexe qui peut contenir

une simple valeur dans son corps et des attributs

� Exemple

� Pour restreindre l'utilisation de types simples dans un type

complexe il faut employer la balise <simpleContent>

<tns:child tns:old="3" tns:sexe="homme" >Tom</tns:ch ild>

La balise childcontient 2 attributs

Le corps de l'élément child est défini par une simple valeur de type string

<xs:element name="child"><xs:complexType>

<xs:simpleContent>...

</xs:simpleContent></xs:complexType>

</xs:element>

Le contenu de la balise simpleContent précise qu'il ne peut y avoir que des attributs et une simple valeur

Page 27: Schema XML

27Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Types complexes : A partir de types simples

� Une extension (restriction a été vue précédemment) permet

d'employer un type sans définition de contraintes

� Deux écritures selon si vous souhaitez une restriction ou une

extension<xs:element name="">

<xs:complexType><xs:simpleContent>

<xs:extension base="baseType">...

</xs:extension></xs:simpleContent>

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

<xs:element name="person"><xs:complexType>

<xs:simpleContent><xs:restriction base="baseType">

...</xs:restriction>

</xs:simpleContent></xs:complexType>

</xs:element>

<xs:element name="child"><xs:complexType>

<xs:simpleContent><xs:extension base="string">

<attribute name="old" type="tns:ageTypeChild" /><attribute name="sexe" type="tns:sexeTypeChild" />

</xs:extension></xs:simpleContent>

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

Page 28: Schema XML

28Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Types complexes : Sous éléments

� Il s'agit d'un élément de type complexe qui peut contenir

des sous éléments (simples ou complexes) et des attributs

� Exemple

� Une balise indicateur d'ordre est utilisée pour spécifier la

logique de placement des sous balises entre elles

<tns:person><tns:name>BARON</tns:name><tns:firstName>Mickael</tns:firstName><tns:old>30</tns:old><tns:email>[email protected]</tns:email>

</tns:person>

La balise personcontient 4 éléments

L'ordre des sous éléments est fixé

<element name="person"><complexType>

<sequence><element name="name" type="string" /><element name="firstName" type="string" /><element name="old" type="tns:ageType" /><element name="email" type="tns:ageType" />

</sequence></complexType>

</element>

sequence exprime que les sous éléments doivent apparaître dans un ordre spécifique (name,

firstName, old puis email)

Page 29: Schema XML

29Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Types complexes : Sous éléments - Indicateurs d’ordre

� Schema XML permet d'exprimer trois sortes d'indicateurs

d'ordre désignées par les balises : all, choice et sequence

� La balise all spécifie que tous les sous éléments peuvent

apparaître dans n'importe quel ordre<element name="person">

<complexType><all>

<element name="name" type="string" /><element name="firstName" type="string" /><element name="old" type="tns:ageType" /><element name="email" type="tns:ageType" />

</all></complexType>

</element>

<tns:person><tns:firstName>Mickael</tns:firstName><tns:email>[email protected]</tns:email><tns:old>30</tns:old><tns:name>BARON</tns:name>

</tns:person>

La balise personcontient 4 éléments utilisables dans

n'importe quel ordre

Page 30: Schema XML

30Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Types complexes : Sous éléments - Indicateurs d’ordre

� La balise choice exprime qu'un seul élément parmi tous les sous éléments peut apparaître

� La balise sequence spécifie que les sous éléments doivent apparaître dans un ordre spécifique

<element name="person"><complexType>

<choice><element name="name" type="string" /><element name="firstName" type="string" /><element name="old" type="tns:ageType" /><element name="email" type="tns:ageType" />

</choice></complexType>

</element>

<tns:person><tns:old>30</tns:old>

</tns:person>

La balise person contient 4 éléments dont 1 seul peut

être utilisé

<element name="person"><complexType>

<sequence><element name="name" type="string" /><element name="firstName" type="string" /><element name="old" type="tns:ageType" /><element name="email" type="tns:ageType" />

</sequence></complexType>

</element>

<tns:person><tns:name>BARON</tns:name><tns:firstName>Mickael</tns:firstName><tns:old>30</tns:old><tns:email>[email protected]</tns:email>

</tns:person>

La balise person contient 4 éléments qui doivent apparaître

dans un ordre donné

Page 31: Schema XML

31Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Types complexes : Sous éléments - Indicat. d'occurrence

� Les indicateurs d'occurrence sont utilisés pour exprimer le

nombre de fois qu'un sous élément peut apparaître

� Ils sont exprimés sous la forme d'attributs d'un sous élément

� maxOccurs : précise le nombre d'occurrence maximum

� minOccurs : précise le nombre d'occurrence minimum

� Si les valeurs de maxOccurs ou minOccurs ne sont pas explicitement précisées, la valeur par défaut est de 1

� Pour définir une valeur infinie, fixer la valeur à unbounded<element name="person">

<complexType><sequence>

<element name="name" type="string" minOccurs="2" max Occurs="unbounded"/><element name="firstName" type="string" /><element name="old" type="tns:ageType" minOccurs="0" /><element name="email" type="tns:ageType" />

</sequence></complexType>

</element>

Page 32: Schema XML

32Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Types complexes : Sous éléments

� Un élément de type complexe contenant des sous éléments

peut également contenir des attributs

<tns:person userId="123456" ><tns:name>BARON</tns:name><tns:firstName>Mickael</tns:firstName><tns:old>30</tns:old><tns:email>[email protected]</tns:email>

</tns:person>

� Les attributs sont exprimés à la suite de l'indicateur d'ordre

<element name="person"><complexType>

<sequence><element name="name" type="string" /><element name="firstName" type="string" /><element name="old" type="tns:ageType" /><element name="email" type="tns:ageType" />

</sequence><attribute name="userId" type="string" /></complexType>

</element>

L'élément de type complexe contient un attribut

La liste des attributs doit être placée

obligatoirement à la suite de l'indicateur

d'ordre

Page 33: Schema XML

33Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Types complexes : Mixe (attributs, éléments et textes)

� Il s'agit d'un élément de type complexe qui peut contenir un mélange de sous éléments, d'attributs et de textes

� Pour utiliser du texte libre entre les différents éléments, l'attribut mixed de la balise complexType doît être à true

<letterBody><salutation> Dear Mr. <name>Robert Smith</name> . </salutation>Your order of <quantity>1</quantity> <productName>BabyMonitor</productName> shipped from our warehouse on<shipDate>1999-05-21</shipDate> . ....</letterBody>

<element name="letterBody"><complexType mixed="true" >

<sequence><element name="salutation">

<complexType mixed="true" ><sequence>

<element name="name" type="xsd:string"/></sequence>

</complexType></element><element name="quantity" type="positiveInteger"/>...

</xsd:sequence></xsd:complexType>

</xsd:element>

Du texte est défini entre les éléments et les sous éléments

Page 34: Schema XML

34Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Types complexes : complexContent

� Possibilité de définir un nouveau type complexe sur la base

d'un type complexe existant de manière à étendre ou à

restreindre les éléments

� Utilisation de la balise complexContent

� Exemple<complexType name="Address">

<sequence><element name="name" type="string" /><element name="street" type="string" /><element name="city" type="string" />

</sequence></complexType>

<complexType name="USAddress"><complexContent>

<extension base="tns:Address"><sequence>

<element name="state" type="string" /><element name="zip" type="string" />

</sequence></extension>

</complexContent></complexType>

Le type Address définit trois sous éléments en

séquence

Le type USAddresspropose une extension avec deux nouveaux sous éléments en séquence

Page 35: Schema XML

35Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Annotations

� L'annotation permet d'enrichir la description d'un Schema

XML pour les bénéfices des utilisateurs et d'outils d'analyse

� L'annotation est réalisée au travers de la balise annotation et

propose deux sous éléments (occurrences multiples)

� documentation : contient généralement une description relative à un

élément du Schema XML

� appinfo : est généralement utilisée pour enrichir la description du

Schema XML et exploitable par exemple par des outils de génération

� Le type de documentation et appinfo est anyType ce qui

permet de ne pas imposer de contraintes sur le contenu

Page 36: Schema XML

36Schema XML - M. Baron - Page

keul

keul

.blo

gspo

t.com

Annotations

� Exemple : utilisation de la balise annotation

<xs:element name="child"><xs:complexType>

<attribute name="remark" type="string" use="required "><annotation>

<documentation>Remarque pertinente concernant l'enf ant</documentation><appinfo><refAction>other</refAction></appinfo>

</annotation></attribute><attribute name="old" type="tns:ageTypeChild">

<annotation><documentation>Age de l'enfant compris entre 1 et 5 0 ans</documentation><appinfo><refAction>age</refAction></appinfo>

</annotation><attribute name="sexe" type="tns:sexeTypeChild">

<annotation><documentation>Sexe de l'enfant : homme, femme ou

indéterminé</documentation><appinfo><refAction>sexe</refAction></appinfo>

</annotation></xs:complexType>

</xs:element>

Chaque attribut de l'élément child est décoré d'une annotation

La balise appinfo donne des renseignements supplémentaires