121
XML schema XML schema Le typage orienté objet pour les données XML

XML schema Le typage orienté objet pour les données XML

Embed Size (px)

Citation preview

Page 1: XML schema Le typage orienté objet pour les données XML

XML schemaXML schema

Le typage orienté objet pour les données XML

Page 2: XML schema Le typage orienté objet pour les données XML

PlanPlan

Schema ?

Les applications

Classer les éléments

Types simples prédéfinis

Les types simples

Création de nouveaux types

Création de types complexes

Groupes d'éléments et d'attributs

Les espaces de noms

Page 3: XML schema Le typage orienté objet pour les données XML

Nous apprendrons à valider un doc xmlNous apprendrons à valider un doc xml

<?xml version="1.0"?><notexmlns="http://www.w3schools.com"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.w3schools.com note.xsd"> <to> dupont</to> <from>bob</from> <heading> XMLSchema</heading> <body> Pas mal ! </body></note>

<?xml version="1.0"?><notexmlns="http://www.w3schools.com"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.w3schools.com note.xsd"> <to> dupont</to> <from>bob</from> <heading> XMLSchema</heading> <body> Pas mal ! </body></note>

Page 4: XML schema Le typage orienté objet pour les données XML
Page 5: XML schema Le typage orienté objet pour les données XML
Page 6: XML schema Le typage orienté objet pour les données XML
Page 7: XML schema Le typage orienté objet pour les données XML
Page 8: XML schema Le typage orienté objet pour les données XML

VérificationVérification

Page 9: XML schema Le typage orienté objet pour les données XML

EditionEdition

Page 11: XML schema Le typage orienté objet pour les données XML

PlanPlan

Schema ?

Les applications

Classer les éléments

Types simples prédéfinis

Les types simples

Création de nouveaux types

Création de types complexes

Les espaces de noms

Page 12: XML schema Le typage orienté objet pour les données XML

introductionsintroductions

Les applications de XML Schéma

la validation : recevoir un document conforme avant de le stocker• validation structurelle• validation des données

la documentation : documente le vocabulaire XML de façon concise.

l'édition structurée : guide de saisie

JAXB

Page 13: XML schema Le typage orienté objet pour les données XML

XML schémaXML schéma

XML schéma formalise

les contraintes de types (feuilles du document)

