1 cours 5 introduction aux schémas xml Éric laporte institut gaspard-monge université paris-est...

70
1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la- Vallée

Upload: odile-le-floch

Post on 03-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

1

Cours 5Introduction aux schémas XML

Éric Laporte

Institut Gaspard-Monge

Université Paris-Est Marne-la-Vallée

Page 2: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

2

Sommaire

Grammaires pour les documents XML 4

Schéma pour une collection d'entrées 8

Validateurs 17

Attributs 18

Types simples 25

Référence à un schéma 41

Inclure des éléments spécifiés dans d'autres schémas 45

Schémas pour documents sans espaces de noms 56

Documents à structure complexe 61

Page 3: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

3

• Des grammaires en XML• Une DTD• Un schéma XML• DTD ou schéma XML ?• Un premier schéma (1/4)• Un premier schéma (2/4)• Un premier schéma (3/4)• Un premier schéma (4/4)• Espaces de noms (1/2)• Espaces de noms (2/2)• Déclaration et référence• Types (1/2)• Types (2/2)• Validateurs• Déclarer un attribut (1/3)• Déclarer un attribut (2/3)• Déclarer un attribut (3/3)• Attribut sur un type simple (1/4)• Attribut sur un type simple (2/4)• Attribut sur un type simple (3/4)• Attribut sur un type simple (4/4)• Types simples• Types simples prédéfinis (1/5)• Types simples prédéfinis (2/5)• Types simples prédéfinis (3/5)• Types simples prédéfinis (4/5)• Types simples prédéfinis (5/5)• Liste balisée• Types simples dérivés : restriction• Restriction par <s:pattern>• Restriction par énumération• Restriction par <s:whitespace>• Autres restrictions de types simples

37. Types simples dérivés : liste

38. Types simples dérivés : union (1/)

39. Types simples dérivés : union (2/)

40. Dérivations de types

41. Référence à un schéma XML (1/2)

42. Référence à un schéma XML (2/2)

43. Référence à plusieurs schémas XML

44. Annoter un schéma

45. Inclure des éléments spécifiés dans d'autres schémas

46. Solution avec s:import (1/2)

47. Solution avec s:import (2/2)

48. Solution avec s:any (1/2)

49. Solution avec s:any (2/2)

50. Variantes

51. <s:anyAttribute>

52. Schémas partiels (1/2)

53. Schémas partiels (2/2)

54. Inclure des noeuds texte (1/2)

55. Inclure des noeuds texte (2/2)

56. Schéma d'un document cible sans espace de noms (1/2)

57. Schéma d'un document cible sans espace de noms (2/2)

58. Document cible partiel (1/2)

59. Document cible partiel (2/2)

60. Schéma pour plusieurs types de documents

61. Types complexes (1/3)

62. Types complexes (2/3)

63. Types complexes (3/3)

64. <s:choice>

65. <s:all> (1/6)

66. <s:all> (2/6)

67. <s:all> (3/6)

68. <s:all> (4/6)

69. <s:all> (5/6)

70. <s:all> (6/6)

Page 4: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

4

Des grammaires en XML

Chaque type de document XML a sa syntaxe

XHTML, XSLFO, XSLT, CML... et on peut en définir de nouveaux

Grammaire

Définit la syntaxe d'un type de document

Exemple : DTD

Grammaire en XML : schéma XML

Un document est valide par rapport à une grammaire s'il respecte les contraintes en plus d'être bien formé

Page 5: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

5

Une DTD

