• Aucun résultat trouvé

Structure globale d'un schéma

5. Schémas XML

5.3. Structure globale d'un schéma

Un schéma XML se compose essentiellement de déclarations d'éléments et d'attributs et de définitions de types. Chaque élément est déclaré avec un type qui peut être, soit un des types prédéfinis, soit un nouveau type défini dans le schéma. Le type spécifie quels sont les contenus valides de l'élément ainsi que ses attributs. Un nouveau type est obtenu soit par construction, c'est-à-dire une description explicite des contenus qu'il autorise, soit par

dérivation, c'est-à-dire modification d'un autre type. Un schéma peut aussi contenir des imports d'autres

schémas, des définitions de groupes d'éléments et d'attributs et des contraintes de cohérences.

L'espace de noms [Chapitre 4] des schémas XML est identifié par l'URI http://www.w3.org/2001/

XMLSchema. Il est généralement associé, comme dans l'exemple précédent au préfixe xsd ou à xs. Tout le schéma est inclus dans l'élément xsd:schema. La structure globale d'un schéma est donc la suivante.

<?xml version="1.0" encoding="iso-8859-1"?>

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

<!-- Déclarations d'éléments, d'attributs et définitions de types --> ...

</xsd:schema>

Les éléments, attributs et les types peuvent être globaux ou locaux. Ils sont globaux lorsque leur déclaration ou leur définition est un enfant direct de l'élément racine xsd:schema. Sinon, ils sont locaux. Seuls les objets globaux peuvent être référencés dans tout le schéma pour être utilisés. Dans le premier exemple de schéma donné ci-dessus, l'élément bibliography est global alors que l'élément title est local. La déclaration de ce dernier intervient au sein de la définition du type Bibliography qui est global. Seuls les types globaux d'un schéma sont nommés. Les types locaux sont anonymes et n'ont pas de nom. Dans le schéma ci-dessus, le type de l'élément book est, par exemple, anonyme. Les éléments et attributs sont toujours nommés, qu'ils soient globaux ou locaux. Ils doivent, bien sûr, avoir un nom pour apparaître dans un document.

Les objets globaux et locaux se comportent différement vis à vis de l'espace de noms cible du schéma [Section 5.13]. Les objets globaux appartiennent toujours à cet espace de noms. Les objets locaux, au contraire, appartiennent ou n'appartiennent pas à l'espace de noms cible suivant les valeurs des attributs form, elementFormDefault et attributeFormDefault.

Les éléments sont déclarés par l'élément xsd:element et les attributs par l'élément xsd:attribute. Les types sont définis par les éléments xsd:simpleType et xsd:complexType.

5.3.1. Attributs de l'élément xsd:schema

L'élément racine xsd:schema peut avoir les attributs suivants. Ceux-ci permettent de spécifier l'espace de noms cible du schéma et de préciser quelques comportements par défaut du schéma.

targetNamespace

La valeur de cet attribut est l'URI qui identifie l'espace de noms cible [Section 5.13], c'est-a-dire l'espace de noms des éléments et types définis par le schéma. Si cet attribut est absent, les élements et types définis n'ont pas d'espace de noms.

elementFormDefault et attributeFormDefault

Ces deux attributs donnent la valeur par défaut de l'attribut form [Section 5.13] pour respectivement les éléments et les attributs. Les valeurs possibles sont qualified et unqualified. La valeur par défaut est unqualified.

Schémas XML

Ces deux attributs donnent la valeur par défaut des attributs block et final [Section 5.10.4]. Les valeurs possibles pour blockDefault sont #all ou une liste de valeurs parmi les valeurs extension, restriction et substitution. Les valeurs possibles pour finalDefault sont #all ou une liste de valeurs parmi les valeurs extension, restriction, list et union.

Dans l'exemple suivant, le schéma déclare que l'espace de noms cible est identifié par l'URI http:// www.omega-one.org/~carton et que tous les éléments doivent être qualifiés dans les documents valides. L'espace de noms par défaut est déclaré égal à l'espace de noms cible afin de simplifier l'écriture du schéma. <?xml version="1.0" encoding="iso-8859-1"?>

<xsd:schema targetNamespace="http://www.omega-one.org/~carton" elementFormDefault="qualified"

xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.omega-one.org/~carton"> ...

5.3.2. Référence explicite à un schéma

Il est possible dans un document de donner explicitement le schéma devant servir à le valider. On utilise un des attributs schemaLocation ou noNamespaceSchemaLocation dans l'élément racine du document à valider. Ces deux attributs se trouvent dans l'espace de noms des instances de schémas identifié par l'URI

http://www.w3.org/2001/XMLSchema-instance. L'attribut schemaLocation est utilisé lors de l'utilisation d'espaces de noms alors que l'attribut noNamespaceSchemaLocation est utilisé lorsque le document n'utilise pas d'espace de noms

La valeur de l'attribut schemaLocation est une suite d'URI séparés par des espaces. Ces URI vont par paires et le nombre d'URI doit donc être pair. Le premier URI de chaque paire identifie un espace de noms et le second donne l'adresse du schéma à utiliser pour les éléments et attributs dans cet espace de noms. L'espace de noms identifié par le premier URI doit donc être l'espace de noms cible du schéma donné par le second. La valeur de l'attribut schemaLocation prend donc la forme générale suivante

schemaLocation="namespace1 schema1 namespace2 ... namespaceN schemaN" où namespacei est l'espace de noms cible du schéma schemai.

Le logiciel qui effectue la validation se base sur la valeur de l'attribut schemaLocation pour chercher la définition de chaque élément ou attribut dans le schéma correspondant à son espace de noms.

La valeur de l'attribut noNamespaceSchemaLocation est simplement l'URL d'un unique schéma qui doit permettre de valider l'intégralité du document. Il n'est, en effet, pas possible de distinguer les éléments qui n'ont pas d'espace de noms.

Dans l'exemple suivant, le document déclare que le schéma se trouve dans le fichier local bibliography.xsd et que l'espace de noms cible de ce schéma est identifié par l'URI http://www.omega-one.org/~carton/

.

<?xml version="1.0" encoding="iso-8859-1"?>

<bibliography xsi:schemaLocation="http://www.omega-one.org/~carton/

bibliography.xsd"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> ...

5.3.3. Documentation

L'élément xsd:annotation permet d'ajouter des commentaires dans un schéma. Il peut être enfant de l'élément xsd:schema pour des commentaires globaux. Il peut également être enfant des éléments xsd:element, xsd:attribute pour ajouter des commentaires aux déclarations d'éléments et d'atttributs ainsi que de xsd:simpleType et xsd:complexType pour ajouter des commentaires aux définitions de type. Contrairement aux commentaires XML [Section 2.7.5], ces commentaires font partie à part entière du schéma XML et constituent sa documentation.

Schémas XML <xsd:annotation> <xsd:documentation xml:lang="fr"> Commentaire en français </xsd:documentation> <xsd:appInfo>

Information destinée aux applications </xsd:appInfo>

</xsd:annotation>

Documents relatifs