les structures des instances XML (les branches de l'arbre)

On distinguera

les types simples qui ne concernent que les feuilles de l'arbre. Ils servent

à la construction de composants plus complexes (approche modulaire)

les types complexes qui forment la définition même de la structure de

l'arbre

Page 14: XML schema Le typage orienté objet pour les données XML

PlanPlan

Schema ?

Les applications

Classer les éléments

Modèle de contenu

Types simples prédéfinis

Les types simples

Création de nouveaux types

Création de types complexes

Les espaces de noms

Page 15: XML schema Le typage orienté objet pour les données XML

Classer les élémentsClasser les éléments

Modèle de contenu

le modèle de contenu d'un élément décrit la structure de ses enfants et les nœuds textuels autorisés.

On distingue • contenu vide• contenu simple• contenu mixte• contenu complexe

les commentaires, attributs et instructions de traitement sont ignorés.

Page 16: XML schema Le typage orienté objet pour les données XML

Classer les éléments : le contenu videClasser les éléments : le contenu vide

Modèle de contenu

le contenu vide• un élément à un modèle de contenu vide quand il n'a ni

– nœud textuel enfant– sous élément avec ou sans attribut.

exemple

Un élément n'ayant que des attributs, un commentaire et des instructions de traitement sera considéré comme "a contenu vide".

Page 17: XML schema Le typage orienté objet pour les données XML

Classer les éléments : le contenu simple : Classer les éléments : le contenu simple :

Modèle de contenu

le contenu simple : • il n'y a qu'un nœud textuel.

Les attributs sont toujours de type simple (le contenu est textuel)

exemple

<title lang="en"> Being a Dog Is a Full-Time Job </title><name> Charles M Schulz </name> <born> 1922-11-26 </born>

Page 18: XML schema Le typage orienté objet pour les données XML

Classer les élémentsClasser les éléments

Modèle de contenu

Un modèle de contenu simple est de type simple si il n'a aucun attribut et de type complexe si il en a.

exemple

<title lang="en"> Being a Dog Is a Full-Time Job </title><name> Charles M Schulz </name> <born> 1922-11-26 </born>

Page 19: XML schema Le typage orienté objet pour les données XML

Classer les éléments : le contenu mixteClasser les éléments : le contenu mixte

Modèle de contenu

le contenu mixte• un élément à un modèle de contenu mixte quand il contient à la fois

des sous-éléments et des nœuds textuels enfants.

Page 20: XML schema Le typage orienté objet pour les données XML

Classer les éléments : le contenu complexeClasser les éléments : le contenu complexe

Modèle de contenu

le contenu complexe• un élément à un modèle de contenu complexe quand ses seuls enfants sont

des nœuds éléments • il n'y a pas de nœud textuel

exemple

<character id="Lucy">

<name> Lucy </name>

<born> 1952-03-03 </born>

<qualification> bossy, crabby and selfish </qualification>

</character>

Page 21: XML schema Le typage orienté objet pour les données XML

PlanPlan

Schema ?

Les applications

Classer les éléments

Types simples prédéfinis

Les types simples

Création de nouveaux types

Création de types complexes

Les espaces de noms

Page 22: XML schema Le typage orienté objet pour les données XML

Types simples prédéfinisTypes simples prédéfinis

La recommandation XML Schema fournit des types de données prédéfinis

http://www.w3.org/TR/xmlschema-2/

La recommandation distingue les données écrites dans une instance de document, dit espace lexical, de leurs valeurs logiques obtenues en mémoire après considération de leurs types, on parle d'espace de valeurs.

Chaque type de données a son propre espace lexical et son espace de valeurs.

une valeur peut avoir plusieurs représentations lexicales.

3.14 - 03.14 - .314E1

Les formes lexicales seront égales si le type est xs:float mais pas si c'est le type xs:string.

Page 23: XML schema Le typage orienté objet pour les données XML
Page 24: XML schema Le typage orienté objet pour les données XML

traitement sur les types de donnéestraitement sur les types de données

traitement en deux étapes

la normalisation : • consiste à remplacer toutes les occurrences des caractères

tabulations (#x9), nouvelle ligne (#xA), retour chariot (#xD) et espace blanc (#x20) entre l'espace normalisé et l'espace lexical par des blancs.

Le compactage• Retire tous les blancs d'entête et de queue, et toute série contiguë de

blanc par 1 seul blanc.

Page 25: XML schema Le typage orienté objet pour les données XML

Les types de chaînes de caractèresLes types de chaînes de caractères

xs:string

la normalisation des blancs n'est pas faite.

• la forme lexicale

<title lang="en"> Being a Dog

Is a Full-Time Job </title>

La forme logique (conserve toutes ses tab, blancs et CR)

Being a Dog Is a Full-Time Job

Page 26: XML schema Le typage orienté objet pour les données XML

Les types de chaînes de caractèresLes types de chaînes de caractères

xs:normalizedString

la normalisation des blancs est faite sans compactage.

• la forme lexicale

<title lang="en"> Being a Dog Is a Full-Time Job </title>

• La forme logique

Being a Dog Is a Full-Time Job

Page 27: XML schema Le typage orienté objet pour les données XML

Les types compactésLes types compactés

On supprime les blancs de têtes et de queue et séries d'espace blancs

unités lexicale

format binaire

URI

nom qualifié

notation

Page 28: XML schema Le typage orienté objet pour les données XML

Les unités lexicalesLes unités lexicales

xs:token

version compactée de xs:normalizedString• la forme lexicale

<title lang="en"> Being a Dog Is a Full-Time Job </title>

• La forme logique

Being a Dog Is a Full-Time Job

Page 29: XML schema Le typage orienté objet pour les données XML

Les unités lexicalesLes unités lexicales

xs:NMTOKEN

série de caractères sans blanc• 1950-10-04• Snoopy

– bold,brash (pas de virgule)

Page 30: XML schema Le typage orienté objet pour les données XML

Les unités lexicalesLes unités lexicales

xs:Name

idem que NMTOKEN et commence par un caractère– 1950-10-04

• Snoopy – bold,brash (pas de virgule)

xs:NCName

pas de :– _1950-10-04:10-00

xs:ID

xs:NCNAME unique

Page 31: XML schema Le typage orienté objet pour les données XML

Les noms qualifiésLes noms qualifiés

xs:QName

ensemble de tuples (nom de l'espace de noms,partie locale)

la déclaration <xs:attribute name="lang" type="xs:language"/> attribue à l'attribut lang le type lexicale xs:language qui est un xs:QName dont la valeur logique est le tuple : {"http://www.w3.org/2001/XMLSchema", "language"} parce qu'une déclaration a associé l'URI "http://www.w3.org/2001/XMLSchema" au préfixe xs:. Sans celle-là, la déclaration de l'attribut type aurait été considérée comme invalide.

Page 32: XML schema Le typage orienté objet pour les données XML

Les URIsLes URIs

xs:anyURI

Cas de chaîne de caractère dont l'espace lexical est différent de l'espace des valeurs.

<a href="http://dmoz.org/World/Français/"> Word/Français </a>

http://dmoz.org/World/Fran%e7ais/

Page 33: XML schema Le typage orienté objet pour les données XML

Les notationsLes notations

xs:NOTATION

Equivalent au concept de notation de XML1.0, utilisé au travers un type personnalisé dérivé

Page 34: XML schema Le typage orienté objet pour les données XML

Les Types numériquesLes Types numériques

xs:décimal

xs:integer

xs:nonPositiveInteger (0) xs:negativeInteger

xs:nonNegativeInteger (0) xs:positiveInteger

xs:long xs:int xs:sort xs:byte

xs:float xs:double

xs:boolean

Page 35: XML schema Le typage orienté objet pour les données XML

Les types date et heuresLes types date et heures

xs:datetime

xs:date xs:gYear

Page 36: XML schema Le typage orienté objet pour les données XML

Les types listesLes types listes

Des listes d'items délimitées par des séparateurs.

listes prédéfinies

xs:NMTOKENS

xs:IDREFS

XS:ENTITIES

Page 37: XML schema Le typage orienté objet pour les données XML

Création d'un schémaCréation d'un schéma

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

</xs:schema>

Page 38: XML schema Le typage orienté objet pour les données XML

PlanPlan

Schema ?

Les applications

Classer les éléments

Types simples prédéfinis

Les types simples

Création de nouveaux types

Création de types complexes

Les espaces de noms

Page 39: XML schema Le typage orienté objet pour les données XML

Les typesLes types

Il existe deux types d'éléments

type simple

contenu simple sans attribut

type complexe

Les autres !

Page 40: XML schema Le typage orienté objet pour les données XML

Les types simplesLes types simples

<name>

Charles M Schulz

</name>

<xs:element name="name" type="xs:string"/>

<born>

1922-11-26

</born>

<xs:element name="born" type="xs:date"/>

<isbn>

0836217462

</isbn>

<xs:element name="isbn" type="xs:integer"/>

Page 41: XML schema Le typage orienté objet pour les données XML

PlanPlan

Schema ?

Les applications

Classer les éléments

Types simples prédéfinis

Les types simples

Création de nouveaux types simples

dérivation

Création de types complexes

Les espaces de noms

Page 42: XML schema Le typage orienté objet pour les données XML

Création de nouveaux typesCréation de nouveaux types

Dérivation

action de définir un type en partant de la définition d'un ou de plusieurs types.

les types simples peuvent être dérivés par• restriction (ajout de nouvelles contraintes)• liste• union (union de l'espace lexicaux des types membres)

Les types complexes sont dérivés par• restriction• extension

Page 43: XML schema Le typage orienté objet pour les données XML

Création de nouveaux typesCréation de nouveaux types

un type simple est une contrainte posée sur la valeur terminale d'un élément ou d'un attribut. C'est une caractéristique que l'on peut partagée entre + documents.

Un type complexe représente la définition d'un modèle de contenu, souvent spécifique à une classe de document.

Les méthodes de dérivation entre type simple et complexe seront différentes.

Page 44: XML schema Le typage orienté objet pour les données XML

Dérivation par listesDérivation par listes

Dérivation

action de définir un type en partant de la définition d'un ou de plusieurs types.

les types simples peuvent être dérivés par• restriction (ajout de nouvelles contraintes)• liste• union (union de l'espace lexicaux des types membres)

Page 45: XML schema Le typage orienté objet pour les données XML

Création de types simples : restrictionCréation de types simples : restriction

Dérivation par restriction

Les nouveaux types sont créés par restriction en ajoutant de nouvelles contraintes.

C'est la méthode utilisée par W3C pour de nombreux types prédéfinis

Les restrictions peuvent êtres définis suivants plusieurs axes ou facettes

Page 46: XML schema Le typage orienté objet pour les données XML

RestrictionRestriction

<xs:simpleType name="myInteger">

<xs:restriction base="xs:integer">

<xs:minInclusive value="-2"/>

<xs:maxExclusive value="5"/>

</xs:restriction>

</xs:simpleType>

xs:minInclusive est une facette du type xs:integer. Elle précise les valeurs minimales.

Page 47: XML schema Le typage orienté objet pour les données XML

Les facettesLes facettes

elles peuvent êtres classées en trois catégories

xs:whiteSpace (type xs:string xs:normalizedString)

xs:pattern qui ne s'applique qu'à l'espace lexical

les autres qui s'appliquent à l'espace des valeurs

La disponibilités des facettes et leurs effets dépendent des types auxquels elles sont appliquées.

Page 48: XML schema Le typage orienté objet pour les données XML

Facettes : cas des chaînes de caractères compactéesFacettes : cas des chaînes de caractères compactées

Les types concernés :

xs:ENTITY, xs:ID; xs:IDREF, xs:language, xs:Name, xs:NCName; xs:NMTOKEN, xs:token, xs:anyURI, xs:base64Binary, xs:hexBinary, xs:NOTATION, xs:QName

• xs:enumeration• xs:length• xs:maxlength• xs:minlength• xs:pattern

Page 49: XML schema Le typage orienté objet pour les données XML

Chaînes xs:enumerationChaînes xs:enumeration

Permet de spécifier la liste des valeurs autorisées

<xs:simpleType name="schemaRecommendations"> <xs:restriction base="xs:anyURI">

<xs:enumeration value="http://www.w3.org/TR/xmlschema-0/"/>

<xs:enumeration value="http://www.w3.org/TR/xmlschema-1/"/>

<xs:enumeration value="http://www.w3.org/TR/xmlschema-2/"/>

</xs:restriction>

</xs:simpleType>

Page 50: XML schema Le typage orienté objet pour les données XML

Chaînes xs:lengthChaînes xs:length

Permet de spécifier une longeur mesurée en nombre de caractères

<xs:simpleType name="standardNotations">

<xs:restriction base="xs:NOTATION">

<xs:length value="8"/>

</xs:restriction>

</xs:simpleType>

Page 51: XML schema Le typage orienté objet pour les données XML

Chaînes xs:maxlength, minlengthChaînes xs:maxlength, minlength

Permet de définir la longueur maximum (minimum) mesurée en nombre de caractères

<xs:simpleType name="longName">

<xs:restriction base="xs:NCName">

<xs:minLength value="6"/>

</xs:restriction>

</xs:simpleType>

Page 52: XML schema Le typage orienté objet pour les données XML

Chaînes xs:patternChaînes xs:pattern

définit un motif auquel doit correspondre la chaîne de caractères

<xs:simpleType name="CapitalizedNameWS">

<xs:restriction base="xs:token">

<xs:pattern value="([A-Z]([a-z]*) ?)+"/>

</xs:restriction>

</xs:simpleType>

Page 53: XML schema Le typage orienté objet pour les données XML

Flottants xs:enumerationFlottants xs:enumeration

<xs:simpleType name="enumeration"> <xs:restriction base="xs:float"> <xs:enumeration value="-INF"/> <xs:enumeration value="1.618033989"/> <xs:enumeration value="3e3"/> </xs:restriction> </xs:simpleType>

<enumeration> 3e3 </enumeration> <enumeration> 003000.0000 </enumeration>

ont des valeurs lexicales différentes mais représentent la même valeur logique.

Page 54: XML schema Le typage orienté objet pour les données XML

Flottants : maxExclusiveFlottants : maxExclusive

<xs:simpleType name="maxExclusive">

<xs:restriction base="xs:float">

<xs:maxExclusive value="10"/>

</xs:restriction>

</xs:simpleType>

Page 55: XML schema Le typage orienté objet pour les données XML

Flottant : MaxInclusiveFlottant : MaxInclusive

<xs:simpleType name="thousands">

<xs:restriction base="xs:double">

<xs:maxInclusive value="1e3"/>

</xs:restriction>

</xs:simpleType>

Page 56: XML schema Le typage orienté objet pour les données XML

Flottant : minExclusiveFlottant : minExclusive

<xs:simpleType name="strictlyPositive">

<xs:restriction base="xs:double">

<xs:minExclusive value="0"/>

</xs:restriction>

</xs:simpleType>

Page 57: XML schema Le typage orienté objet pour les données XML

Flottant : minInclusiveFlottant : minInclusive

<xs:simpleType name="positive">

<xs:restriction base="xs:double">

<xs:minInclusive value="0"/>

</xs:restriction>

</xs:simpleType>

Page 58: XML schema Le typage orienté objet pour les données XML

Flottant : patternFlottant : pattern

<xs:simpleType name="noLeading0">

<xs:restriction base="xs:float">

<xs:pattern value="[^0].*"/>

</xs:restriction>

</xs:simpleType>

La facette xs:pattern agit directement sur l'espace lexical du type de données.la facette interdit les zéro en entête.

Page 59: XML schema Le typage orienté objet pour les données XML

Cas des types entiersCas des types entiers

S'applique à

xs:byte, xs:int, xs:integer, xs:long, xs:negativeInteger, xs:nonNegativeInteger, xs:nonPositiveInteger, xs:positiveInteger, xs:short, xs:unsignedByte, xs:unsignedInt, xs:unsignedLong, xs:unsignedShort

Page 60: XML schema Le typage orienté objet pour les données XML

Entier : xs:totalDigitsEntier : xs:totalDigits

<xs:simpleType name="totalDigits">

<xs:restriction base="xs:integer">

<xs:totalDigits value="5"/>

</xs:restriction>

</xs:simpleType>

Cette facette n'autorise que les entiers ayant au max 5 chiffres

Page 61: XML schema Le typage orienté objet pour les données XML

entier : xs:fractionDigitsentier : xs:fractionDigits

<xs:simpleType name="fractionDigits">

<xs:restriction base="xs:decimal">

<xs:fractionDigits value="2"/>

</xs:restriction>

</xs:simpleType>

Cette facette spécifie le nombre de chiffres après la virgule.

Page 62: XML schema Le typage orienté objet pour les données XML

Restrictions multiples et attributRestrictions multiples et attribut

Cas général : Facette plus restrictive, <xs:simpleType name="minInclusive"> <xs:restriction base="xs:float"> <xs:minInclusive value="10"/> </xs:restriction> </xs:simpleType>

on ne doit pas étendre l'espace des valeurs du type de base.

<xs:simpleType name="minInclusive2"> <xs:restriction base="minInclusive"> <xs:minInclusive value="0"/> </xs:restriction> </xs:simpleType>

facette xs:lenght ne peut être redefinie

Page 63: XML schema Le typage orienté objet pour les données XML

Restrictions multiples et attributRestrictions multiples et attribut

Facette faisant l'intersection de deux espaces lexicaux

<xs:simpleType name="nonScientific">

<xs:restriction base="xs:float">

<xs:pattern value="[^eE]*"/>

</xs:restriction>

</xs:simpleType>

<xs:simpleType name="noScientificNoLeading0">

<xs:restriction base="nonScientific">

<xs:pattern value="[^0].*"/>

</xs:restriction>

</xs:simpleType>

Page 64: XML schema Le typage orienté objet pour les données XML

Restrictions multiples et attributRestrictions multiples et attribut

Facette appliquée avant l'espace lexical <xs:simpleType name="greetings"> <xs:restriction base="xs:string"> <xs:whiteSpace value="replace"/> <xs:enumeration value="hi"/> <xs:enumeration value="hello"/> <xs:enumeration value="how do you do?"/> </xs:restriction> </xs:simpleType>

Permet que d'étendre l'ensemble des instances acceptées.

<xs:simpleType name="restricted-greetings"> <xs:restriction base="greetings"> <xs:whiteSpace value="collapse"/> </xs:restriction> </xs:simpleType>

Page 65: XML schema Le typage orienté objet pour les données XML

Facette fixéeFacette fixée

l'attribut fixedfixed sert à bloquer les modifications de la facette.

C'est la méthode utilisée pour créer les types prédéfinis de la recommandation XML schéma.

<xs:simpleType name="integer" id="integer">

<xs:restriction base="xs:decimal">

<xs:fractionDigits value="0" fixed="true"/>

</xs:restriction>

</xs:simpleType>

ne s'applique pas à xs:enumeration et xs:pattern

Page 66: XML schema Le typage orienté objet pour les données XML

Dérivation par listesDérivation par listes

Dérivation

action de définir un type en partant de la définition d'un ou de plusieurs types.

les types simples peuvent être dérivés par• restriction (ajout de nouvelles contraintes)• liste• union (union de l'espace lexicaux des types membres)

Page 67: XML schema Le typage orienté objet pour les données XML

Dérivations par listesDérivations par listes

La dérivation par listes est un mécanisme permettant d'obtenir un type liste à partir d'un type atomique.

Les types prédéfinis IDREFS, ENTITIES et NMTOKENS sont obtenus en utilisant cette méthodes.

il existe deux types d'écriture

référencée par la définition

embarquée dans la définition

pas de listes de listes

Page 68: XML schema Le typage orienté objet pour les données XML

Dérivation par listesDérivation par listes

Référencée par la définition, la référence au type de base se fait par l'attribut itemType

<xs:simpleType name="integerList"> <xs:list itemType="xs:integer"/> </xs:simpleType>

Embarquement un élément xs:simpleType <xs:simpleType name="myIntegerList"> <xs:list> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:maxInclusive value="100"/> </xs:restriction> </xs:simpleType> </xs:list> </xs:simpleType>

Page 69: XML schema Le typage orienté objet pour les données XML

Espace de valeurs Espace de valeurs

Les types listes disposent de leur propre espace de valeurs qui peut être contraint en utilisant les facettes

xs:length, xs:maxLength, xs:minLength, xs:enumeration et xs:whiteSpace

L'application se fait en deux temps

définition de la liste

restriction par contrainte

Page 70: XML schema Le typage orienté objet pour les données XML

Espace de valeurs Espace de valeurs

Exemple :

<xs:simpleType name="myStringList">

<xs:list itemType="xs:string"/>

</xs:simpleType>

<xs:simpleType name="myRestrictedStringList">

<xs:restriction base="myStringList">

<xs:maxLength value="10"/>

</xs:restriction>

</xs:simpleType>

Création de la liste

Contrôle du nombre

Page 71: XML schema Le typage orienté objet pour les données XML

Dérivation par listesDérivation par listes

Dérivation

action de définir un type en partant de la définition d'un ou de plusieurs types.

les types simples peuvent être dérivés par• restriction (ajout de nouvelles contraintes)• liste• union (union de l'espace lexicaux des types membres)

Page 72: XML schema Le typage orienté objet pour les données XML

Dérivation par l'unionDérivation par l'union

permet de définir des types de données en fusionnant les espaces lexicaux de plusieurs autres types.

deux méthodes utilisent l'élément xs:union

référencement d'un type de base

embarquement une définition propre

Page 73: XML schema Le typage orienté objet pour les données XML

Dérivation par l'unionDérivation par l'union

<xs:simpleType name="integerOrData"> <xs:union memberTypes="xs:integer xs:date"/> </xs:simpleType>

<xs:simpleType name="myIntegerUnion"> <xs:union> <xs:simpleType> <xs:restriction base="xs:integer"/> </xs:simpleType> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="undefined"/> </xs:restriction> </xs:simpleType> </xs:union> </xs:simpleType>

Page 74: XML schema Le typage orienté objet pour les données XML

PlanPlan

Schema ?Les applicationsClasser les élémentsTypes simples prédéfinisLes types simplesCréation de nouveaux typesCréation de types complexes

Contenus simplesContenus complexesContenus mixtesContenus vides

Les espaces de noms

Dérivation par extension Dérivation par restriction

Dérivation par extension Dérivation par restriction

Page 75: XML schema Le typage orienté objet pour les données XML

Création de types complexesCréation de types complexes

Contenus simples

Un élément a un modèle de contenu simple quand il n'a qu'un noeud textuel (et aucun sous élément).

Contenus complexes

contenus mixtes

Contenus vides

complexType : simpleContentcomplexType : simpleContent

Page 76: XML schema Le typage orienté objet pour les données XML

Création : Contenus simplesCréation : Contenus simples

Un modèle de contenu simple est de type simple si il n'a aucun attribut et de type complexe si il en a un.

Création des types complexes à contenus simples = des éléments avec des attributs et un contenu purement textuel

très proche des extensions de type simple

complexType : simpleContentcomplexType : simpleContent

Page 77: XML schema Le typage orienté objet pour les données XML

Contenus simplesContenus simples

<xs:element name="title">

<xs:complexType>

<xs:simpleContent>

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

<xs:attribute ref="lang"/>

</xs:extension>

</xs:simpleContent>

</xs:complexType>

</xs:element>

L'élément de nom titleest complexeson contenu est de type simplec'est une extension du type prédéfini xs:stringobtenue en ajoutant l'attribut lang à sa

définition

L'élément de nom titleest complexeson contenu est de type simplec'est une extension du type prédéfini xs:stringobtenue en ajoutant l'attribut lang à sa

définition

exemple :<title lang="en"> Being a Dog Is a Full-Time Job </title>

complexType : simpleContentcomplexType : simpleContent

Page 78: XML schema Le typage orienté objet pour les données XML

PlanPlan

Schema ?Les applicationsClasser les élémentsTypes simples prédéfinisLes types simplesCréation de nouveaux typesCréation de types complexes

Contenus simplesContenus complexesContenus mixtesContenus vides

Les espaces de noms

Dérivation par extension Dérivation par restriction

Dérivation par extension Dérivation par restriction

complexType : simpleContentcomplexType : simpleContent

Page 79: XML schema Le typage orienté objet pour les données XML

Dérivation des modèles de contenu simplesDérivation des modèles de contenu simples

Dérivation du contenu simple à partir du type de base

Dérivation par extension : ajoute uniquement des nouveaux attributs

Dérivation par restriction : forme plus puissante, elle restreint le type du contenu textuel et des attributs du modèle de base et permet d'exclure les attributs du modèle de base inutiles dans la forme dérivées.

Page 80: XML schema Le typage orienté objet pour les données XML

Définition d'un typeDéfinition d'un type

<xs:complexType name="tokenWithLang">

<xs:simpleContent>

<xs:extension base="xs:token">

<xs:attribute ref="lang"/> // ajout d'un attribut

</xs:extension>

</xs:simpleContent>

</xs:complexType>

<xs:element name="title" type="tokenWithLang"/> // ref au type

complexType : simpleContentcomplexType : simpleContent

Page 81: XML schema Le typage orienté objet pour les données XML

Dérivation par extensionDérivation par extension

<xs:element name="title">

<xs:complexType>

<xs:simpleContent>

<xs:extension base="tokenWithLang">

<xs:attribute name="note" type="xs:token"/> // ajout d'un attribut

</xs:extension>

</xs:simpleContent>

</xs:complexType>

</xs:element>

Méthode de dérivation identique à celle vue précédemment

complexType : simpleContentcomplexType : simpleContent

Page 82: XML schema Le typage orienté objet pour les données XML

Dérivation par restrictionDérivation par restriction

Définition d'un type :

<xs:complexType name="tokenWithLangAndNote">

<xs:simpleContent>

<xs:extension base="xs:token">

<xs:attribute name="lang" type="xs:language"/>

<xs:attribute name="note" type="xs:token"/>

</xs:extension>

</xs:simpleContent>

</xs:complexType>

complexType : simpleContentcomplexType : simpleContent

Page 83: XML schema Le typage orienté objet pour les données XML

Dérivation par restrictionDérivation par restriction

Méthode similaire à la dérivation par restriction des types simples (sauf qu'elle touche à la fois le contenu textuel et les attributs)

Les facettes portant sur le contenu textuel sont suivies des règles de restriction portant sur les attributs

le type des attributs peut être changé

les attributs peuvent être proscrits

Page 84: XML schema Le typage orienté objet pour les données XML

Dérivation par restrictionDérivation par restriction

Restriction de la longueur

<xs:element name="title">

<xs:complexType>

<xs:simpleContent>

<xs:restriction base="tokenWithLangAndNote">

<xs:maxLength value="255"/>

</xs:restriction>

</xs:simpleContent>

</xs:complexType>

</xs:element>

complexType : simpleContentcomplexType : simpleContent

Page 85: XML schema Le typage orienté objet pour les données XML

Dérivation par restrictionDérivation par restriction

Proscription d'un attribut

<xs:element name="title">

<xs:complexType>

<xs:simpleContent>

<xs:restriction base="tokenWithLangAndNote">

<xs:maxLength value="255"/>

<xs:attribute name="lang" type="xs:language"/>

<xs:attribute name="note" use="prohibited"/>

</xs:restriction>

</xs:simpleContent>

</xs:complexType>

</xs:element>

complexType : simpleContentcomplexType : simpleContent

Page 86: XML schema Le typage orienté objet pour les données XML

Dérivation par restrictionDérivation par restriction

Restreindre le type de l'attribut lang

<xs:element name="title"> <xs:complexType> <xs:simpleContent> <xs:restriction base="tokenWithLangAndNote"> <xs:maxLength value="255"/> <xs:attribute name="lang"> <xs:simpleType> <xs:restriction base="xs:language"> <xs:enumeration value="en"/> <xs:enumeration value="es"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:restriction> </xs:simpleContent> </xs:complexType> </xs:element>

Restriction des languesdirectement sur l'attribut

: lang

Restriction des languesdirectement sur l'attribut

: lang

complexType : simpleContentcomplexType : simpleContent

Page 87: XML schema Le typage orienté objet pour les données XML

Création de types complexesCréation de types complexes

Contenus simples

Contenus complexes

un élément a un contenu complexe quand ses seuls enfants sont des nœuds éléments

Contenus mixtes

Contenus vides

Page 88: XML schema Le typage orienté objet pour les données XML

Création : Contenus complexesCréation : Contenus complexes

Un connecteur est un conteneur qui permet de manipuler un groupe d'éléments comme un tout et en définit l'ordre relatif

xs:sequence

xs:choice

xs:all

Les connecteur peuvent être imbriqués

on dispose d'indicateurs d'occurrences minOccurs et maxOccurs pour indiquer le nombre d'occurrences autorisées du groupe dans les instances du document.

complexType complexType

Page 89: XML schema Le typage orienté objet pour les données XML

Connecteurs : comment exprimer ?Connecteurs : comment exprimer ?

<first-name> </first-name> <middle-name> </middle-name> <last-name> </last-name>

<first-name> </first-name> <middle-name> </middle-name> <last-name> </last-name>

<first-name> </first-name> <last-name> </last-name>

<first-name> </first-name> <last-name> </last-name>

<name> Snoopy </name> <name> Snoopy </name>

Page 90: XML schema Le typage orienté objet pour les données XML

Connecteurs : sequenceConnecteurs : sequence

<xs:element name="author">

<xs:complexType>

<xs:sequence>

<xs:choice>

<xs:element ref="name"/>

<xs:sequence>

<xs:element ref="first-name"/>

<xs:element ref="middle-name" minOccurs="0"/>

<xs:element ref="last-name"/>

</xs:sequence>

</xs:choice>

</xs:sequence>

<xs:attribute ref="id"/>

</xs:complexType>

</xs:element>

<first-name> </first-name> <middle-name> </middle-name> <last-name> </last-name> ou<first-name> </first-name> <last-name> </last-name>ou<name> Snoopy </name>

<first-name> </first-name> <middle-name> </middle-name> <last-name> </last-name> ou<first-name> </first-name> <last-name> </last-name>ou<name> Snoopy </name>

Page 91: XML schema Le typage orienté objet pour les données XML

Groupes d'éléments et d'attributsGroupes d'éléments et d'attributs

Les groupes sont des ensembles étiquetés permettant de manipuler des éléments ou des attributs en bloc.

Ces groupes sont réutilisables à différents endroits d'un schéma.

Etapes à suivre :

Définition (nommée et globale) du groupe d'éléments

Utilisation du groupe comme particule à l'intérieur de connecteurs via l'élément xs:group et l'attribut ref

Page 92: XML schema Le typage orienté objet pour les données XML

Définition : groupe d'élémentsDéfinition : groupe d'éléments

<xs:group name="name">

<xs:choice>

<xs:element ref="name"/>

<xs:sequence>

<xs:element ref="first-name"/>

<xs:element ref="middle-name" minOccurs="0"/>

<xs:element ref="last-name"/>

</xs:sequence>

</xs:choice>

</xs:group>

complexType complexType

Page 93: XML schema Le typage orienté objet pour les données XML

Définition : groupe d'attributsDéfinition : groupe d'attributs

<xs:attributeGroup name="bookAttributes">

<xs:attribute name="id" type="xs:ID"/>

<xs:attribute name="available" type="xs:boolean"/>

</xs:attributeGroup>

complexType complexType

Page 94: XML schema Le typage orienté objet pour les données XML

Utilisation : groupe d'éléments et d'attributsUtilisation : groupe d'éléments et d'attributs

<xs:element name="author"> <xs:complexType> <xs:sequence> <xs:group ref="name"/> <xs:element ref="born"/> <xs:element ref="dead" minOccurs="0"/> </xs:sequence> <xs:attribute ref="id"/> </xs:complexType> <xs:attributeGroup ref="bookAttributes"/> </xs:element>

complexType complexType

Page 95: XML schema Le typage orienté objet pour les données XML

Contenus complexes xs:allContenus complexes xs:all

Un connecteur est un conteneur qui permet de manipuler un groupe d'éléments comme un tout et en définit l'ordre relatif

xs:sequence

xs:choice

xs:all

Les connecteur peuvent être imbriqués

on dispose d'indicateurs d'occurrences minOccurs et maxOccurs pour indiquer le nombre d'occurrences autorisées du groupe dans les instances du document.

complexType complexType

Page 96: XML schema Le typage orienté objet pour les données XML

Limitations des modèles de contenu non ordonnésLimitations des modèles de contenu non ordonnés

Les modèles de contenu non ordonnés sont ceux qui n'imposent aucun ordre d'apparition à leurs sous-éléments.

Son utilisation fait l'objet de nombreuses limitations pour assurer des contenu déterministes.

xs:all n'a qu'un rôle de connecteur

ne peut être utilisé comme particule

une seule occurrence est autorisée

seul xs:element est autorisé dans xs:all avec comme contrainte d'occurrence 0 ou 1.

Des méthodes de contournement sont possibles.

Page 97: XML schema Le typage orienté objet pour les données XML

PlanPlan

Schema ?Les applicationsClasser les élémentsTypes simples prédéfinisLes types simplesCréation de nouveaux typesCréation de types complexes

Contenus simplesContenus complexesContenus mixtesContenus vides

Les espaces de noms

Dérivation par extension Dérivation par restriction

Dérivation par extension Dérivation par restriction

complexType complexType

Page 98: XML schema Le typage orienté objet pour les données XML

Dérivation des modèles de contenu complexeDérivation des modèles de contenu complexe

Dérivation par extension

ajout de nouvelles particules. Un contenu conforme au type de base ne le sera pas forcément par rapport au type complexe étendu.

Dérivation par restriction

s'applique à la totalité des instances de ce type et les structures restreintes sont obligatoirement conformes à celle du type complexe de base

restreint

étendu

type complexe

pas de retour en arrière

Page 99: XML schema Le typage orienté objet pour les données XML

Dérivation des modèles de contenu complexeDérivation des modèles de contenu complexe

Dérivation par extension

cette méthode est similaire à celle utilisée pour le type complexes à contenu simple.

La dérivation se fait en ajoutant de nouveaux éléments et attributs par rapport au type de base. Cela revient à créer une séquence (au moyen du connecteur xs:sequence) composée du modèle de base suivi du nouveau.

Page 100: XML schema Le typage orienté objet pour les données XML

Exemple : ExtensionExemple : Extension

<xs:complexType name="basePerson">

<xs:sequence>

<xs:element ref="name"/>

<xs:element ref="born"/>

</xs:sequence>

<xs:attribute ref="id"/>

</xs:complexType> <xs:element name="author">

<xs:complexType>

<xs:complexContent>

<xs:extension base="basePerson">

<xs:sequence> <xs:element ref="dead"

minOccurs="0"/>

</xs:sequence>

</xs:extension>

</xs:complexContent>

</xs:complexType>

</xs:element>

ajout d'un élément

ajout d'un élément

Page 101: XML schema Le typage orienté objet pour les données XML

Dérivation des modèles de contenu complexeDérivation des modèles de contenu complexe

Dérivation par Restriction

cette dérivation est une diminution du nombre d'instances conformes au modèle de base.

la dérivation s'effectue en redéfinissant la totalité du modèle de contenu qui doit être une restriction logique du modèle de base.

Page 102: XML schema Le typage orienté objet pour les données XML

restrictionrestriction <xs:complexType name="person"> <xs:sequence> <xs:element ref="name"/> <xs:element ref="born"/> <xs:element ref="dead" minOccurs="0"/> <xs:element ref="qualification" minOccurs="0"/> </xs:sequence> <xs:attribute ref="id"/> </xs:complexType>

<xs:element name="author"> <xs:complexType> <xs:complexContent> <xs:restriction base="person"> <xs:sequence> <xs:element ref="name"/> <xs:element ref="born"/> <xs:element ref="dead" minOccurs="0"/> </xs:sequence> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:element>

<xs:element name="author"> <xs:complexType> <xs:complexContent> <xs:restriction base="person"> <xs:sequence> <xs:element ref="name"/> <xs:element ref="born"/> <xs:element ref="dead" minOccurs="0"/> </xs:sequence> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:element>

"Qualification" supprimé

"Qualification" supprimé

Page 103: XML schema Le typage orienté objet pour les données XML

PlanPlan

Schema ?Les applicationsClasser les élémentsTypes simples prédéfinisLes types simplesCréation de nouveaux typesCréation de types complexes

Contenus simplesContenus complexesContenus mixtesContenus vides

Les espaces de noms

complexType complexType

Page 104: XML schema Le typage orienté objet pour les données XML

Contenus mixtesContenus mixtes

Un élément a un modèle de contenu mixte quand il contient à la fois des sous-éléments et des nœuds textuels enfants.

ajout de l'attribut mixed de l'élément xs:complexType

Page 105: XML schema Le typage orienté objet pour les données XML

contenu mixtecontenu mixte

<xs:complexType name="markedText" mixed="true">

<xs:choice minOccurs="0" maxOccurs="unbounded">

<xs:element name="em" type="xs:token"/>

<xs:element ref="a"/>

</xs:choice>

<xs:attribute ref="lang"/>

</xs:complexType>

<xs:element name="title" type="markedText"/>

<title lang="en"> Being a <a href="http://dmoz.org/Shopping/Pets/Dogs/"> Dog </a> Is a <em> Full-Time </em> Job </title>

Page 106: XML schema Le typage orienté objet pour les données XML

PlanPlan

Schema ?Les applicationsClasser les élémentsTypes simples prédéfinisLes types simplesCréation de nouveaux typesCréation de types complexes

Contenus simplesContenus complexesContenus mixtesContenus vides

Les espaces de noms

complexType complexType

Dérivation par extension Dérivation par restriction

Dérivation par extension Dérivation par restriction

Page 107: XML schema Le typage orienté objet pour les données XML

Dérivation des modèles de contenu mixtesDérivation des modèles de contenu mixtes

extension

à partir d'autres types complexes à contenu complexe

restriction

même méthode que celle des contenu complexes. Chaque particule doit être une dérivation explicite de sa particule correspondante dans le modèle de base.

Page 108: XML schema Le typage orienté objet pour les données XML

PlanPlan

Schema ?Les applicationsClasser les élémentsTypes simples prédéfinisLes types simplesCréation de nouveaux typesCréation de types complexes

Contenus simplesContenus complexesContenus mixtesContenus vides

Les espaces de noms

complexType complexType

Dérivation par extension Dérivation par restriction

Dérivation par extension Dérivation par restriction

Page 109: XML schema Le typage orienté objet pour les données XML

Contenus videsContenus vides

ne disposent que des attributs.

Page 110: XML schema Le typage orienté objet pour les données XML

PlanPlan

Schema ?

Les applications

Classer les éléments

Types simples prédéfinis

Les types simples

Création de nouveaux types

Création de types complexes

Les espaces de noms

Page 111: XML schema Le typage orienté objet pour les données XML

Déclaration des espaces de nomsDéclaration des espaces de noms

<library xmlns="http://dyomedea.com/ns/library">

<book id="b0836217462" available="yes">

<isbn>

.../...

</book>

</library>

<xs:schema

targetNamespace="http://dyomedea.com/ns/library" elementFormDefault="qualified"

attributeFormDefault="unqualified"

xmlns:lib="http://dyomedea.com/ns/library" xmlns:xs="http://www.w3.org/2001/XMLSchema">

.../...

</xs:schema>

attributs de l'élémentschéma

définitions des préfixes

Page 112: XML schema Le typage orienté objet pour les données XML

Elément : "qualified"Elément : "qualified"

Un élément ou un attribut est dit "qualified" s'il appartient à un espace de noms et "unqualified" s'il appartient à aucun espace de noms.

la distinction entre un élément qualifié ou non qualifié est faite sur l'attribut des éléments ou des attributs "form".

<xs:element name="book" form="qualified"/>

<xs:attribute name="isbn" form="qualified"/>

<xs:element name="character" form="unqualified"/>

La valeur par défaut des attributs form sont définis par :

elementFormDefault=

attributeFormDefault=

de l'élément xs:schema, par défaut la valeur est "unqualified".

Page 113: XML schema Le typage orienté objet pour les données XML

Définition des espaces de nomsDéfinition des espaces de noms

<xs:schema

targetNamespace="http://dyomedea.com/ns/library" elementFormDefault="qualified"

attributeFormDefault="unqualified"

xmlns:lib="http://dyomedea.com/ns/library" xmlns:xs="http://www.w3.org/2001/XMLSchema">

.../...

</xs:schema>

On associe xs à l'espace de noms W3C XMLSchema

Page 114: XML schema Le typage orienté objet pour les données XML

Définition des espaces de nomsDéfinition des espaces de noms

<xs:schema

targetNamespace="http://dyomedea.com/ns/library" elementFormDefault="qualified"

attributeFormDefault="unqualified"

xmlns:lib="http://dyomedea.com/ns/library" xmlns:xs="http://www.w3.org/2001/XMLSchema">

.../...

</xs:schema>

On associe lib à l'espace de noms W3C XMLSchema : c'est l'espacede noms dans notre instance de document. Cette déclaration est utile pour résoudre les références des composants du schéma (datatype, elements, … pour les expressions Xpath)

ex :<xs:element name="person"> <xs:element ref="lib:person">

Page 115: XML schema Le typage orienté objet pour les données XML

Définition des espaces de nomsDéfinition des espaces de noms

<xs:schema

targetNamespace="http://dyomedea.com/ns/library" elementFormDefault="qualified"

attributeFormDefault="unqualified"

xmlns:lib="http://dyomedea.com/ns/library" xmlns:xs="http://www.w3.org/2001/XMLSchema">

.../...

</xs:schema>

Indique quel espace de noms ce schema décrit. On utilise l'attribut targetNamespace

Page 116: XML schema Le typage orienté objet pour les données XML

Différentes écrituresDifférentes écritures

1. <?xml version="1.0"?> 2. <xs:schema

targetNamespace="http://dyomedea.com/ns/library"3. elementFormDefault="qualified"

attributeFormDefault="unqualified"4. xmlns:lib="http://dyomedea.com/ns/library"5. xmlns:xs="http://www.w3.org/2001/XMLSchema">

6. <xs:element name="library">7. <xs:complexType>8. <xs:sequence>9. <xs:element name="book" type="lib:bookType"/>10. </xs:sequence>11. </xs:complexType>12. </xs:element>13.<xs:complexType name="bookType">

pas de confusion possible lors de la définitioncar définit des éléments appartenant au targetN

pas de confusion possible lors de la définitioncar définit des éléments appartenant au targetN

lib : utilisé pour les cross reflib : utilisé pour les cross ref

ref : W3C

Page 117: XML schema Le typage orienté objet pour les données XML

Autre écritureAutre écriture

<?xml version="1.0"?>

<schema targetNamespace="http://dyomedea.com/ns/library"

elementFormDefault="qualified" attributeFormDefault="unqualified"

xmlns="http://www.w3.org/2001/XMLSchema"

xmlns:lib="http://dyomedea.com/ns/library">

<element name="library">

<complexType>

<sequence>

<element name="book" type="lib:bookType"/>

</sequence>

</complexType>

</element>

<element name="person">

pas de ns car W3C est le NS par défaut

Page 118: XML schema Le typage orienté objet pour les données XML

Autre écritureAutre écriture

<xs:schema targetNamespace="http://dyomedea.com/ns/library"

elementFormDefault="qualified" attributeFormDefault="unqualified"

xmlns:xs="http://www.w3.org/2001/XMLSchema"

xmlns="http://dyomedea.com/ns/library">

<xs:element name="library">

<xs:complexType>

<xs:sequence>

<xs:element name="book" type="bookType"/>

</xs:sequence>

</xs:complexType>

</xs:element>

<xs:complexType name="bookType">

pas de lib car Library est le NS par défaut

Page 119: XML schema Le typage orienté objet pour les données XML

OEFOEF

JAXB

Page 120: XML schema Le typage orienté objet pour les données XML

EOFEOF