0% ont trouvé ce document utile (0 vote)
26 vues19 pages

B4 - s2 - XML - Slides Schema

Transféré par

Ikram Kheffache
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
26 vues19 pages

B4 - s2 - XML - Slides Schema

Transféré par

Ikram Kheffache
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

XPath : conclusion

XPath est très puissant, un vrai langage de requêtes,


mais du coup:
difficile à maîtriser, car concis
très difficile à implémenter efficacement (prédicats)
La force:
utilisé de plus en plus par les outils
comme les expressions régulières: permet d'exprimer la
logique d'une action de façon portable entre langages
Danger: pour XPath, un "noeud" veut dire aussi bien
attribut qu'élément

33

XML Schema : introduction


Objectifs :
étendre le système des DTDs en introduisant des types plus
complexes,
séparation des types et de la structure,
une approche objet (héritage),
une syntaxe XML
support de la notion d’espaces de noms
La version 1.0 est propose par le consortium W3C
en 2001
La solution proposée est complexe.
Tous les analyseurs ne traitent pas les schemas

34

Page 17
XML Schema : introduction (2)

Format type d’un schéma


XSD est un document XML
Espace de nom privé Espace de nom public

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsd:schema
xmlns:xsd="[Link]
xmlns:mabiblio="[Link]
targetNamespace=[Link] version="
1.0" >
<!-- déclarations d'éléments, d'attributs et de types ici -->
</xsd:schema>

35

XML Schema : introduction (3)

<xsd:schema
xmlns:xsd=[Link] … /xsd>
Cela signifie que dans le document, tous les éléments
commençant par xsd sont référencés à cette URL de type
PUBLIC, où le schéma est... public.
Un schéma est en effet un document XML, et on trouve dans
son élément racine l'attribut. Si on a déposé un schéma à
l'adresse xmlns="[Link] on peut
l'appeler par :
<xsd:mabiblio xmlns="[Link]
"> ou
targetNamespace=[Link]

36

Page 18
XML Schema : introduction (4)

Lier un fichier xml à un schéma


Espace de nom public Espace de nom privé
ou location

<?xml version="1.0" encoding="ISO-8859-1"?>


< biblio
xmlns:xsi="[Link]
xmlns:xsi="[Link]
xsi:schemaLocation="[Link] Au choix
xsi:noNamespaceSchemaLocation= "[Link]"
autre_espace_de_noms
autre_URL_de_schema..." " >
...
</biblio>

37

XML Schema : introduction (5)

Dans le cas d'une référence locale (correspondant à une


DTD de type SYSTEM) on fait référence au schéma
dans le document XML en utilisant l'attribut
noNamespaceSchemaLocation, par
<biblio
xmlns:xsi="[Link]
xsi:noNamespaceSchemaLocation="[Link]"> …>
<biblio
xmlns:xsi="[Link]
xmlns:mabiblio="[Link]
xsi:SchemaLocation="[Link]

38

Page 19
XML Schema : déclaration des éléments

Deux manières :
Définir un élément à partir d'un type :
<xsd:element name="prix" type="typePrix" />
ou directement :
<xsl:element name="prix">
... definition du type ...
</xsd:element>
Les attributs font partie du type.

39

XML Schema : déclaration des éléments (2)


Définition depuis d’un type
<xsd:element
id="xsd:ID"
abstract = "xsd:boolean"
default="value"
fixed="xsd:string"
minOccurs="xsd:nonNegativeInteger"
maxOccurs="xsd:nonNegativeInteger|unbounded"
name="xsd:NCName"
ref="xsd:QName"
type="xsd:QName"
...
>
(xsd:annotation)
(xsd:simpleType|xsd:complexType)
</xsd:element>

40

Page 20
XML Schema : déclaration des attributs
Balise de définition d’un attribut
<xsd:attribute Remarque :
id="xsd:ID" La valeur par défaut doit être
default="value" conforme au type déclaré
fixed="xsd:string"
name="xsd:NCName" L’exemple :
ref="xsd:QName" <xsd:attribute
type="xsd:QName" name="maj"
use="optional|prohibited|required" type="xsd:date"
... use="optional"
> default="-43" />
(xsd:annotation)
(xsd:simpleType) provoquera une erreur de
</xsd:attributt> validation du schéma

41

XML Schema : déclaration des attributs (2)

DTD use default Commentaire

#REQUIRED required -

"blabla" #REQUIRED required blabla

#IMPLIED optional -

"blabla" #IMPLIED optional blabla

- prohibited - Cet attribut ne doit pas apparaître

42

