• Aucun résultat trouvé

Grâce aux références, nous sommes arrivés à un résultat satisfaisant, mais si l'on regarde en détail, on se rend vite compte que notre Schéma XML n'est pas optimisé. En effet, les différents comptes de notre client, à savoir le livret A et le compte courant, ont des structures identiques et pourtant, nous les déclarons 2 fois.

La syntaxe

Déclarer un nouveau type, n'est pas plus compliqué que ce que nous avons vu jusqu'à présent. Il est cependant important de noter une petite chose. Les types que nous allons créer peuvent être de 2 natures : simple ou complexe.

Débutons avec la création et l'utilisation d'un type simple. La création d'un type simple est utile lorsque par exemple dans un Schéma XML, plusieurs chaînes de caractères ou plusieurs nombres ont des restrictions similaires.

Code : XML

<!-- création -->

<xsd:simpleType name="mon_type_perso">

<xsd:restriction base="mon_type">

<!-- liste des restrictions -->

</xsd:restriction> </xsd:simpleType>

<!-- utilisation-->

<xsd:element name="mon_nom" type="mon_type_perso" />

Continuons avec la création et l'utilisation d'un type complexe : Code : XML

<!-- création -->

<xsd:ComplexeType name="mon_type_perso">

<!-- personnalisation du type complexe -->

</xsd:ComplexeType>

<!-- utilisation-->

<xsd:element name="mon_nom" type="mon_type_perso" />

Mise à jour de notre banque et ses clients

Je vous propose de mettre à jour notre Schéma XML en créant un type "compte" que l'on pourra utiliser pour le livret A et le compte courant des clients de notre banque.

Voici alors ce que ça donne : Code : XML

<?xml version="1.0" encoding="UTF-8"?>

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

<!-- déclaration des éléments -->

<xsd:element name="montant" type="xsd:double" />

<xsd:element name="identite" >

<xsd:complexType>

<xsd:sequence>

<xsd:element name="nom" type="xsd:string" />

<xsd:element name="prenom" type="xsd:string" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<xsd:complexType name="compte">

<xsd:sequence>

</xsd:sequence> </xsd:complexType>

<xsd:element name="comptes">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="livretA" type="compte" />

<xsd:element name="courant" type="compte" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<xsd:element name="client">

<xsd:complexType>

<xsd:sequence>

<xsd:element ref="identite" />

<xsd:element ref="comptes" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<!-- Schéma XML -->

<xsd:element name="banque">

<xsd:complexType >

<xsd:sequence>

<xsd:element ref="client" maxOccurs="unbounded" />

</xsd:sequence>

</xsd:complexType>

</xsd:element> </xsd:schema>

Notre Schéma XML est bien plus lisible maintenant !

L'héritage

L'héritage est un concept que l'on retrouve dans la plupart des langages de programmation orienté objet. Certes le XML n'est pas un langage de programmation, mais ça ne l'empêche pas d'assimiler cette notion.

Pour faire simple, l'héritage permet de réutiliser des éléments d'un Schéma XML pour en construire de nouveaux. Si vous avez encore du mal à comprendre le concept, ne vous inquiétez pas, nous allons utiliser des exemples afin de l'illustrer.

En XML, 2 types d'héritages sont possibles : Par restriction.

Par extension.

Dans les 2 cas, c'est le mot clef base que nous utiliserons pour indiquer un héritage.

L'héritage par restriction

La première forme d'héritage que nous allons voir est celle par restriction.

Définition

Une restriction est une notion qui peut s'appliquer aussi bien aux éléments qu'aux attributs et qui permet de déterminer plus précisément la valeur attendue via la détermination d'un certain nombre de contraintes.

Par exemple, jusqu'à maintenant, nous sommes capables de dire qu'un élément ou qu'un attribut doit contenir un nombre entier strictement positif. Grâce aux restrictions, nous allons pouvoir pousser le concept jusqu'au bout en indiquant qu'un élément qu'un attribut doit contenir un nombre entier strictement positif compris entre 1 et 100.

Code : XML

<xsd:element name="mon_nom">

<xsd:simpleType>

<xsd:restriction base="type_de_base">

<!-- détail de la restriction -->

</xsd:restriction>

</xsd:simpleType> </xsd:element>

La syntaxe est quasiment identique dans le cas d'un attribut : Code : XML

<xsd:attribute name="mon_nom">

<xsd:simpleType>

<xsd:restriction base="type_de_base">

<!-- détail de la restriction -->

</xsd:restriction>

</xsd:simpleType> </xsd:attribute>

Vous avez très probablement remarqué l'attribut base dans la balise <restriction />. Il s'agit du type de votre balise et donc de votre restriction. Il suffit donc de choisir un type simple dans la liste de ceux que nous avons vu dans les chapitres précédents (xsd:string, xsd:int, etc.).

Le tableau récapitulatif

Nom de la restriction Description

minExclusive permet de définir une valeur minimale exclusive minInclusive permet de définir une valeur minimale inclusive maxExclusive permet de définir une valeur maximale exclusive maxInclusive permet de définir une valeur maximale inclusive

totalDigits permet de définir le nombre exact de chiffres qui composent un nombre fractionDigits permet de définir le nombre de chiffres autorisés après la virgule

length permet de définir le nombre exact de caractères d'une chaîne

minLength permet de définir le nombre minimum de caractères d'une chaîne

maxLength permet de définir le nombre maximum de caractères d'une chaîne

enumeration permet d'énumérer la liste des valeurs possibles

whiteSpace permet de déterminer le comportement à adopter avec les espaces

pattern permet de définir des expressions rationnelles

Plus en détails

Pour décrire la syntaxe des différentes restrictions, je vais m'appuyer sur la balise <xsd:element />, mais n'oubliez pas que toutes les règles que nous voyons dans ce chapitre sont également valables pour la balise

Documents relatifs