Schémas XML : XSD / Attributs (XSD : Attributs)
* Syntaxe
< xsd:attribute name="nom_attribut" type="type_attribut"/>
- nom_attribut : le nom de l’attribut
- Type_attribut: le type de données de l’attribut (chaines de caractéres, entier, date, …)
* Exemples :
< xsd:complexType name="livre">
<!-- Contenu du type List -->
<xsd:sequence>
<xsd:element name="titre" type="xsd:string"/>
</xsd:sequence>
<!-- Déclaration des attributs locaux form et lang du type List -->
<xsd:attribute name="langue" type="xsd:string"/>
<xsd:attribute name="categorie" type="xsd:string"/>
< /xsd:complexType>
Schémas XML : XSD / Attributs (XSD : Attributs & Options) ...
* Utilisation de l’attribut « use » de xsd:attribute
* Options : - optional : si l’attribut est optionnel ( DTD : #IMPLIED )
- required : si l’attrribut est obligatoire (DTD : #REQUIRED )
- prohibited : L'opérateur xsd:sequence définit un nouveau type formé d'une suite des éléments en séquence ordonnée.
* Exemples :
< xsd:attribute name="langue"
type="xsd:string"
use="optional"/>
< xsd:attribute name="xml:id"
type="xsd:string"
use="required"/>
< xsd:attribute name="total"
type="xsd:string"
use="prohibited"/>
Schémas XML : XSD / Attributs (XSD : Attributs & Valeurs par défaut)
* Options :
- default : spécifie la valeur par défaut
- fixed : fige une valeur
- On ne peut pas donner une valeur par défaut et une figée !
* Exemples :
<xsd:attribute name="langue" type="xsd:string" default="fr"/>
<xsd:attribute name="langue" type="xsd:string" fixed="en"/>
Schémas XML : XSD / Extension (XSD : Extension de types)
* Héritage
* L'extension est la première façon d'obtenir un type dérivé à partir d'un type de base. L'idée générale de l'extension est de rajouter du contenu et des attributs.
* L'extension d'un type est introduite par l'élément xsd:extension dont l'attribut base donne le nom du type de base.
* Types simples :
- L'extension d'un simple ne permet pas de changer le contenu mais permet uniquement d'ajouter des attributs pour donner un type complexe à contenu simple.
- Le fragment de schéma suivant définit un type Prix qui étend le type prédéfini xsd:decimal en lui ajoutant un attribut currency de type xsd:string
* Exemples :
<xsd:complexType name="Prix">
<xsd:simpleContent>
<xsd:extension base="xsd:decimal">
<!-- Attribut ajouté -->
<xsd:attribute name="devise" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
< /xsd:complexType>
< xsd:element name="price" type="Prix"/>
* Types complexes à contenu simple :
- L’extension pemet d’obtenir un nouveau type complexe à contenu simple qui possède les attributs du type de base et ceux déclarés par l'extension.
- L'extension d'un tel type est similaire à l'extension d'un type simple.
L'élément xsd:extension est encore enfant d'un élément xsd:simpleContent. Les déclarations des attributs qui sont ajoutés sont placées dans le contenu de l'élément xsd:extension.
* Exemples :
<xsd:complexType name="Price">
<xsd:simpleContent>
<xsd:extension base="xsd:decimal">
<!-- Attribut ajouté -->
<xsd:attribute name="currency" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
< /xsd:complexType>
< xsd:element name="price" type="Price"/>
* Types complexes à contenu complexe :
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--Type de base -->
<xsd:complexType name="Name">
<xsd:sequence>
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<!-- Extension du type de base -->
<xsd:complexType name="Fullname">
<xsd:complexContent>
<xsd:extension base="Name">
<xsd:sequence>
<!-- Ajout de l'élément title après firstname et lastname -->
<xsd:element name="title" type="xsd:string"/>
</xsd:sequence>
<!-- Ajout de l'attribut id -->
<xsd:attribute name="id" type="xsd:ID"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
< /xsd:schema>
Schémas XML : XSD / Restriction (XSD : Restriction de types)
* La restriction est la deuxième façon d'obtenir un type dérivé à partir d'un type de base.
* L'idée générale de la restriction est de définir un nouveau type dont les contenus au sens large sont des contenus du type de base.
* La restriction d'un type est introduite par l'élément xsd:restriction dont l'attribut base donne le nom du type de base.
* Par intervalle
<xsd:element name="year">
<xsd:simpleType>
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="1970"/>
<xsd:maxInclusive value="2050"/>
</xsd:restriction>
</xsd:simpleType>
< /xsd:element>
<xsd:attribute name="date">
<xsd:simpleType>
<xsd:restriction base="xsd:date">
<!-- Date après le 1er janvier 2001 exclus -->
<xsd:minExclusive value="2001-01-01"/>
</xsd:restriction>
</xsd:simpleType>
< /xsd:attribute>
* Par énumération
<xsd:element name="language" type="Language"/>
< xsd:simpleType name="Language">
<xsd:restriction base="xsd:language">
<xsd:enumeration value="de"/>
<xsd:enumeration value="en"/>
<xsd:enumeration value="fr"/>
</xsd:restriction>
< /xsd:simpleType>
* Par motif < xsd:simpleType name="ISBN">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d-\d{2}-\d{6}-[\dX]"/>
<xsd:pattern value="\d-\d{3}-\d{5}-[\dX]"/>
<xsd:pattern value="\d-\d{4}-\d{4}-[\dX]"/>
<xsd:pattern value="\d-\d{5}-\d{3}-[\dX]"/>
</xsd:restriction>
< /xsd:simpleType>
. : Tout caractère autre qu'un retour à la ligne ([\n\r])
\s : caractère d'espacement (espace U+20, tabulation U+09, saut de ligne
U+0A our retour chariot U+0D.
\S : caractère autre qu'un caractère d'espacement
\d : chiffre
\D : caractère autre qu'un chiffre
\w : caractère alphanumérique ou un tiret '-'
\W : caractère autre qu'un caractère alphanumérique ou un tiret
\i : caractère commençant un identificateur (lettre, '_' ou ':')
\I : caractère ne commençant pas un identificateur
{n} : répétition n fois
{m,n} : répétition entre m et n fois
[x-y] : caractère entre x et y
Schémas XML : XSD / Restriction (XSD : Restriction de types / Facettes)
* xsd:enumeration
- Permet d'énumérer explicitement les valeurs autorisées. Elle s'applique à tous les types simples y compris les types construits avec xsd:union et xsd:list.
* xsd:pattern
- Permet de donner une expression rationnelle pour contraindre les valeurs.
- Elle ne s'applique pas uniquement aux types dérivés de xsd:string mais à tous les types simples y compris les types numériques et les types contruits avec xsd:union et xsd:list.
- L'utilisation avec xsd:decimal permet de restreindre, par exemple, aux nombres ayant 4 chiffres pour la partie entière et 2 pour la partie fractionnaire.
* xsd:length, xsd:minLength et xsd:maxLength
- donnent respectivement une longueur fixe ou des longueurs minimale et maximale.
* xsd:minInclusive, xsd:minExclusive, xsd:maxInclusive et xsd:maxExclusive
- Donnent des valeurs minimale et maximale en incluant ou non la borne donnée.
- S'appliquent à tous les types numériques et date et d'heure
* xsd:fractionDigits et xsd:totalDigits
- Fixent respectivement le nombre maximal de chiffres de la partie fractionnaire (à droite de la virgule) et le nombre maximal de chiffres en tout. gule).
- S'appliquent uniquement aux types numériques dérivés de xsd:decimal. Ceci inclut tous les types entiers mais exclut les types xsd:float et xsd:double.
* xsd:whiteSpace - Cette facette est particulière. Elle ne restreint pas les valeurs valides mais elle modifie le traitement des caractères d'espacement à l'analyse lexicale. Cette facette peut prendre les trois valeurs preserve, replace et collapse qui correspondent à trois modes de fonctionnement de l'analyseur lexical.
Schémas XML : XSD / Groupes (XSD : Groupes d’éléments / attributs)
* Il est possible de nommer des groupes d'éléments et des groupes d'attributs afin de pouvoir les réutiliser.
* Ce mécanisme aide à structurer un schéma complexe et vise à obtenir une meilleure modularité dans l'écriture des schémas.
* Les groupes d'éléments et d'attributs sont respectivement définis par les éléments xsd:group et xsd:attributeGroup.
Schémas XML : XSD / Groupes (XSD : Groupes d’éléments)
* L'élément xsd:group permet de définir un groupe d'éléments dont le nom est donné par l'attribut name.
* Le contenu de l'élément xsd:group est un fragment de type nécessairement inclus dans un élément xsd:sequence, xsd:choice ou xsd:all.
* L'utilisation d'un groupe est équivalente à l'insertion de son contenu.
* L'intérêt d'un groupe est de pouvoir l'utiliser à plusieurs reprises et de factoriser ainsi les parties communes à plusieurs types.
<?xml version="1.0" encoding="iso-8859-1"?>
< xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
< xsd:group name="FirstLast">
<xsd:sequence>
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:sequence>
< /xsd:group>
<xsd:complexType name="Personne">
<xsd:sequence>
<xsd:element name="surname" type="xsd:string" minOccurs="0"/>
<xsd:groupref="Name"/>
</xsd:sequence>
< /xsd:complexType>
Schémas XML : XSD / Groupes (XSD : Groupes d’attributs)
* Permettent de regrouper plusieurs déclarations d'attributs dans le but d'une
réutilisation.
* L'élément xsd:attributeGroup permet de définir un groupe d'attributs dont le nom est donné par l'attribut name.
* Le contenu de l'élément xsd:attributeGroup est constitué de déclarations d'attributs introduites par l'élément xsd:attribute.
<xsd:attributeGroup name="LangType">
<xsd:attribute name="lang" type="xsd:language"/>
<xsd:attribute name="type" type="xsd:string"/>
< /xsd:attributeGroup>
<xsd:attributeGroup name="LangTypeClass">
<xsd:attributeGroup ref="LangType"/>
<xsd:attribute name="class" type="xsd:string"/>
< /xsd:attributeGroup>
Schémas XML : XSD / Contraintes (XSD : Contraintes de cohérence)
<xsd:unique name="clefPersonne">
<xsd:selector xpath="/contacts/personne"/>
<xsd:field xpath="@numéro"/>
< /xsd:unique>
un pseudo-champ clefPersonne qui vérifie qu ’il n'y a pas 2
champs numéro identiques dans toutes les personnes dans
contacts.
* Permet de créer des références entre données
<xsd:key name="numSociété">
<xsd:selector xpath="/contacts/société"/>
<xsd:field xpath="@numéro"/>
</xsd:key>
<xsd:keyref name="refNumSociété" refer="numSociété">
<xsd:selector xpath="/contacts/personne"/>
<xsd:field xpath="./refNumSociété"/>
</xsd:keyref>
* Exemple:
<personne nom="Tim Berners-Lee">
<refNumSociété>3</refNumSociété>
</personne>
<société numéro="3">
<nom>World Wide Web Consortium</nom>
</société>
0 commentaires:
Enregistrer un commentaire