Page 21
XML Schema :hiérarchie de types
xsd:anyType
| xsd:anySimpleType • Les types de base
| | xsd:string
| | | xsd:normalizedString a/ Les chaînes
| | | | xsd:token - xsl:string
| | | | | xsd:name
| | | | | | xsd:NCName - xsd:normalizedString
| | | | | | | xsd:ID
| | | | | | | xsd:IDREF
- xsd:token
| | | | | | | | xsd:IDREFS
| | | | | | | xsd:ENTITY
| | | | | | | | xsd:ENTITIES b/ Les données binaires :
| | | | | xsd:NMTOKEN - xsd:base64Binary
| | | | | | xsd:NMTOKENS
| | | | | xsd:langage - xsd:hexBinary
| | xsd:decimal
| | | xsd:integer
| | | | xsd:nonPositiveInteger c/ Les décimaux :
| | | | | xsd:NegativeInteger
| | | | xsd:nonNegativeInteger
- xsd:decimal
| | | | | xsd:PositiveInteger - xsd:float et xsd:double avec les
| | | | ... les longs ...
| | ... les durees ... infinis

43

XML Schema :les types de base (2)

d/ Les entiers : xsd:short


- xsd:integer xsd:unsignedShort (16 bits)
- xsd:positiveInteger xsd:byte
- xsd:negativeInteger xsd:unsignedByte (8 bits)
- xsd:nonNegativeInteger -xsd:boolean (true, false, 0, 1)
- xsd:nonPositiveInteger
-xsd:int e/ Date et durée :
-xsd:unsignedInt (32 bits) - xsd:time (HH :MM :[Link])
-xsd:long - xsd:date (YYYY-MM-DD)
-xsd:unsignedLong (64 bits) - xsd:dateTime (dateTtime)

44

Page 22
XML Schema : les types de base (3)
f/ Les noms :
- xsd:Name nom simple h/ Les données de DTD :
- xsd:QName nom qualifié - xsd:ENTITY
- xsd:anyURI - xsd:ENTITIES
- xsd:NOTATION
g/ Les clefs et les références : - xsd:NMTOKEN
- xsd:ID - xsd:NMTOKENS
- xsd:IDREF
- xsd:IDREFS

45

XML Schema : les types simple

