XML et XSD - Noms d’espaces & Schémas XML - Partie (4)

. 8/13/2011
  • Agregar a Technorati
  • Agregar a Del.icio.us
  • Agregar a DiggIt!
  • Agregar a Yahoo!
  • Agregar a Google
  • Agregar a Meneame
  • Agregar a Furl
  • Agregar a Reddit
  • Agregar a Magnolia
  • Agregar a Blinklist
  • Agregar a Blogmarks


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é>