<!ENTITY % Text "(#PCDATA|i|citation|liste)*"><!ELEMENT i (#PCDATA|i)*><!ELEMENT p %Text;><!ELEMENT liste (entree*)><!ELEMENT entree %Text;><!ELEMENT filmographie (resumes, aliases, perso, roles) ><!ELEMENT resumes (resume*)><!ELEMENT resume %Text;><!ATTLIST resume filmref ID #REQUIRED realisateur CDATA #REQUIRED img CDATA #IMPLIED pdf CDATA #IMPLIED><!ELEMENT aliases (alias*)>(...)

Page 6: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

6

Un schéma XML

<?xml version="1.0" encoding="ISO-8859-1" ?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:simpleType name="stringtype"> <xs:restriction base="xs:string"/></xs:simpleType><xs:complexType name="shiptotype"> <xs:sequence> <xs:element name="name" type="stringtype"/> <xs:element name="address" type="stringtype"/> <xs:element name="city" type="stringtype"/> <xs:element name="country" type="stringtype"/> </xs:sequence></xs:complexType>(...)<xs:element name="shiporder" type="shipordertype"/></xs:schema>

Page 7: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

7

DTD ou schéma XML ?

DTDFormat très utiliséRelativement lisibleGrammaire en SGML (ancien concurrent de XML)Compatible avec XML

Schéma XMLGrammaire en XMLPermet d'engendrer du code JavaVersion simplifiée : Relax NGPossibilités de contrôle strict (ex. : entier entre 1 et 10)

Page 8: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

8

Un premier schéma (1/4)

Une collection d'entrées avec des champs simples

<?xml version="1.0" encoding="utf-8"?><Tracks xmlns="http://igm.univ-mlv.fr/~laporte/audio"> <Track> <Track_ID>37</Track_ID> <Name>American Beauty - Theme</Name> <Artist>Air</Artist> <Album>american beauty soundtrack</Album> <Kind>MPEG audio file</Kind> <Size>3948579</Size> <Total_Time>197407</Total_Time> <Date_Modified>2004-07-19T15:24:23Z</Date_Modified> <Date_Added>2004-07-20T14:09:55Z</Date_Added> <Bit_Rate>160</Bit_Rate> <Sample_Rate>44100</Sample_Rate>

Page 9: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

9

Un premier schéma (2/4)

Schéma correspondant

<?xml version="1.0" encoding="UTF-8"?><!-- collectionEntrees.xsd --><s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://igm.univ-mlv.fr/~laporte/audio" xmlns:aud="http://igm.univ-mlv.fr/~laporte/audio"> <s:element name="Tracks"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" ref="aud:Track"/> </s:sequence> </s:complexType> </s:element>

Page 10: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

10

Un premier schéma (3/4)

<s:element name="Track"> <s:complexType> <s:sequence> <s:element ref="aud:Track_ID"/> <s:element ref="aud:Name"/> <s:element ref="aud:Artist"/> <s:element minOccurs="0" ref="aud:Composer"/>(...) <s:element ref="aud:File_Folder_Count"/> <s:element ref="aud:Library_Folder_Count"/> </s:sequence> </s:complexType> </s:element>

Page 11: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

11

Un premier schéma (4/4)

<s:element name="Track_ID" type="s:integer"/> <s:element name="Name" type="s:string"/> <s:element name="Artist" type="s:string"/> <s:element name="Composer" type="s:string"/>(...) <s:element name="Date_Modified" type="s:dateTime"/> <s:element name="Date_Added" type="s:dateTime"/>(...) <s:element name="File_Folder_Count" type="s:integer"/> <s:element name="Library_Folder_Count" type="s:integer"/></s:schema>

Page 12: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

12

Espaces de noms (1/2)

- du schéma XML déclaré ici avec le préfixe s- du document XML cible : c'est l'espace de noms des éléments

du document cible décrits par le schémaOn l'appelle l'espace de noms cible du schéma XMLOn le déclarer dans le schéma XML deux fois : avec

targetNameSpace et avec xmlns et un préfixe

<!-- collectionEntrees.xsd --><s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://igm.univ-mlv.fr/~laporte/audio" xmlns:aud="http://igm.univ-mlv.fr/~laporte/audio"> <s:element name="Tracks">

Page 13: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

13

Espaces de noms (2/2)

Les éléments déclarés par <s:element name="..."> fils de <s:schema> appartiennent automatiquement à l'espace de noms cible : pas de préfixe dans la déclaration

En cas de référence à une déclaration, utiliser le préfixeIl faut donc déclarer l'espace de noms cible avec un préfixe

<!-- collectionEntrees.xsd --><s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://igm.univ-mlv.fr/~laporte/audio" xmlns:aud="http://igm.univ-mlv.fr/~laporte/audio"> <s:element name="Tracks"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" ref="aud:Track"/> </s:sequence>

Page 14: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

14

Déclaration et référence

On peut faire référence à un nom d'élément avant de le déclarer

<s:element name="Tracks"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" ref="aud:Track"/> </s:sequence> </s:complexType> </s:element> <s:element name="Track"> <s:complexType> <s:sequence> <s:element ref="aud:Track_ID"/> <s:element ref="aud:Name"/>

Page 15: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

15

Types (1/2)

Décrivent les contenus possibles d'un élément ou d'un attribut<s:complexType> <s:sequence>

séquence d'éléments dans un ordre fixePar défaut, minOccurs et maxOccurs valent 1

<s:element name="Tracks"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" ref="aud:Track"/> </s:sequence> </s:complexType> </s:element>

Page 16: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

16

Types (2/2)

type="s:integer" un noeud texte contenant un entiertype="s:string" un noeud texte quelconquetype="s:dateTime" date et heure au format ISO

<s:element name="Track_ID" type="s:integer"/> <s:element name="Name" type="s:string"/>(...) <s:element name="Date_Modified" type="s:dateTime"/>

<Track> <Track_ID>37</Track_ID> <Name>American Beauty - Theme</Name>(...) <Date_Modified>2004-07-19T15:24:23Z</Date_Modified>

Page 17: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

17

Validateurs

Validateur du W3Chttp://www.w3.org/2001/03/webdata/xsvSi l'élément racine du document cible ne correspond à aucune

déclaration globale (fille de s:schema), le validateur ne vérifie pas la syntaxe et produit le message :

No declaration for document root found, validation was laxExemple : le nom de l'élément racine correspond, mais pas

l'espace de noms

Autres validateursPas toujours aussi fiables que celui du W3CAltova : message moins trompeur

The element declaration was not found for root element

Page 18: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

18

Déclarer un attribut (1/3)

On veut que l'élément Track puisse avoir un attribut (sans espace de noms)

<?xml version="1.0" encoding="ISO-8859-1"?><Tracks xmlns="http://igm.univ-mlv.fr/~laporte/audio"> <Track large="false"> <Track_ID>37</Track_ID> <Name>American Beauty - Theme</Name> <Artist>Air</Artist> <Album>american beauty soundtrack</Album> <Kind>MPEG audio file</Kind> <Size>3948579</Size> <Total_Time>197407</Total_Time>

Page 19: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

19

Déclarer un attribut (2/3)Le nom est déclaré sans préfixeDéclaration localeLes attributs doivent être déclarés après le contenu

<s:element name="Track"> <s:complexType> <s:sequence> <s:element ref="aud:Track_ID"/> <s:element ref="aud:Name"/>(...) <s:element ref="aud:Library_Folder_Count"/> </s:sequence> <s:attribute name="large" type="s:boolean"/> </s:complexType> </s:element>

Page 20: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

20

Déclarer un attribut (3/3)

type="s:boolean" true, false, 1, 0

Pour que l'attribut soit obligatoire<s:attribute name="large" type="s:boolean" use="required"/>Par défaut, use="optional"

Pour imposer une valeur<s:attribute name="unit" type="s:string" fixed="euro"/>Si l'attribut est présent, sa valeur doit être "euro"Même possibilité pour les éléments :<s:element name="jr:unit" type="s:string" fixed="euro"/>

Page 21: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

21

Attribut sur un type simple (1/4)

<?xml version="1.0" encoding="ISO-8859-1"?><!-- plantCatalogNS.xml --><CATALOG xmlns="http://igm.univ-mlv.fr/~laporte/jardinerie">

<PLANT> <COMMON>Bloodroot</COMMON> <BOTANICAL>Sanguinaria canadensis</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE unit="euro">2.44</PRICE> <AVAILABILITY>031599</AVAILABILITY>

</PLANT> <PLANT>

<COMMON>Columbine</COMMON>

Page 22: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

22

Attribut sur un type simple (2/4)

<s:element name="PLANT"> <s:complexType> <s:sequence> <s:element ref="jr:COMMON"/> <s:element ref="jr:BOTANICAL"/> <s:element ref="jr:ZONE"/> <s:element ref="jr:LIGHT"/> <s:element ref="jr:PRICE"/> <s:element ref="jr:AVAILABILITY"/> </s:sequence> </s:complexType> </s:element> <s:element name="COMMON" type="s:string"/>

Page 23: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

23

Attribut sur un type simple (3/4)

<s:element name="BOTANICAL" type="s:string"/> <s:element name="ZONE" type="s:string"/> <s:element name="LIGHT" type="s:string"/> <s:element name="PRICE"> <s:complexType> <s:simpleContent> <s:extension base="s:decimal"> <s:attribute name="unit" type="s:string" use="required"/> </s:extension> </s:simpleContent> </s:complexType> </s:element> <s:element name="AVAILABILITY" type="s:integer"/></s:schema>

Page 24: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

24

Attribut sur un type simple (4/4)

type="s:decimal" un noeud texte contenant un nombre en notation décimale (avec point : 2.44)

<s:extension base="s:decimal"> : décrit les valeurs du noeud texte sous l'élément PRICE

<s:element name="PRICE"> <s:complexType> <s:simpleContent> <s:extension base="s:decimal"> <s:attribute name="unit" type="s:string"

use="required"/>

Page 25: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

25

Types simples

Pour les noeuds qui contiennent du texte sans balises- un noeud de type texte- une valeur d'attribut

type="s:string" un noeud texte quelconque <s:element name="Name" type="s:string"/> <Name>American Beauty - Theme</Name>

Page 26: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

26

Types simples prédéfinis (1/5)

type="s:boolean" true, false, 1, 0type="s:integer" 0, 15, -4, +15type="s:decimal" 2.44, 15, -2.4, +3.1416type="s:float" 6.02214199E23Autres types numériques : double, long, short, int, byte...

type="s:dateTime" 2004-07-19T11:34:46Ztype="s:date" 2004-07-19type="s:time" 11:34:46Ztype="s:gYear" 2008 (dans le calendrier grégorien)type="s:gMonthDay" --09-26 (tous les 26 septembre)

Page 27: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

27

Types simples prédéfinis (2/5)

Normalisation<s:attribute name="unit" type="s:string" fixed="euro"/><s:element name="jr:unit" type="s:string" fixed="euro"/>Les validateurs comparent la valeur trouvée dans le document

avec la valeur imposée par le schémaLes validateurs normalisent certains types avant comparaison

Exemple : s:token <Kind unit=" MPEG audio file "> <s:attribute name="Kind" type="s:token" fixed="MPEG audio file"/>Le document est valide

Page 28: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

28

Types simples prédéfinis (3/5)

Normalisation

type="s:string" pas de normalisationtype="s:token" normalisation : remplacer toute suite de

caractères blancs par 1 espace, et supprimer les espaces au début et à la fin

type="s:boolean" true = 1, false = 0type="s:integer" 15 = +15type="s:decimal" 2.44 = +02.40

Page 29: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

29

Types simples prédéfinis (4/5)

Autres types texte normalisés

type="s:NMTOKEN" Lettres, chiffres, [-_.:], mais pas d'espaces blancs

type="s:Name" Même chose mais commence par une lettre ou [_:]

type="s:QName" Comme Name avec au plus un [:]type="s:NCName" Comme Name mais sans [:]type="s:ID" Comme NCName mais unique

dans le documentLe validateur supprime les espaces au début et à la fin avant de

comparer

Page 30: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

30

Types simples prédéfinis (5/5)

Types listes prédéfinis : NMTOKENS...

Les chaînes de caractères sont séparées par des espaces

<genres>Eschscholzia Papaver Sanguinaria</genres>

<s:element name="genres" type="s:NMTOKENS"/>

Les types listes prédéfinis font concurrence à des listes balisées

Page 31: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

31

Liste balisée

<genres><genre>Eschscholzia</genre><genre>Papaver</genre><genre>Sanguinaria</genre>

</genres>

<s:element name="genres"> <s:complexType> <s:sequence> <s:element maxOccurs="unbounded" ref="jr:genre"/> </s:sequence> </s:complexType></s:element><s:element name="genre" type="s:NMTOKEN"/>

Page 32: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

32

Types simples dérivés : restriction

<s:element name="AVAILABILITY"> <s:simpleType> <s:restriction base="s:integer"> <s:pattern value="[01][0-9][0-3][0-9][0-9][0-9]"/> <s:minInclusive value="010100"/> <s:maxInclusive value="123199"/> </s:restriction> </s:simpleType> </s:element>

<PRICE unit="euro">2.44</PRICE> <AVAILABILITY>031599</AVAILABILITY>

</PLANT>

Restriction : le type dérivé est inclus dans le type de base

Page 33: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

33

Restriction par <s:pattern>

<s:pattern value=".*0"> <!-- multiples de 10 -->Caractères spéciaux \ | . - ^ ? * + { } ( ) [ ]Classes de caractères Unicode\p{L} lettres \P{L} tout sauf les lettres\p{Lu} lettres majuscules \P{Lu}\p{IsBasicLatin} alphabet latin de baseCes codes sont utilisables à l'intérieur des [ ]Classes de caractères Perl\s espace, tabulation, fin de ligne \S autres car.\d chiffres de tous les alphabets \D autres car.

Page 34: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

34

Restriction par énumération

<Track> <Track_ID>38</Track_ID> <Name>All I Need</Name> <Artist>Air</Artist> <Album>Moon Safari</Album> <Genre>Pop</Genre>

<s:element name="Genre"> <s:simpleType> <s:restriction base="s:token"> <s:enumeration value="Pop"/> <s:enumeration value="Rock"/> <s:enumeration value="Rap"/>(...) </s:restriction> </s:simpleType> </s:element>

Page 35: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

35

Restriction par <s:whitespace>

Spécifie le traitement des caractères blancs à effectuer pour normaliser avant comparaison

<s:whitespace value="replace">chaque caractère blanc est remplacé par un espace

<s:whitespace value="preserve">pas de traitement avant validation

<s:whitespace value="collapse">comme la normalisation en XSLT

Page 36: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

36

Autres restrictions de types simples

minExclusivemaxExclusivelengthmaxLengthminLengthtotalDigits (évalué sur la valeur logique)...

Page 37: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

37

Types simples dérivés : liste

<genres>Eschscholzia Papaver Sanguinaria</genres>

<s:element name="genres"> <s:simpleType> <s:list itemType="s:NCName"/> </s:simpleType> </s:element>

Les chaînes de caractères sont séparées par des espaces

Page 38: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

38

Types simples dérivés : union (1/)

Les éléments ZONE dans le catalogue de plantes contiennent des chaînes de types divers

<ZONE>Annual</ZONE>(...)

<ZONE>4</ZONE>(...)

<ZONE>3 - 5</ZONE>

<s:element name="ZONE"> <s:simpleType> <s:union> <s:simpleType> <s:restriction base="s:NCName"/> <!-- ex. : "Annual" --

> </s:simpleType>

Page 39: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

39

Types simples dérivés : union (2/)

<s:simpleType> <s:restriction base="s:integer"/> </s:simpleType> <!-- en fait, pas de restriction --> <s:simpleType> <s:restriction base="s:token"> <s:pattern value="[0-9]+ [-] [0-9]+"/> <!-- ex : "3 - 5" --

> </s:restriction> </s:simpleType> </s:union> </s:simpleType> </s:element>

La seule façon d'inclure un type simple prédéfini dans une union est d'utiliser <s:simpleType> et <s:restriction base="..."/>

Page 40: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

40

Dérivations de types

extension (attributs)

restriction,

liste, union

s:simpleType

s:complexTypes:simpleContent

Page 41: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

41

Référence à un schéma XML (1/2)

Les applications qui traitent le document cible doivent pouvoir le valider par rapport à un schéma

Exemple : le validateur du W3C

<?xml version="1.0" encoding="utf-8"?><Tracks xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://igm.univ-mlv.fr/~laporte/audio http://igm.univ-mlv.fr/~laporte/xml/schema/collectionGenres.xsd" xmlns="http://igm.univ-mlv.fr/~laporte/audio"> <Track> <Track_ID>37</Track_ID> <Name>American Beauty - Theme</Name> <Artist>Air</Artist> <Album>american beauty soundtrack</Album> <Kind> MPEG audio file </Kind> <Size>3948579</Size>

Page 42: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

42

Référence à un schéma XML (2/2)

L'espace de noms xsi spécifie des attributs utilisables dans les documents cibles

La référence au schéma se fait par une valeur d'attribut qui contient d'abord l'espace de noms cible, puis l'URL du schéma séparée par un espace

<?xml version="1.0" encoding="utf-8"?><Tracks xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://igm.univ-mlv.fr/~laporte/audio http://igm.univ-mlv.fr/~laporte/xml/schema/collectionGenres.xsd" xmlns="http://igm.univ-mlv.fr/~laporte/audio"> <Track>

Page 43: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

43

Référence à plusieurs schémas XML

On peut faire référence à n schémas indépendantsLa valeur d'attribut contient 2n chaînes séparées par des

espacesLe document cible doit être valide par rapport à chaque

schéma indépendamment

xsi:schemaLocation="espace-de-noms-1 URL-1.xsdespace-de-noms-2URL-2.xsd"

xmlns="espace-de-noms-1" xmlns:en2="espace-de-noms-2">

Page 44: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

44

Annoter un schéma

Inclure un commentaire structuré

<?xml version="1.0" encoding="UTF-8"?><s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://igm.univ-mlv.fr/~laporte/audio" xmlns:aud="http://igm.univ-mlv.fr/~laporte/audio"> <s:annotation> <s:documentation xmlns="http://www.w3.org/1999/xhtml"> <h2>pistes.xsd</h2> <p>Schema XML pour liste de pistes audio</p> </s:documentation> </s:annotation> <s:element name="Tracks"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" ref="aud:Track"/>

Page 45: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

45

Inclure des élémentsspécifiés dans d'autres schémas

Insérer des parties en XHTML dans le catalogue de plantes

<PLANT family="Ranunculaceae">

<COMMON>Anemone</COMMON>

...

<AVAILABILITY>122698</AVAILABILITY>

<xh:div>

<xh:img src="http://.../images/chargimages/121.jpg"

alt="Anemone blanda"/>

Bulbe rustique de la famille des renonculacées<xh:br/><xh:br/>

FEUILLAGE : Feuilles très lobées vert foncé semi érigées<xh:br/>

Le document a deux espaces de noms et deux schémas

Page 46: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

46

Solution avec s:import (1/2)

L'espace de noms principal du document est celui de l'élément racine

Le schéma principal est le schéma correspondantIl importe les autres schémas

<?xml version="1.0" encoding="UTF-8"?><!-- plusieursEN.xsd --><s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://igm.univ-mlv.fr/~laporte/jardinerie" xmlns:jr="http://igm.univ-mlv.fr/~laporte/jardinerie" xmlns:xh="http://www.w3.org/1999/xhtml"> <s:import namespace="http://www.w3.org/1999/xhtml" schemaLocation="http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd"/> <s:element name="CATALOG"> <s:complexType>

Page 47: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

47

Solution avec s:import (2/2)

<s:element name="PLANT"> <s:complexType> <s:sequence> <s:element ref="jr:COMMON"/>(...) <s:element ref="jr:AVAILABILITY"/> <s:element ref="xh:div" minOccurs="0"/> </s:sequence> <s:attribute name="family" type="s:NCName"/> </s:complexType> </s:element>

Déclarer des préfixes pour les espaces de nomsException : l'espace de noms xml, inutile de le déclarer

<s:attribute ref="xml:lang"/>

Page 48: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

48

Solution avec s:any (1/2)

Le document cible fait référence aux deux schémasCelui qui correspond à l'élément racine et à son espace de noms

s'applique en premier

<?xml version="1.0" encoding="ISO-8859-1"?><!-- plantCatalogTextAny.xml --><CATALOG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://igm.univ-mlv.fr/~laporte/jardinerie http://igm.univ-mlv.fr/~laporte/xml/schema/plusieursEN-any.xsd http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd" xmlns="http://igm.univ-mlv.fr/~laporte/jardinerie" xmlns:xh="http://www.w3.org/1999/xhtml">

<PLANT family="Papaveraceae">

Page 49: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

49

Solution avec s:any (2/2)

Le schéma qui s'applique en premier appelle l'autre par s:anys:any ne spécifie pas quel élément peut apparaître

<s:element name="PLANT"> <s:complexType> <s:sequence> <s:element ref="jr:COMMON"/>(...) <s:element ref="jr:AVAILABILITY"/> <s:any namespace="http://www.w3.org/1999/xhtml" minOccurs="0"/> </s:sequence> <s:attribute name="family" type="s:NCName"/> </s:complexType> </s:element>

Page 50: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

50

Variantes

<s:any namespace="##other"/>Le validateur accepte tout espace de noms autre que l'espace de

noms cible, et valide par rapport au schéma correspondant

<s:any namespace="##any"/> ou <s:any/>Le validateur accepte n'importe quel espace de noms (défaut)

<s:any namespace="http://www.w3.org/1999/xhtml" process-contents="lax"/>Le validateur valide seulement si le schéma correspondant à

l'espace de noms est disponible

<s:any process-contents="skip"/>Le validateur saute cette partie

Page 51: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

51

<s:anyAttribute>

Permettre n'importe quels attributs

<s:element name="PLANT"> <s:complexType> <s:sequence> <s:element ref="jr:COMMON"/>(...) <s:element ref="jr:AVAILABILITY"/> </s:sequence> <s:anyAttribute processContents="skip"/> </s:complexType> </s:element>

Page 52: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

52

Schémas partiels (1/2)

Laisser des parties non spécifiées

<PLANT family="Ranunculaceae">

<COMMON>Anemone</COMMON>

...

<AVAILABILITY>122698</AVAILABILITY>

<PRESENTATION>

<xh:div>

<xh:img src="http://.../images/chargimages/121.jpg"

alt="Anemone blanda"/>

Bulbe rustique de la famille des renonculacées<xh:br/><xh:br/>

FEUILLAGE : Feuilles très lobées vert foncé semi érigées<xh:br/>

Page 53: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

53

Schémas partiels (2/2)

Déclarer un élément sans typeLe validateur saute le contenu de cet élément

<s:element name="PLANT"> <s:complexType> <s:sequence> <s:element ref="jr:COMMON"/>(...) <s:element ref="jr:AVAILABILITY"/> <s:element ref="jr:PRESENTATION" minOccurs="0"/> </s:sequence> <s:attribute name="family" type="s:NCName"/> </s:complexType>(...) <s:element name="PRESENTATION"/>

Page 54: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

54

Inclure des noeuds texte (1/2)

Les plantes contiennent du texte de présentation non structuré

<PLANT family="Ranunculaceae"> <COMMON>Anemone</COMMON> <BOTANICAL>Anemone blanda</BOTANICAL> <ZONE>6</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE unit="dollar">8.86</PRICE> <AVAILABILITY>122698</AVAILABILITY>

Bulbe rustique de la famille des renonculacées. FEUILLAGE : Feuilles très lobées vert foncé semi érigées HAUTEUR : 10 cm FLORAISON : Solitaire, dressée , en coupe aplatie au printemps SOL : Ordinaire bien drainé

Page 55: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

55

Inclure des noeuds texte (2/2)

Les plantes contiennent du texte de présentation non structuré

<s:element name="PLANT"> <s:complexType mixed="true"> <s:sequence> <s:element ref="jr:COMMON"/>(...) <s:element ref="jr:AVAILABILITY"/> </s:sequence> <s:attribute name="family" type="s:NCName"/> </s:complexType> </s:element>

Inconvénients : ces noeuds texte peuvent apparaître n'importe où et on ne peut pas contrôler le contenu par des types simples

Page 56: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

56

Schéma d'un document ciblesans espace de noms (1/2)

L'élément racine du document cible n'a pas d'espace de noms

Le schéma ne peut valider que des documents sans espace de noms ("schéma caméléon")

Ce n'est pas une bonne pratique<?xml version="1.0" encoding="ISO-8859-1"?><Tracks>

<Track>

<?xml version="1.0" encoding="UTF-8"?><!-- collection-chameleon.xsd --><s:schema xmlns:s="http://www.w3.org/2001/XMLSchema"> <s:element name="Tracks"> <s:complexType>

Page 57: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

57

Schéma d'un document ciblesans espace de noms (2/2)

Le document cible peut faire référence au schéma

<?xml version="1.0" encoding="utf-8"?><Tracks xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://igm.univ-mlv.fr/~laporte/xml/schema/collection-chameleon.xsd"> <Track>

Page 58: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

58

Document cible partiel (1/2)

On peut valider un document contenant seulement un sous-arbre des documents cibles habituels

Il suffit que l'élément racine ait été déclaré en global

<?xml version="1.0" encoding="utf-8"?><Track xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://igm.univ-mlv.fr/~laporte/audio http://igm.univ-mlv.fr/~laporte/xml/schema/collectionGenres.xsd" xmlns="http://igm.univ-mlv.fr/~laporte/audio"> <Track_ID>37</Track_ID> <Name>American Beauty - Theme</Name> <Artist>Air</Artist> <Album>american beauty soundtrack</Album>

Page 59: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

59

Document cible partiel (2/2)

L'élément Track a été déclaré en global

<?xml version="1.0" encoding="UTF-8"?><!-- collectionGenres.xsd --><s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://igm.univ-mlv.fr/~laporte/audio" xmlns:aud="http://igm.univ-mlv.fr/~laporte/audio"> <s:element name="Tracks">(...) </s:element> <s:element name="Track"> <s:complexType> <s:sequence> <s:element ref="aud:Track_ID"/>

Page 60: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

60

Schéma pour plusieurs types de documents

Un schéma unique pour plusieurs types de documents

<s:element name="CATALOG"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" ref="jr:PLANT"/> </s:sequence> </s:complexType> </s:element> <s:element name="INVOICE"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" ref="jr:ITEM"/> </s:sequence> </s:complexType> </s:element>(...)

Page 61: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

61

Types complexes (1/3)

s:complexType et s:sequence permettent de spécifier des documents plus complexes que des collections d'entrées

<?xml version="1.0" encoding="utf-8"?><iTunes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://igm.univ-mlv.fr/~laporte/audio http://igm.univ-mlv.fr/~laporte/xml/schema/audio.xsd" xmlns="http://igm.univ-mlv.fr/~laporte/audio"> <Major_Version>1</Major_Version> <Minor_Version>1</Minor_Version> <Application_Version>4.6</Application_Version> <Music_Folder>file://localhost/C:/My%20Music/</Music_Folder> <Library_Persistent_ID>B2BF2C09D305D49C</Library_Persistent_ID> <Tracks> <Track> <Track_ID>37</Track_ID> <Name>American Beauty - Theme</Name>

Page 62: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

62

Types complexes (2/3)

s:complexType et s:sequence peuvent être utilisés récursivement

<s:element name="iTunes"> <s:complexType> <s:sequence> <s:element ref="aud:Major_Version"/>(...) <s:element ref="aud:Tracks"/> </s:sequence> </s:complexType> </s:element> <s:element name="Major_Version" type="s:integer"/>(...) <s:element name="Tracks"> <s:complexType>

Page 63: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

63

Types complexes (3/3)

s:sequence représente la concaténation dans un ordre fixe

s:attribute ajoute un attribut

Autres constructeurs de types complexes

s:choice un seul élément pris parmi plusieurs

s:all chaque élément une seule fois, dans

n'importe quel ordre

Page 64: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

64

<s:choice>

<s:complexType name="typePLANT"> <s:sequence> <s:element ref="jrd:COMMON"/> <s:element ref="jrd:BOTANICAL"/> <s:element ref="jrd:ZONE"/> <s:element ref="jrd:LIGHT"/> <s:element ref="jrd:PRICE"/> <s:choice> <!-- un parmi les trois --> <s:element ref="jrd:AVAILABILITY"/> <s:element ref="jrd:LATEST-YEAR"/> <s:element ref="jrd:SUGGESTION"/> </s:choice> </s:sequence> </s:complexType>

Page 65: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

65

<s:all> (1/6)

<s:complexType name="typePLANT"> <s:all> <!-- les champs dans n'importe quel ordre --> <s:element ref="jrd:COMMON"/> <s:element ref="jrd:BOTANICAL"/> <s:element ref="jrd:ZONE"/> <s:element ref="jrd:LIGHT"/> <s:element ref="jrd:PRICE"/> <s:element ref="jrd:AVAILABILITY"/> </s:all> </s:complexType>

Page 66: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

66

<s:all> (2/6)

Restrictions syntaxiques pas de récursivité possible

<s:all> ne peut contenir que des <s:element>

<s:all> ne peut pas apparaître dans un <s:sequence>, <s:choice>, <s:all>

Exemple : on veut que les champs ZONE et LIGHT puissent apparaître dans n'importe quel ordre

Page 67: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

67

<s:all> (3/6)

<s:complexType name="typePLANT"> <s:sequence> <s:element ref="jrd:COMMON"/> <s:element ref="jrd:BOTANICAL"/> <s:all> <!-- NE MARCHE PAS --> <s:element ref="jrd:ZONE"/> <s:element ref="jrd:LIGHT"/> </s:all> <s:element ref="jrd:PRICE"/> <s:element ref="jrd:AVAILABILITY"/> </s:sequence> </s:complexType>

Page 68: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

68

<s:all> (4/6) <s:complexType name="typePLANT"> <s:sequence> <s:element ref="jrd:COMMON"/> <s:element ref="jrd:BOTANICAL"/> <s:choice> <!-- marche, mais pas très lisible --> <s:sequence> <s:element ref="jrd:ZONE"/> <s:element ref="jrd:LIGHT"/> </s:sequence> <s:sequence> <s:element ref="jrd:LIGHT"/> <s:element ref="jrd:ZONE"/> </s:sequence> </s:choice> <s:element ref="jrd:PRICE"/> <s:element ref="jrd:AVAILABILITY"/> </s:sequence> </s:complexType>

Page 69: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

69

<s:all> (5/6)

Si on veut que ZONE, LIGHT et PRICE apparaissent dans n'importe quel ordre, <s:choice> ne marche pas

- Choix entre 6 séquences de 3 éléments

Illisible !

- Trop difficile pour le validateur

Message d'erreur du validateur :

non-deterministic content model

Contrainte sur l'écriture des schémas XML :

lors de l'analyse syntaxique d'un document cible, la correspondance avec le schéma doit pouvoir se faire de façon déterministe sans connaître les éléments qui suivent celui en train d'être analysé

Page 70: 1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

70

<s:all> (6/6)

Solution : modifier la conception des documents ciblesExemple : insérer un élément conteneur

<PLANT> <COMMON>Bloodroot</COMMON> <BOTANICAL>Sanguinaria canadensis</BOTANICAL> <PRACTICAL>

<ZONE>4</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE unit="euro">2.44</PRICE>

</PRACTICAL><AVAILABILITY>031599</AVAILABILITY>

</PLANT>