Type simple (#PCDATA) :


provient de la restriction ou de l'extension d'un type de base :
<xsd:simpleType name="poids">
<xsd:restriction base="xsd:int">
<xsd:minInclusive value='100'/>
</xsd:restriction>
</xsd:simpleType>
Un type simple peut restreindre un autre type simple :
<xsd:simpleType name="poidsMoyen">
<xsd:restriction base="poids">
<xsd:minInclusive value='200'/>
</xsd:restriction>
</xsd:simpleType>

46

Page 23
XML Schema : les types simples - facettes
Les facettes sont des Exemple
restrictions de types simples : <xsd:attribute name="jour" type="typeJ
<xsd:minInclusive value='valeur'/> ourSemaine" use="required" />
<xsd:minExclusive value='valeur'/> <xsd:simpleType name="jourSemaine">
<xsd:maxInclusive value='valeur'/> <xsd:restriction base="xsd:string">
<xsd:maxExclusive value='valeur'/> <xsd:enumeration value="lundi" />
<xsd:enumeration value="mardi" />
<xsd:enumeration value="mercredi" />
Une énumération est possible <xsd:enumeration value="jeudi" />
<xsd:restriction base="xsd:string"> <xsd:enumeration value="vendredi" />
<xsd:enumeration value='rouge'/> <xsd:enumeration value="samedi" />
<xsd:enumeration value='noir'/> <xsd:enumeration value="dimanche" />
<xsd:enumeration value='bleu'/> </xsd:restriction>
</xsd:restriction> </xsd:simpleType>

47

XML Schema : les types simples - facettes (2)

on peut agir sur la forme :


<xsd:restriction base="xsd:string">
<xsd:pattern value='[dD][iI}[lL].*'/>
<xsd:maxLength value='20'/>
<xsd:minLength value='5'/>
</xsd:restriction>
La facette xsd:length est aussi disponible.
<xsd:restriction base="xsd:float">
<xsd:totalDigits value='8'/>
<xsd:fractionDigits value='5'/>
</xsd:restriction>

48

Page 24
XML Schema : les types simples - facettes (3)

finalement, nous pouvons contrôler les blancs :


<xsd:restriction base="xsd:string">
<xsd:whiteSpace value='collapse'/>
<xsd:minLength value='5'/>
</xsd:restriction>
« replace » change les tabulations et les retours
chariot en blancs.
« preserve » n'altère pas les blancs.

49

XML Schema : les types simples - extensions

Liste de valeurs :
<xsd:simpleType name="listeAges">
<xsd:list itemType="age"/>
</xsd:simpleType>
Union de valeurs :
<xsd:simpleType name="ageInconnu">
<xsd:union memberTypes="age ">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value='inconnu'/>
</xsd:restriction>
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>

50

Page 25
XML Schema : les types complexes

Un élément de type "complexe " peut contenir de


sous-élément.
On peut alors déclarer :
des séquences d'éléments, d’attributs ou les deux
des types de choix ou
des contraintes d'occurences

51

XML Schema : les types complexes (2)


Élément Sequence :
permettant d'indiquer un contenu ordonné et éventuellement
répéte.
On utilise pour ce faire l'élément xsd:sequence, qui reproduit
des expressions du langage DTD

Syntaxe :
<xsd:sequence
id="xsd:ID"
minOccurs="xsd:nonNegativeInteger" 1
maxOccurs="xsd:nonNegativeInteger|unbounded" 1 >
(xsd:annotation?)
(xsd:element|xsd:group|xsd:choice|xsd:sequence|xsd:any)*
</xsd:sequence>

52

Page 26
XML Schema : les types complexes (3)

Exemple de séquences
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nom" type="xsd:string" />
<xsd:element name="prénom" type="xsd:string" />
<xsd:element name="dateDeNaissance" type="xsd:date" />
<xsd:element name="adresse" type="xsd:string" />
<xsd:element name="adresseElectronique" type="xsd:string" />
<xsd:element name="téléphone" type="numéroDeTéléphone" />
</xsd:sequence>
</xsd:complexType>
une déclaration d'élément équivalent pourrait être faite avec
un typage faible, dans une DTD, où apparaîtrait
(nom, prénom, dateDeNaissance, adresse,
adresseElectronique, téléphone)

53

XML Schema : les types complexes (4)

Élément « choice »:
L‘élément xsd:choice permet d'exprimer un contenu
alternatif et éventuellement répéte.
Syntaxe :
<xsd:choice
id="xsd:ID" ?
minOccurs="xsd:nonNegativeInteger" 1
maxOccurs="xsd:nonNegativeInteger|unbounded" 1 >
(xsd:annotation?)
(xsd:element|xsd:group|xsd:choice|xsd:sequence|xsd:any)*
</xsd:choice>

54

Page 27
XML Schema : les types complexes (5)

Exemple de l’élément « choice »


<xsd:complexType name="typePersonne">
<sequence>
<xsd:element name="nom" type="xsd:string" />
<xsd:element name="prénom" type="xsd:string" />
<xsd:element name="dateDeNaissance" type="xsd:date" />
<xsd:choice>
<xsd:element name="adresse" type="xsd:string" />
<xsd:element name="adresseElectronique" type="xsd:string" />
</xsd:choice>
<xsd:element name="téléphone" type="numéroDeTéléphone" />
</sequence>
</xsd:complexType>

55

XML Schema : les types complexes (6)

Élément « all » : Syntaxe


L‘élément xsd:all permet
<xsd:all
d'indiquer une suite
d‘éléments sans préciser id="xsd:ID" ?
l'ordre d'apparition.
minOccurs="0|1" 1
Cet élément xsd:all doit
être un enfant direct de maxOccurs="1" >
l'élément (xsd:annotation?)
xsd:complexType
Cet élément est une (xsd:element*)
nouveauté par rapport aux </xsd:all>
DTD

56

Page 28
XML Schema : les types complexes (7)

Exemple de « all » :
<xsd:complexType>
<xsd:all>
<xsd:element name="nom" type="xsd:string" />
<xsd:element name="prénom" type="xsd:string" />
<xsd:element name="dateDeNaissance" type="xsd:date" />
<xsd:element name="adresse" type="xsd:string" />
<xsd:element name="adresseElectronique" type="xsd:string" />
<xsd:element name="téléphone" type="numéroDeTéléphone" />
</xsd:all>
</xsd:complexType>

indique que chacun de ces éléments peut apparaître une


fois ou pas du tout (équivalent de l'opérateur ? dans une
DTD), et que l'ordre des éléments n'a pas d'importance (cela
n'a pas d'équivalent dans une DTD)

57

XML Schema : les types complexes (8)

Groupage :
L‘élément xsd:group permet de regrouper un contenu complexe
Syntaxe
<xsd:group
name="xsd:NCName" ?
ref="xsd:NCName" ?
minOccurs="xsd:nonNegativeInteger" 1
maxOccurs="xsd:nonNegativeInteger|unbounded" 1 >
(xsd:annotation?)
(xsd:all|xsd:choice|xsd:sequence)
</xsd:group>

58

Page 29
XML Schema : les types complexes (9)

Modèle lible « any »: tout Syntaxe


type d’éléments <xsd:any
Pour décrire un choix multiple id="xsd:ID" ?
de types minOccurs="xsd:nonNegativeInte
##any : tous les éléments ger" 1
##other : éléments hors de maxOccurs="xsd:nonNegativeInte
l'espace de noms cible ger|unbounded" 1
##targetNamespace : namespace="##any | ##other |
éléments de l'espace de noms xsd:anyURI*
cible ##targetNamespace?
##local : éléments sans ##local?"
espace de noms processContents="lax|skip|strict"
strict : déclaration et validation, strict >
skip : pas de validation, (xsd:annotation?)
lax : validation si déclaration </xsd:any>

59

XML Schema : les types complexes (10)

Type complexe à partir des types simples


Par restriction ou extension des types simples
Syntaxe
<xsd:complexType ... >
(xsd:annotation?)
<xsd:simpleContent>
(xsd:annotation?)
xsd:restriction ou xsd:extension
</xsd:simpleContent>
</xsd:complexType>

60

Page 30
XML Schema : les types complexes (11)
Exemple de restriction
<xsd:simpleType name="monEntier">
<xsd:restriction base="nonNegativeInteger">
<xsd:maxExclusive value="100" />
</xsd:restriction>
</xsd:simpleType>

61

XML Schema : les types complexes (12)

Type complexe à partir des types simples


Par extension d'un type simple :
Syntaxe
<xsd:extension
id="xsd:ID" ?
base="xsd:QName"
>
(xsd:annotation?)
... definitions des attributs ...
</xsd:complexType>

62

Page 31
XML Schema : les types complexes (13)

Exemple : type complexe depuis d’un type simple


<xsd:complexType name="typePoids">
<xsd:simpleContent>
<xsd:extension base="xsd:positiveInteger">
<xsd:attribute name="unite" type="xsd:string" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
On a dérivé un type complexe à partir du type simple
positiveInteger
L'élément <xsd:simpleContent indique que le nouvel
élément ne contient pas de sous-élément

63

XML Schema : les types complexes (14)


Définition d’ type Syntaxe
complexe par dérivation <xsd:complexType ... >
d’un autre type complexe (xsd:annotation?)
On peut denir un contenu <xsd:complexContent
complexe en appliquant une mixed="xsd:boolean" >
extension ou une restriction (xsd:annotation?)
a un autre type complexe
(xsd:restriction|xsd:extension)
La valeur de l'attribut
</xsd:complexContent>
« mixed » doit être
cohérente avec celle définie </xsd:complexType>
dans le type complexe

64

Page 32
XML Schema : les types complexes (15)
Extension d’un type Restriction d'un type
complexe complexe
<xsd:extension <xsd:restriction
id="xsd:ID" ? id="xsd:ID" ?
base="xsd:QName" base="xsd:QName"
> >
(xsd:annotation?) (xsd:annotation?)
(xsd:group|xsd:all|xsd:choice|x (xsd:group|xsd:all|xsd:choice|x
sd:sequence)? sd:sequence)?
... definitions des attributs ... ... definitions des attributs ...
</xsd:complexType> </xsd:complexType>

65

XML Schema : les types complexes (16)


Indicateurs des occurrences
Dans une DTD, un indicateur d'occurence ne peut prendre que les
valeurs 0, 1 ou l'infini.
XML Schema permet de déclarer directement une telle occurence, car
tout nombre entier non négatif peut être utilisé.

Dans une DTD Valeur de minOccurs Valeur de maxOccurs

* 0 Unbounded (illimté)

+ 1 (pas nécessaire, valeur par défaut) unbounded

? 0 1 (pas nécessaire, valeur par défaut)

rien 1 (pas nécessaire, valeur par défaut) 1 (pas nécessaire, valeur par défaut)

66

Page 33
XML Schema : Autres fonctionnalités

Inclusion des schémas


<xsd:include schemaLocation="[Link]
/nlt/schemas/[Link]" />
Il s'agit d'une sorte de "copier-coller" du contenu
de la bibliographie dans le schéma en cours
d'écriture.
La seule condition est que le targetNameSpace
soit le même dans le Schema XML inclus et dans le
Schema XML importateur

67

XML Schema : Autres fonctionnalités(2)


Documentation (annotation)
Par commentaires comme d’autres document xml
Par éléments xsd:documentation pour la
documentation à l'intention des lecteurs humains
Par éléments xsd:appinfo pour les informations à
l'intention de programmes
Ces deux éléments doivent être placés dans un
élément xsd:annotation qui dispose d'attributs
optionnels : xml:lang et source
Les élémenst xsd:annotation peuvent être ajoutés au
début de la plupart des constructions

68

Page 34
XML Schema : Autres fonctionnalités(3)

Attribut « null »
pour indiquer explicitement qu'un élément est non renseigné
plutôt que d'omettre cet élément.
XML Schema intègre un mécanisme similaire que celui de
SGBDR permettant d'indiquer qu'un élément peut être non
renseigné.
Exemple :
<personne>
<nom>Jean Dupont</nom>
<courriel xsi:null></courriel>
</personne>
Cet attribut doit toujours être préfixé par xsi.
L'élément portant cet attribut, peut contenir d'autres
attributs, mais pas de sous-élément

69

Page 35

Vous aimerez peut-être aussi