Ce document est une traduction de la recommandation XML Schema du W3C, datée du 2 mai 2001. Cette version traduite peut contenir des erreurs absentes de l'original, introduites par la traduction elle-même. La version originelle en anglais, seule normative, se trouve à l'adresse http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/. Traduction :
Copyright © 1998 W3C (MIT, INRIA, Keio), tous droits réservés. Les règles du W3C sur la responsabilité, les marques commerciales, les droits des auteurs et les licences des logiciels sont applicables. Remarque de la traduction: L'entité caractère nécessaire au "oe" ligaturé n'étant pas supportée par certains navigateurs, ce caractère sera écrit oe. |
Copyright ©2001 W3C® (MIT, INRIA, Keio), All Rights Reserved. W3C liability, trademark, document use et software licensing rules apply.
XML Schema tome 1 : Structures est la spécification du langage de définition de XML Schema, qui offre les fonctions pour spécifier les structures et les contraintes de contenu de documents XML 1.0, y compris ceux qui font usage des espaces de noms de XML. Le langage des Composant de schéma i-même écrit en XML 1.0 et utilise des espaces de noms, est une réécriture significative et une extension considérable des possibilités fonctionnelles des DTD de XML 1.0. Cette spécification est directement liée à XML Schema tome 2 : Types de données.
Cette section décrit le statut de ce document au moment de sa publication. D'autres documents, plus récents, peuvent supplanter ce document. Le W3C en gère la liste des mises à jour.
Ce document a été contrôlé par des personnes concernées par le sujet, membres du W3C ou autre, et a été validé par le directeur du W3C en tant que recommandation. Il s'agit donc d'un document stable qui peut être utilisé comme document de référence. Le statut de "Recommandation du W3C" sert à attirer l'attention sur la spécification et à en promouvoir largement le déploiement ; cela dans le but d'améliorer le fonctionnement et l'interopérabilité du Web.
Ce document a été produit par le groupe de travail du W3C sur XML Schema dans le cadre général de l'activité XML du W3C. Les objectifs du langage XML Schema sont présentés dans les spécifications de XML Schema. Les auteurs de ce document sont les membres du groupe de travail sur XML Schema et les 3 tomes de cette recommandation ont chacun leurs propres éditeurs.
Cette version intègre les remarques correctives faites sur les versions antérieures.
Vous voudrez bien faire remonter les erreurs trouvées dans ce document à www-xml-schema-comments@w3.org (archive) (note de la traduction : ou directement à la traduction française mentionnée en début de document). Une liste des erreurs connues de la version anglaise de cette spécification est disponible à l'adresse http://www.w3.org/2001/05/xmlschema-errata.
La seule version normative du présent document est l'anglaise. Des informations concernant ses traductions sont disponibles à l'adresse http://www.w3.org/2001/05/xmlschema-translations.
Une liste complète des recommandations actuelles du W3C et d'autres documents techniques est disponible à l'adresse http://www.w3.org/TR/.
Ce document expose la partie structurante (XML Schema tome 1 : Structures) du langage de définition de XML Schema.
Le chapitre 2 présente le cadre conceptuel (§2) de XML Schema, comprenant une introduction à la nature des schémas XML et au modèle de données abstrait qui s'y rapporte, on y trouve également des définitions terminologiques générales.
Le chapitre Descriptions détaillées des composants de schéma (§3) donne tous les détails de la sémantique de chaque composant du modèle abstrait et leurs représentations XML, en faisant référence à la DTD et au schéma XML d'un document de type schéma XML, les correspondances précises entre le vocabulaire des éléments et des attributs de la représentation physique et les composants et les propriétés du modèle abstrait y sont également spécifiées.
Le chapitre 4 qui présente les Schémas et les espaces de noms : accès et assemblage (§4) contient la description des relations entre documents et schémas, l'import, l'inclusion et la redéfinition des déclarations et des définitions et les critères fondamentaux de validité des schémas.
Le chapitre 5 qui concerne l'évaluation de la validité des schémas (§5) contient la description des considérations générales qui gouvernent l'évaluation de la validité de schéma des documents et les responsabilités des programmes validant.
Les chapitres normatifs des annexes portent, entre autres, sur le schéma des schémas (§A) pour la représentation physique des schémas en XML et les références bibliographiques (§B).
Les chapitres non-normatifs des annexes portent, entre autres, sur la DTD des schémas (§G) et le glossaire (§F).
L'objectif primordial de ce document est d'être la référence de la définition du langage. En cela, et bien qu'il contienne quelques exemples, il n'est pas fondamentalement conçu pour être un guide méthodologique à utiliser comme aide au démarrage à la conception et aux fonctionnalités de modèles XML. Au lieu de cela, il contient plutôt une définition complète et minutieuse du modèle conceptuel propre à servir de guide aux développeurs qui implémenteront la norme. Pour ceux qui ont besoin d'une aide au démarrage, il est conseillé de lire d'abord le tome non-normatif de la recommandation [XML Schema tome 0 : introduction].
Le but de XML Schema tome 1: structures est de définir la nature des schémas XML et des parties qui les composent, fournissant un inventaire exhaustif des balises XML servant à monter des représentations physiques des modèles et définir en quoi concerne l'application de modèles à des documents XML.
Le but d'un modèle (note de traduction : ou 'schéma', nous utilisons indifféremment dans ce document l'un ou l'autre de ces deux termes) conforme à cette recommandation est de définir et décrire une classe de documents XML. Cela se fait via des composants de modélisation qui permettent de définir les contraintes et documenter la signification, l'utilisation et les relations de dépendances des constituants d'un document XML : les types de données, les éléments et leurs contenus, les attributs et leurs valeurs. Les schémas permettent également de spécifier des informations complémentaires au document, comme par exemple la normalisation et la gestion des valeurs par défaut des attributs et des éléments. Les schémas offrent des facilités pour être auto-documentés. C'est ainsi que XML Schema tome1 : structures peut être utilisé pour définir, décrire et cataloguer des vocabulaires XML spécifiques à différentes classes de documents.
Toute application utilisant des données XML bien formées peut utiliser le formalisme de modèles ici décrits pour exprimer des contraintes de contenu, syntaxiques et structurelles applicables aux instances de documents. Le formalisme de XML Schema tome 1 : Structures offre un niveau suffisamment pratique d'expression de contraintes pour pouvoir être décrit et implémenté dans une grande variété d'applications XML. Toutefois, le langage défini par cette spécification n'essaie pas de fournir toutes les possibilités dont n'importe quelle application pourrait avoir besoin. Certaines d'entre elles pourraient avoir besoin de disposer de contraintes dont l'expression n'est pas prévue dans ce langage et par conséquent avoir besoin de gérer en plus leurs propres règles de validations.
La définition de XML Schema tome 1 : Structures dépend des spécifications suivantes : [XML-Infoset], [XML-Namespaces], [XPath] et [XML Schema tome 2 : Types de données].
Reportez-vous à l'annexe normative Eléments et propriétés requis des ensembles d'information (§D) pour avoir une liste récapitulative des unités d'information et propriétés de [XML-Infoset] exigées comme pré-requises par la présente recommandation pour les programmes validant.
Ce chapitre présente la typographie et les mises en valeur utilisées dans ce document.
Les termes spéciaux sont définis dès leur introduction dans le texte par le mot "Définition" écrit entre crochets. Par exemple [Définition :] un terme est quelque chose utilisé avec une signification particulière. Le mot "Définition" est explicitement mentionné et le terme défini est écrit en gras. La fin de la définition n'est pas particulièrement indiquée dans le texte, qu'il soit affiché ou imprimé. Les termes officiels utilisés dans le texte sont encadrés par des points en début et fin de terme et renvoient à leurs définitions, par exemple : ·terme·.
Les exemples non-normatifs sont encadrés et accompagnés d'une petite explication :
<schema targetNamespace="http://www.example.com/XMLSchema/1.0/mySchema">
La définition de chaque sorte de composant de schéma est constitué de sa liste de propriétés et types de contenus possibles ; les propriétés sont suivies de la description de leur sémantique :
Dans le corps de la recommandation, les références aux propriétés des composants de schéma, repérables grâce aux accolades qui les encadrent, sont des liens qui conduisent à leur définition, par exemple {exemple de propriété}.
La correspondance entre une unité d'information de type élément (par exemple, ce cas n'est qu'un des aspects de la représentation XML d'un schéma) et un ou plusieurs composants de schéma est présentée sous forme de tableaux. Cela est suivi d'un récapitulatif des correspondances entre les propriétés du composant et celles de l'élément d'information. Quand il y a plusieurs possibilités de composants et que le choix de l'un d'eux est déterminé par son contexte d'utilisation, nous présentons un tableau récapitulatif par contexte. Les correspondances des propriétés que nous spécifions sont normatives, comme le sont les illustrations de la représentation XML des unités d'information de type élément.
Dans la représentation XML, les noms d'attributs en gras (par exemple
count dans l'encadré ci-dessous) indique qu'il est obligatoire, les
autres étant optionnels. Quand la définition de la valeur d'une unité
d'information de type attribut est du type énumération, les valeurs
autorisées sont écrites les unes derrières les autres, séparées par le
caractère barre verticale (voir l'exemple de l'attribut size
ci-après) ; si l'un de ces valeurs est la valeur par défaut, elle est reprise
après le caractère "deux points" (exemple du mot medium
ci-dessous) . Quand une unité d'information de type attribut a une définition
de type simple préfabriqué dans [XML Schema tome 2 :
types de données], un hyperlien à sa définition est fourni.
Le contenu autorisé d'un élément d'information est montré sous la forme
d'un fragment de grammaire, en utilisant les opérateurs de Kleene
?
, *
et +
. Chaque nom d'élément alors
présent est un lien à sa propre illustration.
Remarque : Les illustrations sont dérivées automatiquement du schéma des schémas (partie normative) (§A). Dans le cas d'un conflit apparent, le schéma des schémas (partie normative) (§A) fait foi, dans ce sens que, avec les ·contraintes de représentation des schémas·, il fournit l'expression normative de la forme de la représentation XML.
example
<example
count = integer
size = (large | medium |
small) : medium>
Content: (all | any*)
</example>
Composant de schéma example | ||||
---|---|---|---|---|
|
Les références à des éléments dans le texte sont des liens à l'illustration qui correspond comme dans l'exemple ci-dessus, mis en valeur par des signes inférieurs et supérieurs, par exemple <example>.
Les références aux propriétés des unités d'information comme cela est défini dans [XML-Infoset] sont balisées sous la forme de liens au chapitre correspondant et sont mises en valeur par des crochets , par exemple [enfants].
Les propriétés des unités d'information que cette spécification définit sont présentées comme suit :
example
Les références aux propriétés des unités d'information définies dans cette spécification sont balisées sous la forme de liens vers l'endroit où elles sont introduites comme dans l'exemple ci-dessus. La propriété est alors mise en valeur par des crochets, par exemple [nouvelle propriété].
La mise en valeur suivante est utilisée pour les commentaires non-normatifs de ce document :
Remarque : commentaires généraux destinés à tous les lecteurs.
Suivant les règles de [XML 1.0 (Second Edition)], à l'intérieur du texte de cette spécification, les verbes pouvoir et devoir sont définis comme suit :
Remarquez que cette spécification fournit une définition des erreurs et de la manière dont les programmes conformes doivent réagir par rapport aux erreurs (référez-vous au chapitre L'évaluation de la validité des schémas (§5)) qui est infiniment plus complexe que celle de [XML 1.0 (Second Edition)].
Ce chapitre donne un aperçu du modèle abstrait des structures de XML Schema. Le chapitre Détails des composants de schéma (§3) fournit les détails de ce modèle dont la représentation XML normative des composants du modèle abstrait. Les lecteurs dont l'objectif principal est d'apprendre à écrire des documents de type schéma peuvent commencer par lire le tutorial [XML Schema tome 0 : Introduction] et de consulter seulement ensuite les sous-chapitres intitulés Représentation XML de ... qui contiennent tous les détails de la spécification (ces sous-chapitres sont ceux du grand chapitre Détails sur les composants de schéma (§3)).
Un schéma XML consiste en des composants qui sont par exemple des définitions de types et des déclarations d'éléments. Celles-là peuvent à leur tour être utilisées pour contrôler la validité des unités d'information de type élément et attribut à condition qu'elles soient bien formées (tel que défini dans le dictionnaire terminologique de XML [XML-Infoset]) et pour spécifier des compléments d'information sur ces unités et leurs descendants. Ces compléments d'information prennent la forme d'informations explicitement écrites là où elles étaient implicites dans le document original. Il s'agit par exemple des informations de normalisation, de valeurs par défaut des attributs et des éléments et des définitions de type des unités d'information de type élément et attribut.
L'évaluation de la validité du schéma a deux aspects :
Tout au long de cette spécification, [Définition:] le mot valide et ses formes dérivées font référence à la clause 1 ci-dessus, la résolution de la validité locale par rapport au schéma.
Tout au long de cette spécification, [Définition :] le mot évaluation fait référence à la totalité du processus de validation locale, l'évaluation de la validité de schéma et les rajouts à l'ensemble d'information.
Cette spécification repose sur [XML 1.0 (Second Edition)] et [XML-Namespaces]. Les concepts et les définitions en rapport avec XML utilisés ci-après sont encadrés au niveau abstrait par des unités d'information comme cela est défini dans [XML-Infoset]. Par définition, cette utilisation de l'ensemble d'information fournit a priori des garanties sur la qualité de la forme (telle que définie dans [XML 1.0 (Second Edition)]) et sur la conformité de l'espace de noms (telle que définie dans [XML-Namespaces]) pour tous les candidats à ·l'évaluation· et pour tous les ·documents de type schéma·.
De la même manière que [XML 1.0 (Second Edition)] et [XML-Namespaces] peuvent être décrits en terme d'unités d'information, XML Schemas peut être décrit en terme de modèle de données abstrait. Ce faisant, cette spécification définit rigoureusement les informations qui doivent être à la disposition de tout programme de traitement de XML Schema se disant conforme. Le modèle abstrait des schémas est seulement conceptuel et ne présage d'aucune implémentation physique ou représentation particulière. Pour faciliter l'interopérabilité et le partage des données de type schéma, un format d'échange normatif en XML est fourni.
[Définition :] Composant de schéma est le terme générique utilisé pour désigner les blocs de construction qui constituent le modèle de données abstrait du schéma. [Définition :] Un schéma XML est un ensemble de ·composants de schéma·. Il y a au total 13 sortes de composants répartis en trois groupes. Les composants principaux, qui peuvent (cas des définitions de types) ou doivent (cas des déclarations d'éléments et d'attributs) avoir des noms, sont ceux-ci :
Les composants secondaires, qui doivent avoir des noms, sont :
Finalement, les composants "assistant" fournissent de petites parties d'autres composants ; ils ne sont pas indépendants de leur contexte :
Durant la ·validation·, [Définition :] les composants de type déclaration sont associés aux unités d'information en train d'être ·validées· par un nom (qualifié).
D'un autre côté, [Définition :] les composants de définition définissent des composants internes de type schéma qui peuvent être utilisés dans d'autres composants.
[Définition :] Les déclarations et les définitions peuvent avoir et être identifiées par des noms de type NCName conformes à la spécification [XML-Namespaces].
[Définition :] Plusieurs sortes de composants ont un espace de noms cible qui est soit ·absent· soit un nom d'espace de noms, également défini dans [XML-Namespaces]. ·L'espace de nom cible· sert à identifier l'espace de noms à l'intérieur duquel l'association entre le composant et son nom existe. Dans le cas de déclarations, cela, à son tour, détermine le nom de l'espace de noms des unités d'information de type élément (par exemple) qu'il peut ·valider·.
Remarque : au niveau abstrait, il n'y a aucune obligation à ce que les composants d'un schéma partagent le même ·espace de noms cible·. Tout schéma utilisé dans ·l'évaluation· de documents qui contiendraient des noms provenant de plusieurs espaces de noms inclura nécessairement des composants ayant différents ·espaces de noms cibles·. Cela contraste avec ce qui se passe avec la représentation XML des composants dans laquelle les définitions et les déclarations apportées par tous les fragments de documents de type schéma participent à la constitution d'un seul et même espace de noms cible.
La ·Validation·, définie en détail au chapitre Descriptions détaillées des composants de schéma (§3), est une relation entre des unités d'information et des composants de schéma. Par exemple, une unité d'information de type attribut peut se ·valider· par rapport à la déclaration d'attribut qui lui correspond, une liste d'unités d'information de type élément peut se ·valider· par rapport au modèle de contenu qui lui correspond, etc. Les chapitres suivants introduisent brièvement les différentes sortes de composants du modèle de données abstrait, ainsi que d'autres fonctions principales du modèle abstrait et la manière avec laquelle ils contribuent à la ·validation·.
Le modèle abstrait fournit deux sortes de composants de définition des types : un pour le type simple et l'autre pour le type complexe.
[Définition :] Cette spécification utilise la phrase définition de types pour les cas où il n'y a pas de distinction à faire entre les types simples et les types complexes.
Les définitions de types forment en final une hiérarchie n'ayant qu'une seule racine. Les sous-chapitres ci-dessous tout d'abord décrivent les caractéristiques de cette hiérarchie et ensuite fournissent une introduction aux définitions des types simples et complexes eux-mêmes.
[Définition :] La ·définition du type ur· étant un cas particulier mis à part, toute ·définition de type· est , par construction, soit une ·restriction· soit une ·extension· d'une autre définition de type. Le graphe de ces relations forme un arbre connu sous le nom de hiérarchie des définitions de types.
[Définition :] Une définition de type dont les déclarations ou les facettes sont dans une relation biunivoque avec celles d'une autre définition de type, chacune des déclarations ou facettes de la première restreignant tour à tour leur homologue de l'autre définition, est appelée restriction. Les restrictions peuvent, par exemple, se concrétiser par la réduction d'une gamme de valeurs ou une réduction des choix possibles. Les membres d'un type restreint (A) par rapport à un type (B) sont toujours des membres valides du type B.
[Définition :] La définition d'un type complexe A qui permet d'avoir des contenus d'élément ou d'attribut en plus de ceux autorisés par un autre type spécifié est une extension.
[Définition :] La définition du type ur est présente dans chaque ·schéma XML·, elle est la racine de la hiérarchie des définitions de types de ce schéma. La définition du type ur, dont le nom est anyType, a comme seule caractéristique qu'elle peut agir aussi bien comme définition de types simples que de types complexes, d'après le contexte. Plus précisément, les ·restrictions· de la définition de type ur peuvent elles-mêmes être des définitions de type simple ou complexe.
[Définition :] Une définition de type utilisée comme base d'une ·extension· ou d'une ·restriction· est connue sous le nom de définition du type de base de cette définition.
La définition d'un type simple A est un ensemble d'une part de contraintes mises sur les chaînes de caractères et d'autre part d'informations sur les valeurs qu'elles représentent, applicable à la ·valeur normalisée· d'une unité d'information de type attribut ou élément (à condition que l'élément n'ait pas d'élément enfant). De manière informelle, cela veut dire qu'un type simple ne s'applique qu'à des valeurs d'attributs et au contenu textuel d'éléments.
Chaque définition de type simple, qu'elle soit préfabriquée (c'est à dire, définie dans [XML Schema tome 2 : Types de données]) ou qu'elle soit définie par l'utilisateur, est une ·restriction· de la ·définition d'un type de base· simple. Pour les types primitifs préfabriqués, il s'agit de la version simple de la ·définition du type ur·, dont le nom est anySimpleType. Celui-là, à son tour, est également considéré comme étant une restriction de la ·définition du type ur·. Un type simple peut très bien être constitué de membres étant des listes d'unités elles-mêmes contraintes par d'éventuelles autres définitions de types simples ou de membres définis comme étant le résultat de l'union des ensembles de membres d'autres définitions de types simples. Les définitions des types simples qui sont des listes et des unions sont aussi considérées comme étant des restrictions de ·la définition du type simple ur·.
Pour avoir des informations détaillées sur les définitions de types simples, nous vous renvoyons au chapitre Définitions des types simples (§3.14) et à [XML Schema tome 2 : Types de données]. La dernière référence définit aussi un large inventaire de types simples préfabriqués.
La définition d'un type complexe est un ensemble composé de déclarations d'attributs et d'un type de contenu, applicable respectivement aux [attributs] et aux [enfants] d'une unité d'information de type élément. Le type de contenu peut spécifier que les [enfants] ne contiennent ni unité d'information de type élément ni caractère (cela signifie qu'ils sont vides), ou que leur contenu est une chaîne de caractères d'un type simple particulier ou encore qu'il est constitué d'une séquence d'unités d'information de type élément conforme à un groupe modèle particulier, cela avec ou sans unité d'information de type caractère.
Chaque définition de type complexe est soit
soit
soit
L'extension d'un type complexe est obtenue soit en rajoutant des particules de modèle de contenu à la fin des définitions du modèle de contenu du type d'origine soit en rajoutant des déclarations d'attributs soit les deux.
Remarque : Cette spécification limite l'extension au seul rajout de définitions à la fin de la définition de type d'origine. Cette décision simplifie grandement le développement des applications qui doivent développer les types dérivés des types de base. Il se pourrait que des versions futures de la spécification autorisent d'autres formes d'extensions, nécessitant alors de la part des programmes des transformations plus complexes pour calculer ces types dérivés.
Pour avoir des informations détaillées sur la définition de types complexes, nous vous renvoyons au chapitre Définitions des types complexes (§3.4).
Il y a trois types de composants de déclarations (élément, attribut et notation) qui sont décrits dans les sous-chapitres ci-dessous. Nous présentons également la fonction du groupe de substitution d'élément qui s'utilise pour les déclarations d'éléments.
Une déclaration d'élément est l'association d'un nom avec : la définition
d'un type (simple ou complexe), une valeur par défaut (qui est optionnelle)
et un ensemble (qui peut être vide) de définitions de contrainte d'identité.
L'association est soit de portée globale soit limitée au champ d'application
de la définition de type complexe qui la contient. Une déclaration supérieure
d'élément ayant le nom 'A' est largement comparable à la paire de
déclarations (<!ELEMENT
et <!ATTLIST
) connue
avec les DTD comme dans l'exemple ci-après, où les définitions des types
associés au nom A se trouvent à la place des trois points :
<!ELEMENT A . . .> <!ATTLIST A . . .>
Les déclarations d'éléments participent à la ·validation· en tant qu'élément de référence servant à ·valider· un groupe modèle quand leurs composants de type et leurs valeurs par défaut sont contrôlés par rapport à une unité d'information de type élément dont le nom et l'espace de noms correspondent et quand est déclenchée la ·validation· de la définition de la contrainte d'identité.
Pour de plus amples informations sur les déclarations d'éléments, reportez-vous au chapitre Déclaration d'élément (§3.3).
En XML 1.0, le nom et le contenu d'un élément doit correspondre à l'élément type référencé dans le modèle de contenu correspondant.
[Définition :] Au travers du nouveau mécanisme des groupes de substitution d'élément, XML Schema fournit un modèle plus puissant supportant la substitution d'un élément nommé par un autre. Toute déclaration supérieure d'élément peut servir d'élément définissant, ou tête, d'un groupe de substitution d'éléments. D'autres déclarations supérieures d'éléments, indépendamment de l'espace de noms cible, peuvent faire partie du groupe de substitution dont le chef de file est cet élément. Dans un modèle de contenu qui y est autorisé, une référence au chef de file ne limite pas la ·validation· à ce seul élément mais l'étend à tous les éléments qui ont un homologue dans le groupe de substitution.
Tous les membres dans ce cas doivent avoir des définitions de types qui sont soit les mêmes que la définition de type de l'élément chef de file ou qui en sont soit des restrictions soit des extensions. Par conséquent, bien que les noms des éléments puissent varier considérablement au fur et à mesure que de nouveaux espaces de noms et membres du groupe de substitution sont définis, le contenu des éléments membres est strictement limité d'après la définition de type de l'élément chef de file du groupe de substitution.
Remarquez que les groupes de substitution d'éléments ne sont pas représentés comme étant des composants séparés. Ils sont spécifiés par le biais de la valeur d'une des propriété des déclarations d'éléments (reportez-vous au chapitre Déclaration d'élément (§3.3)).
Une déclaration d'attribut est une association entre un nom et une définition de type simple, complétée d'une information d'occurrence et (optionnellement) d'une valeur par défaut. L'association est soit globale soit locale à la définition de type complexe qui la chapeaute. Les déclarations d'attributs participent à la ·validation· en tant qu'élément de référence servant à ·valider· la définition d'un type complexe, quand leur occurrence, valeurs par défaut et composants de type sont contrôlés par rapport à une unité d'information de type attribut dont le nom et l'espace de noms correspondent.
Pour avoir des informations détaillées sur ces déclarations d'attributs, référez-vous au chapitre Déclarations d'attributs (§3.2).
Une déclaration de notation est une association entre un nom et un
identifiant de notation. Pour qu'une unité d'information de type attribut
soit ·valide· par rapport à
une définition de type simple de NOTATION
, la déclaration de sa
valeur doit avoir été initialement associée à une déclaration de notation.
Pour avoir des informations détaillées sur les déclarations de notations, reportez-vous au chapitre Déclarations des notations (§3.12).
Les composants d'un groupe modèle, d'une particule et d'un caractère générique participent d'une certaine façon à la partie de la définition d'un type complexe qui concerne le contrôle du contenu d'une unité d'information de type élément.
Un groupe modèle est une contrainte exprimée sous la forme d'un fragment de grammaire qui s'applique à des listes d'unités d'information de type élément. Il est constitué d'une liste de particules, comme des déclarations d'éléments, des caractères génériques et des groupes modèles. Il y a trois sortes de groupes modèles :
Pour avoir les informations détaillées sur les groupes modèles, reportez vous au chapitre Groupes modèles (§3.8).
Une particule est un terme de la grammaire des contenus d'éléments qui correspond soit à une déclaration d'élément soit à un caractère générique soit à un groupe modèle et à des contraintes d'occurrence. Les particules participent à la ·validation· en tant qu'élément de référence servant à ·valider· des définitions de types complexes, dans lesquelles leur rôle et de permettre à tout moment la présence de zéro à n unités ou séquences d'information de type élément, en fonction de leurs contenus et des contraintes d'occurrence.
[Définition :] Une particule peut être utilisée dans une définition de type complexe pour contraindre la ·validation· des [enfants] d'une unité d'information de type élément ; une telle particule est appelée modèle de contenu.
Remarque : Les ·modèles de contenu· de XML Schema tome 1 : Structures sont comparables tout en étant plus expressifs à ceux de [XML 1.0 (Second Edition)] ; la nouveauté par rapport à [XML 1.0 (Second Edition)], est que XML Schema tome 1 : Structures applique le principe des ·modèles de contenu· à la ·validation· des modèles de contenu mixte alors que [XML 1.0 (Second Edition)] en limitait l'usage aux seuls contenus constitués uniquement d'éléments.
Pour avoir des informations détaillées sur ces particules, reportez-vous au chapitre Particules (§3.9).
L'utilisation d'un attribut joue un rôle similaire à celui d'une particule mais pour des déclarations d'attributs : une déclaration d'attribut à l'intérieur de la définition d'un type complexe est encapsulée par un attribut utilisé qui permet de spécifier si il est obligatoire ou optionnel et si sa valeur existe par défaut et si elle est fixée.
Un caractère générique est un type spécial de particule qui correspond à des unités d'information de type attribut et élément qui dépendent de leur nom d'espace de noms, indépendamment de leurs noms locaux.
Pour avoir des informations détaillées sur les caractères génériques, reportez-vous au chapitre Caractères génériques (§3.10).
Une définition de contrainte d'identité est une association entre un nom et une ou plusieurs variétés de contraintes d'identités en rapport avec l'unicité et le référencement. Toutes les variétés utilisent des expressions [XPath] pour cibler les unités d'information concernées par les contraintes spécifiques et qui doivent être uniques, former une clé ou être une référence ·valide· à l'intérieur d'un espace spécifié. Une unité d'information de type élément est ·valide· par rapport à une déclaration d'élément ayant de telles contraintes d'identité si et seulement si elles sont satisfaites pour tous les descendants de l'unité d'information élément visés par les contraintes.
Pour avoir des informations détaillées sur les définitions de contrainte d'identité, reportez-vous au chapitre Définitions de la contrainte d'identité (§3.11).
Il y a deux sortes de définitions qui sont pratiques pour permettre la réutilisation de parties de définitions de types complexes : les définitions de groupes modèles et les définitions de groupes d'attributs.
Une définition de groupe modèle est une association entre un nom et un groupe modèle, en permettant ainsi la réutilisation dans plusieurs autres définitions de types complexes.
Pour avoir des informations détaillées sur les définitions des groupes modèles, reportez-vous au chapitre définitions des groupes modèles (§3.7).
Une définition de groupe attribut est une association entre un nom et un ensemble de déclarations d'attributs, en permettant ainsi la réutilisation dans plusieurs autres définitions de types complexes.
Pour avoir des informations détaillées sur ces définitions de groupes d'attributs, reportez-vous au chapitre définitions de groupes d'attributs (§3.6).
Une annotation est une information qui peut être exploitée tout aussi bien par des humains que par un mécanisme mécanique. Mais l'interprétation de ce type d'information n'est pas définie dans cette spécification.
Pour avoir des informations détaillées sur les annotations, reportez-vous au chapitre annotations (§3.13).
La spécification [XML 1.0 (Second Edition)] décrit
deux types de contraintes qui peuvent porter sur des documents XML : l'une
porte sur la qualité de la forme et l'autre sur la validité. De
manière informelle, la contrainte de qualité de la forme est celle
imposée par la définition même de XML (tel que par exemple les règles
d'utilisation des caractères <
et >
et celles
d'imbrication des éléments) tandis que les contraintes de validité sont des
contraintes supplémentaires qui s'appliquent à la structure du document par
rapport aux règles édictées dans une DTD.
Le chapitre précédent est centré sur les questions de ·validation·, c'est à dire sur les contraintes imposées aux unités d'information spécifiées par les composants de schéma. En fait, cette spécification fournit quatre sortes différentes d'expressions normatives portant sur les composants de schéma, leur représentation XML et leurs contributions à la ·validation· des unités d'information :
Le dernier des points précédents, celui portant sur les contributions à
l'ensemble d'information du schéma, n'est pas aussi nouveau qu'il n'y paraît.
Le processus de validation de XML 1.0 apporte aussi ces compléments
d'information, par exemple en insérant les valeurs par défaut des attributs
initialement absents dans l'instance et en exploitant implicitement les
informations de typage pour la normalisation ou l'accès (en guise d'exemple
pour ce dernier cas, considérez l'effet du type NMTOKENS
sur
l'espace blanc des attributs et la sémantique
ID
/IDREF
). En incluant à cette spécification les
contributions à l'ensemble d'information des schémas, elle rend explicite
certaines dispositions implicites de XML 1.0.
Cette spécification décrit trois niveaux de conformité pour les programmes de traitement validant. Le premier niveau est obligatoire pour tous les programmes. Le support des deux autres dépend des environnements applicatifs pour lesquels le programme est prévu.
[Définition :] Les programmes de traitement qui ont un niveau de conformité minimale doivent complètement et correctement mettre en application les ·Contraintes des composants de schéma·, les ·règles de validation· et les ·contributions à l'ensemble d'information du schéma· contenues dans cette spécification.
[Définition :] Les programmes de traitement qui acceptent les schémas représentés sous la forme de documents XML tels qu'ils sont décrits au chapitre Niveau 2 : documents XML de type schéma, espaces de noms et assemblage (§4.2) sont de plus dits fournir une conformité avec la représentation XML des schémas. Ces programmes de traitement doivent, quand ils traitent des documents de type schéma, complètement et correctement exécuter toutes les ·contraintes de représentation des schémas· décrites dans cette spécification et doivent adhérer exactement aux spécifications du chapitre Détails sur les composants de schéma (§3) pour faire correspondre le contenu de tels documents à des ·composants de schéma· et les utiliser lors de la ·validation· et de ·l'évaluation·.
Remarque : En faisant la distinction entre les exigences de conformité relatives à la syntaxe concrète des documents XML de type schéma, cette spécification admet que les programmes de traitement puissent utiliser des schémas qui sont soit enregistrés sous la forme de représentations binaires optimisées, soit créés dynamiquement en les considérant comme langage de programmation de données structurées soit compilés pour donner des programmes exécutables en C ou Java. De tels programmes de traitement peuvent être dits avoir un niveau de ·conformité minimale· sans être nécessairement en ·conformité avec la représentation XML des schémas·.
[Définition :] les programmes de traitement complètement conforme sont ceux qui permettent de fonctionner en réseau et qui vont au delà de la ·conformité minimale· et de la ·conformité avec la représentation XML des schémas· en étant capables d'aller chercher des schémas sur le World Wide Web d'après la Représentation des schémas sur le World Wide Web (§2.7) et le chapitre sur Comment les définitions des schémas sont repérées sur le Web (§4.3.2). .
Remarque : Bien que cette spécification ne fournisse que ces trois niveaux de conformité en standard, on anticipe le fait que d'autres conventions puissent être établies dans le futur. Par exemple, le World Wide Web Consortium réfléchit à des conventions pour mettre à disposition sur le Web une variété de ressources relatives à des documents et des espaces de noms particuliers. Si de tels développements devaient conduire à de nouvelles formes de représentation des schémas, ne serait-ce que pour pouvoir y accéder à partir du Web, alors de nouveaux niveaux de conformité pourraient être établis et baptisés à ce moment là. Il n'y aura alors pas besoin de modifier ou de republier cette spécification pour définir ces nouveaux niveaux de conformité.
Reportez-vous au chapitre sur les Schémas et les espaces de noms : accès et assemblage (§4) pour une explication plus détaillée des mécanismes supportant ces niveaux de conformité.
Comme cela a été présenté au chapitre Modèle de données abstrait de XML (§2.2), la plupart des composants de schéma ont des ·noms· (ce n'est pas une obligation). Si tous ces noms étaient mis en commun, alors il serait impossible d'avoir, par exemple, une définition de type simple et une déclaration d'élément ayant le même nom "title" en même temps et dans le même ·espace de noms cible·.
Par conséquent [Définition :] Cette spécification introduit la notion d'espace de symboles pour dénoter une collection de noms dans laquelle chacun est unique vis à vis des autres. Un espace de symboles est similaire au concept non-normatif de partition d'espace de noms introduit dans [XML-Namespaces]. Par ·espace de noms cible·, il y a un seul espace symbole distinct des autres par type de composant de définition et de déclaration identifié au chapitre Modèle de données abstrait de XML (§2.2). A l'exception de celles se trouvant à l'intérieur d'un espace de noms cible, les définitions de types simples et complexes partagent un même espace de symboles. Les noms sont uniques à l'intérieur d'un espace de symboles donné mais un même nom peut apparaître dans plusieurs espaces de symboles sans qu'il y ait conflit. Par exemple, le même nom peut apparaître à la fois dans une définition de type et une déclaration d'élément, sans conflit ou relation particulière entre les deux.
Les déclarations d'attributs et d'éléments de portée locale sont des cas
particuliers au regard des espaces de symboles. Chaque définition de type
complexe définit ses propres espaces de symboles pour les déclarations
locales d'attributs et d'éléments, distincts les uns des autres comme de tout
autre espace de symboles. Ainsi, par exemple, deux définitions de types
complexes ayant le même espace de noms cible peuvent contenir toutes les deux
une même déclaration locale d'un attribut de nom non-qualifié
"priority
" ou une même déclaration locale d'élément de nom
"address
", sans qu'il y ait de conflit ou une relation
nécessaire entre les deux.
La représentation XML de composants de schéma utilise un vocabulaire
identifié par le nom d'espace de noms
http://www.w3.org/2001/XMLSchema
. Pour simplifier le texte et
les exemples présents dans cette spécification, on y utilise systématiquement
le préfixe xs:
pour faire référence à cet espace de nom ; en
réalité, n'importe quel préfixe pourrait être utilisé.
XML Schema tome 1: Structures a aussi plusieurs attributs
préfabriqués destinés à être utilisés directement dans tout document XML. Ces
attributs sont dans un espace de noms différent, qui a le nom d'espace de
noms http://www.w3.org/2001/XMLSchema-instance
. Pour simplifier
le texte et les exemples de cette spécification, on utilise systématiquement
le préfixe xsi:
pour référencer cet espace de noms ; en réalité,
n'importe quel préfixe aurait pu être utilisé. Tous les programmes de
traitement des schémas ont des déclarations d'attributs appropriées pour ces
attributs préfabriqués, reportez-vous au chapitre Déclaration d'attribut de l'attribut 'type
'
(§3.2.7), Déclaration d'attribut de l'attribut
'nil
' (§3.2.7), Déclaration
d'attribut de l'attribut 'schemaLocation
' (§3.2.7) et Déclaration d'attribut de l'attribut
'noNamespaceSchemaLocation' (§3.2.7).
xsi:type
La définition de type simple
(§2.2.1.2) ou la définition de type
complexe (§2.2.1.3) utilisée dans la ·validation· d'un élément est habituellement déterminée par une
référence aux composants de schéma. Une unité d'information de type élément
dans une instance peut, cependant, déclarer explicitement son type en
utilisant l'attribut xsi:type
. La valeur de cet attribut est un
·QName· ; reportez-vous au chapitre Interprétation des noms qualifiés (QName) (§3.15.3)
pour connaître la manière dont un ·QName· est associé à une définition de type.
xsi:nil
XML Schema tome1 : Structures introduit un mécanisme permettant
d'indiquer explicitement si un élément doit être accepté comme ·valide· quand il est vide même si cela n'est pas exigé par
son type ou même se contente de l'autoriser. Un élément peut être ·valide· tout en n'ayant pas de contenu à condition qu'il
soit porteur de l'attribut xsi:nil
ayant la valeur
vrai
. Un élément ainsi labellisé doit être vide mais peut être
porteur d'attributs si cela est permis par le type complexe qui lui est
associé.
xsi:schemaLocation
,
xsi:noNamespaceSchemaLocation
Les attributs xsi:schemaLocation
et
xsi:noNamespaceSchemaLocation
peuvent être utilisés dans un
document pour fournir des indications concernant l'emplacement physique des
documents contenant les schémas susceptibles d'être utilisés à l'occasion
d'une ·évaluation·.
Reportez-vous au chapitre Comment sont localisées les
définitions de schéma sur le Web (§4.3.2) pour connaître les détails
quant à l'utilisation de ces attributs.
Sur le World Wide Web, les schémas sont conventionnellement représentés
comme des documents XML (ayant de préférence un type MIME
application/xml
ou text/xml
, mais regardez la
clause 1.1 du chapitre Contraintes et sémantique de l'inclusion (§4.2.1)),
conformes aux spécifications du chapitre Niveau 2 :
Documents de type schéma, espaces de noms et assemblage (§4.2). Pour plus
d'informations sur la représentation et l'utilisation des documents de type
schéma sur le World Wide Web reportez-vous aux chapitres Standards pour la représentation des schémas et
récupération de documents de type schéma sur le Web (§4.3.1) et Comment sont localisées les définitions de schéma sur le
Web (§4.3.2).
Les chapitres qui suivent fournissent tous les détails quant à l'assemblage de tous les composants de schéma, avec leur représentation XML et leurs contributions à ·l'évaluation·. Chaque chapitre est dévolu à un seul composant, au travers de différents sous-chapitres qui sont :
Les sous-chapitres immédiatement ci-dessous introduisent les conventions et la terminologie utilisée tout au long des chapitres sur les composants.
Les composants sont définis au travers de leurs propriétés dont chacune
est à son tour définie en donnant la fourchette de valeurs qu'elle peut
prendre. Cela peut être compris comme définissant un schéma comme étant un
arbre d'objets étiquetés où la racine est un composant schema
,
les sommets sont soit un composant de schéma soit un littéral (chaîne de
caractères, booléen, nombre) et où chaque branche étiquetée est une
propriété. Le graphe n'est pas acyclique : aucune copie d'un composant ayant
le même nom et se trouvant dans le même ·espace de symboles· ne peut exister, ce qui impose d'avoir parfois des
chaînes de propriétés ré-entrantes. L'égalité des composants pour les besoins
de cette spécification est toujours définie comme étant l'égalité des noms (y
compris les espaces de noms cibles) à l'intérieur des espaces symboles.
Remarque : Un schéma et ses composants tels que définis dans ce chapitre sont une forme idéalisée de l'information nécessaire à un programme validant : les mises en application n'ont aucune obligation particulière quant à la manière de les fournir. En particulier, aucune implication particulière entre l'inclusion littérale versus l'indirection ne découle de l'utilisation d'un langage tel que "des propriétés . . . ayant . . . des composants comme valeurs".
[Définition :] Tout au long de cette spécification, le terme absent est utilisé comme étant une valeur de propriété distincte pour dénoter l'absence d'utilisation de cette propriété.
Toute propriété qui ne serait pas identifiée comme optionnelle est
obligatoirement présente ; les propriétés facultatives qui ne sont pas
présentes sont sensées être ·absentes·. Toute
propriété identifiée comme ayant un ensemble, un sous-ensemble ou une liste
de valeurs peut avoir une valeur vide sauf si cela est explicitement exclu :
cela n'est pas la même chose que d'être ·absent·. Toute valeur de propriété identifiée comme
sur-ensemble ou sous-ensemble d'un ensemble quelconque peut être égale à cet
ensemble, sauf si un sur-ensemble ou un sous-ensemble propre est
explicitement demandé. Dans cette spécification, on entend par
'string
' une séquence de caractères ISO 10646 reconnus comme Caractères XML
légaux dans [XML 1.0 (Second Edition)].
L'objectif principal de XML Schema tome1 : Structures est de
définir un ensemble de composants de schéma qui imposent des contraintes aux
contenus des instances et augmentent les ensembles d'information lors de la
validation ou de l'évaluation. Bien qu'aucune représentation externe des
schémas ne soit obligatoire dans ce but, de telles représentations seront
évidemment largement utilisées. Pour répondre à ce besoin de manière adaptée
et interopérable, cette spécification fournit une représentation normative
des schémas en XML qui se charge de cette question dans chaque cas de
composant de schéma. [Définition :] Un document de cette forme (c'est à
dire une unité d'information de type élément <schema> ) est un document de type
schéma. Tant pour le document de type schéma dans sa globalité que
pour ses constituants, les chapitres ci-dessous définissent des
correspondances entre les unités d'information de type élément (dont les
déclarations sont dans le Schéma des
schémas (§A) et la DTD des schémas
(§G)) et les composants de schéma. Toutes les unités d'information de
type élément de la représentation XML d'un schéma doivent être dans l'espace
de noms des schémas XML, c'est à dire que leur [nom d'espace de
noms] doit être http://www.w3.org/2001/XMLSchema
. Bien
qu'une manière commune de créer l'ensemble d'information XML qui est lui-même
ou contient des ·documents de type schéma· sera d'utiliser un programme de validation
lexico-syntaxique XML (parser), cela n'est pas obligatoire : tout mécanisme
capable de construire des ensembles d'informations conformes à ceux définis
dans le dictionnaire terminologique de XML [XML-Infoset] est un point de départ possible.
Deux aspects de la représentation XML des composants présentée dans les chapitres qui suivent sont communs à toutes les représentations :
<annotation>
comme
premier enfant à des fins de lisibilité de la documentation et/ou de
traitement par un programme.A chaque sorte de composant de schéma correspond une représentation normative XML. Les chapitres ci-dessous décrivent les correspondances entre les propriétés de chaque sorte de composant de schéma d'un côté et les propriétés des unités d'information de la représentation XML de l'autre, avec des contraintes propres à cette représentation et qui viennent se rajouter à celles du Schéma des schémas (partie normative) (§A).
La forme utilisée pour représenter les correspondances est une relation qui part d'une représentation XML pour aller à un composant de schéma, et le chemin inverse, celui des correspondances à partir du modèle abstrait, peut être construit à partir de là.
En discutant des représentations XML vers les composants de schéma ci-dessous, la valeur de la propriété d'un composant est souvent déterminée par la valeur d'une unité d'information de type attribut qui est elle-même l'un des [attributs] d'une unité d'information de type élément. Puisque les documents de type schéma sont contraints par le Schéma des schémas (§A), il y a toujours une définition de type simple associée à tout élément d'information de type attribut. [Définition :] La phrase valeur réelle est utilisée pour faire référence au membre de l'espace de valeur de la définition de type simple associée à une unité d'information de type attribut qui correspond à sa ·valeur normalisée·. Cela sera souvent une chaîne de caractères, mais peut tout aussi bien être un entier, un booléen, une référence d'URI, etc. Ce terme est aussi occasionnellement utilisé pour ce qui concerne des unités d'information de type élément ou attribut d'un document en cours de ·validation·.
Beaucoup de propriétés ci-après sont susceptibles d'avoir des valeurs contenant d'autres composants de schéma ou des ensembles de composants. Pour les besoins de la clarté du texte, les définitions de ce chapitre supposent que (à moins que la propriété ne soit explicitement identifiée comme facultative) toutes ces possibilités de valeurs sont effectivement présentes. Quand les composants de schéma sont construits à partir de représentations XML qui impliquent une référence par un nom à d'autres composants, la supposition faite ci-dessus peut être violée si une ou plusieurs références ne peuvent pas être ramenées. Cette spécification adresse de manière uniforme la question des composants manquant au chapitre Sous-composants manquant (§5.3) : aucune mention relative à la manière de gérer le cas des composants manquant ne sera trouvée dans les descriptions individuelles des composants ci-après.
Une référence en avant vers des définitions nommées et des déclarations est autorisée, cela se faisant à l'intérieur ou entre des ·documents de type schéma·. Avant que le composant correspondant à la représentation XML contenant une référence en avant soit réellement nécessaire à la ·validation·, un composant de nom approprié peut avoir été rendu disponible pour décharger la référence : reportez-vous au chapitre sur les Schémas et les espaces de noms : accès et assemblage (§4) pour les détails.
Tout au long de cette spécification, [Définition :] la valeur initiale d'une unité d'information de type attribut est la valeur de la [valeur normalisée] de la propriété de cette unité. De manière similaire, la valeur initiale d'une unité d'information de type élément est la chaîne de caractères composée, dans l'ordre, du [code du caractère] de chaque unité d'information de type caractère des [enfants] de cette unité d'information de type élément.
La définition ci-dessus signifie que les commentaires et les instructions de traitement, même au milieu du texte, sont ignorées dans tous les cas de ·validation·.
[Définition :] La valeur
normalisée d'une unité d'information de type attribut ou élément est une
·valeur
initiale· dans laquelle l'espace blanc, si il
existe, a été normalisé d'après la valeur de la facette
whiteSpace
de la définition du type simple utilisé dans sa
·validation· :
preserve
replace
#x9
(tabulation),
#xA
(début de ligne) et #xD
(retour chariot)
sont remplacées par le code #x20
(espace).collapse
#x20
sont
ramenées à un seul #x20
, et les espaces initiaux et finaux
sont détruits.Il y a trois règles de validation alternatives qui peuvent fournir un complément nécessaire à ce qui vient d'être écrit, il s'agit des clauses : Attribut localement valide (§3.2.4) (clause 3), Elément localement valide (type) (§3.3.4) (clause 3.1.3) et Elément localement valide (type complexe) (§3.4.4) (clause 2.2).
Ces trois niveaux de normalisation correspondent aux traitements
respectifs de XML 1.0 pour les contenus d'éléments, les contenus d'attributs
de type CDATA et les contenus d'attributs composés d'unités lexicales.
Reportez-vous au chapitre Normalisation des valeurs
d'attributs dans [XML 1.0 (Second Edition)] pour y
retrouver les cas replace et collapse pour les attributs.
Etendre ces cas au contenu des éléments est nécessaire pour garantir une ·validation· uniforme de la sémantique des types simples,
qu'ils soient utilisés pour des valeurs d'attributs comme pour des valeurs de
contenu d'éléments. Faire le traitement deux fois dans le cas des attributs
dont la [valeur
normalisée] a déjà été sujette au remplacement ou déjà compressée (cas
collapse
) sur la base de l'information présente dans la DTD est
nécessaire pour garantir un traitement des attributs totalement indépendant
de la capacité réelle ou supposée des outils de production de l'ensemble
d'information à prendre en compte les informations fournies par la DTD.
Remarque : Même quand l'information provenant de la DTD a été strictement respectée et que la normalisation des valeurs d'attributs a été faite, la définition ci-dessus d'une ·valeur normalisée· ne change pas le fait que des normalisations supplémentaires soient nécessaires. C'est le cas par exemple quand des valeurs d'attributs contiennent des références d'entités caractères et que leur remplacement produit des caractères d'espaces blancs autres que ceux se trouvant dans la ·valeur initiale· de l'attribut.
Les déclarations d'attributs servent à :
<xs:attribute name="age" type="xs:positiveInteger" use="required"/>
Le composant de schéma de déclaration d'attribut a les propriétés suivantes :
La propriété {nom} doit correspondre à la partie locale des noms des attributs étant ·validés·.
La valeur de l'attribut doit être conforme à la {définition de type} fournie.
Quand la propriété {espace de noms cible} est présente (elle n'est donc pas ·absente·), elle sert à la ·validation· des unités d'information de type attribut qualifiées par un espace de nom (qui doit être explicitement préfixé d'une forme de type caractère du niveau des documents XML). L'·absence· de cette propriété ·valide· les unités qui ne sont pas qualifiées (c'est à dire sans préfixe).
La propriété {portée} permet de connaître, quand la valeur est global, les déclarations d'attributs disponibles pour une utilisation dans n'importe quelle définition de type complexe, dans tout le schéma. Les déclarations de portée locale sont disponibles pour une utilisation uniquement à l'intérieur des définitions de types complexes identifiées par la propriété {portée}. Cette propriété est ·absente· dans le cas où les déclarations sont à l'intérieur des définitions de groupes d'attributs : leur portée sera déterminée quand elles seront utilisées dans la construction de définitions de types complexes.
{contrainte de valeur}
reproduit les fonctions des valeurs d'attributs par défaut et
#FIXED
de XML 1.0 . default spécifie que l'attribut doit
apparaître sans condition particulière dans l'ensemble d'information
résultant de la validation de schéma, la valeur fournie étant celle utilisée
chaque fois que l'attribut n'est pas réellement présent ; fixed
indique que la valeur de l'attribut, si il est présent, doit être égal à la
valeur de la contrainte fournie et, si il est absent, prend la valeur fournie
par défaut. Remarquez que ce sont des valeurs qui sont fournies et/ou
contrôlée et non des chaînes de caractères.
Reportez-vous au chapitre Annotations (§3.13) pour les informations sur le rôle de la propriété {annotation}.
Remarque : Une présentation plus complète et plus formelle de la sémantique des propriétés {nom}, {espace de noms cible} et {contrainte de valeur} est fournie en même temps que d'autres aspects de la ·validation· du type complexe (référez-vous au chapitre Elément localement valide (type complexe) (§3.4.4)).
La spécification [XML-Infoset] fait le
distinguo entre des attributs nommés tels que xmlns
ou
xmlns:xsl
et les attributs ordinaires, identifiant les deux
premiers comme étant des [attributs d'espace
de noms]. En conséquence, il est inutile et en fait impossible que les
schémas contiennent des déclarations d'attributs correspondant à une telle
déclaration d'espace de noms, reportez-vous pour cela au chapitre Interdiction de xmlns (§3.2.6). Rien n'est fourni dans
cette spécification pour fournir une valeur par défaut à une déclaration
d'espace de noms.
La représentation XML d'un composant de schéma pour une déclaration
d'attribut est l'unité d'information de type élément <attribute>
. Elle spécifie
pour un attribut une définition de type simple soit par référence soit
explicitement et peut fournir une information par défaut. Les correspondances
entre la propriété de l'unité d'information et les propriétés du composant
sont les suivantes :
attribute
<attribute
default = string
fixed = string
form = (qualified | unqualified)
id = ID
name = NCName
ref = QName
type = QName
use = (optional | prohibited |
required) : optional
{tout attribut ayant un espace de noms différent de celui du schéma . .
.}>
Content: (annotation?, (simpleType?))
</attribute>
Composant de schéma :Déclaration d'attribut | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
ref
est absent, alors, ce cas correspond à l'utilisation de
l'attribut ayant les propriétés suivantes (à moins que
use='prohibited'
, auquel cas l'unité correspond à rien du tout)
:Composant de schéma : attribut utilisé | ||||||||
---|---|---|---|---|---|---|---|---|
|
Composant de schéma Déclaration d'attribut | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
ref
est présent), il correspond à un attribut utilisé avec les
propriétés suivantes (sauf si use='prohibé'
, auquel cas l'unité
correspond à rien du tout) :Composant de schéma attribut utilisé | ||||||||
---|---|---|---|---|---|---|---|---|
|
Les déclarations d'attributs peuvent apparaître au niveau supérieur d'un
document de type schéma ou à l'intérieur d'une définition de types complexes,
soit comme déclaration complète (locale), soit par référence aux déclarations
supérieures, ou à l'intérieur de définitions de groupes d'attributs. Pour
avoir des déclarations complètes, qu'elles soient locales ou supérieures,
l'attribut type
est utilisé quand la déclaration fait appel à la
définition d'un type simple préfabriqué ou prédéclaré. Sinon un type anonyme
<simpleType> est
fourni en ligne.
L'option par défaut quand aucune définition de type simple n'est référencée ou fournie est l'utilisation de la simple ·définition du type ur· qui n'impose aucune contrainte du tout.
Les unités d'information de type attribut ·validées· par une déclaration supérieure doivent être
qualifiées de {l'espace de noms
cible} de cette déclaration (si celle-là est ·absente·, l'unité n'a pas à être qualifiée). Le contrôle
pour savoir si les unités d'information de type attribut ·validées· par une déclaration locale doivent être qualifiées
de manière similaire ou non dépend de [l'attribut]
form
dont la valeur par défaut est fournie par [l'attribut]
attributeFormDefault
de l'élément englobant <schema>, via sa détermination {d'espace de noms cible}.
Les noms des déclarations supérieures d'attributs ont leur propre ·espace de symboles·. Les noms des déclarations d'attributs de portée locale résident dans un espace de symboles local à la définition qui les contient.
default
et fixed
ne doivent pas être
simultanément présents.ref
ou name
doit être
présent, mais pas les deux à la fois.type
et <simpleType> ne doivent pas être
présents ensemble.[Définition :] Pendant la ·validation·, des associations entre les unités d'information [enfants] de type attribut et élément et des [attributs] d'un côté et les déclarations d'attributs et d'éléments de l'autre sont établies comme un effet de bord. De telles déclarations sont appelées déclarations contextuelles. Reportez-vous à la clause 3.1 du chapitre Elément localement valide (type complexe) (§3.4.4) pour les déclarations d'attributs et à la clause 2 du chapitre Série d'éléments localement valide (Particule) (§3.9.4) pour les déclarations d'éléments.
Pour que la validité de schéma d'une unité d'information de type attribut soit évaluée, toutes les conditions suivantes doivent être remplies :
[Définition :] En ce qui concerne les attributs, il n'y a aucune différence entre l'évaluation et la stricte évaluation, donc si ce qu'il y a ci-dessus est vérifié, l'unité d'information de type attribut est strictement évaluée.
Aussi, si la déclaration a une {contrainte de valeur}, l'unité aura la propriété suivante :
Toutes les déclarations d'attributs (référez-vous au chapitre Déclarations d'attributs (§3.2)) doivent satisfaire les contraintes suivantes :
xsi:
interdit http://www.w3.org/2001/XMLSchema-instance
(sauf si il s'agit de
l'une des quatre déclarations préfabriquées données dans le prochain
chapitre).
Remarque : Cela renforce le statut particulier de ces attributs qui, non seulement n'ont pas besoin d'être déclarés pour être autorisés dans les instances, mais de plus ne doivent pas être déclarés. Cela retire également toute tentation d'essayer de fournir des valeurs globales ou fixées comme par exemplexsi:type
ouxsi:nil
, ce qui serait sérieusement trompeur puisque ces valeurs n'auraient strictement aucun effet.
Quatre déclarations d'attributs sont présentes, par définition, dans chaque schéma :
Déclaration d'attribut de l'attribut
'type ' |
||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Déclaration d'attribut de l'attribut 'nil' | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Déclaration d'attribut de
l'attribut schemaLocation |
||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Déclaration d'attribut de
l'attribut noNamespaceSchemaLocation |
||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Une déclaration d'élément sert à :
<xs:element name="PurchaseOrder" type="PurchaseOrderType"/> <xs:element name="gift"> <xs:complexType> <xs:sequence> <xs:element name="birthday" type="xs:date"/> <xs:element ref="PurchaseOrder"/> </xs:sequence> </xs:complexType> </xs:element>
Le composant de schéma de déclaration d'élément a les propriétés suivantes :
Le {nom} doit correspondre à la partie locale des noms des unités d'information de type élément étant ·validés·.
Une {portée} de valeur global identifie les déclarations d'élément disponibles pour une utilisation dans tous les modèles de contenu du schéma. Les déclarations de portée locale sont disponibles pour une utilisation qui se limite au type complexe identifié par la {portée}. Cette propriété est ·absente· dans le cas de déclarations se trouvant à l'intérieur de groupes modèles nommés : leur portée réelle est alors déterminée au moment de leur utilisation dans les définitions de types complexes.
{l'espace de noms cible} est utilisé (quand il n'est pas ·absent·) lors de la ·validation· des unités d'information de type élément qualifiées par un espace de noms. ·L'absence· de {l'espace de noms cible} ·valide· les unités d'information non-qualifiées.
Une unité d'information de type élément est ·valide· si elle satisfait à la {définition de type}. Pour une telle unité, les contributions à l'ensemble d'information du schéma proviennent de la {définition de type} et sont ajoutées à l'unité d'information de type élément correspondante dans l'ensemble d'information résultant de la validation de schéma.
Si le paramètre {annulable} est
true, cela signifie qu'un élément peut être ·valide· si il est porteur d'un attribut qualifié d'espace
de noms ayant un [nom local]
nil
issu de l'espace de noms
http://www.w3.org/2001/XMLSchema-instance
et la valeur
true
(référez-vous au chapitre xsi:nil
(§2.6.2)) même en ayant aucun contenu de type textuel ou composé de
sous-éléments alors que son {type de
contenu} pourrait le demander voir même l'exiger. Les détails formels
concernant la ·validation· des éléments
sont décrits au chapitre Elément localement valide
(Elément) (§3.3.4).
La {contrainte de valeur} définit quelle est la valeur par défaut ou la valeur fixée d'un élément. Si default est spécifié et si l'élément en cours de ·validation· est vide alors la forme canonique de la valeur de la contrainte fournie devient la [valeur normalisée par le schéma] de l'élément ·validé· dans l'ensemble d'information résultant de la validation de schéma. Si fixed est spécifié, alors le contenu de l'élément doit être soit vide, auquel cas fixed se comporte comme default, soit correspondre à la valeur de la contrainte fournie.
Remarque : la fourniture de valeurs par défaut pour les contenus d'éléments va au delà de ce qu'il est possible de faire avec les DTD de XML 1.0 et est légèrement différent du système des valeurs par défaut pour les attributs. En particulier, un élément ayant une{contrainte de valeur} non vide dont la définition de type simple inclue la chaîne de caractères vide dans son espace lexical ne recevra néanmoins jamais cette valeur, parce que la {contrainte de valeur} l'ignorera.
Les {définitions de contraintes d'identité} servent à exprimer les contraintes d'unicité et de référencement pour des valeurs d'éléments et d'attributs mis en relation. Reportez-vous au chapitre Définitions de la contrainte d'identité (§3.11).
Les déclarations d'élément sont membres du groupe de substitution, quand il existe, identifié par {l'affiliation du groupe de substitution}. L'appartenance comme membre est une relation transitive mais pas symétrique ; une déclaration d'élément est membre de tout groupe utilisant son {groupe de substitution affilié}.
Un ensemble de {groupes de substitution exclus} vide permet à une déclaration d'être nominée comme pouvant être une {affiliation de groupe de substitution} utilisée dans d'autres déclarations d'éléments ayant la même {définition de type} ou des versions dérivées de ce type. Sinon l'ensemble des {groupes de substitution exclus} exclue explicitement les déclarations d'éléments dont les {définitions de type} sont respectivement soit des extensions soit des restrictions . Si les deux valeurs sont spécifiées, cela interdit le référencement de la déclaration à partir d'autres déclarations via {l'affiliation d'un groupe de substitution}.
L'ensemble des {substitutions
rejetées} permet de déterminer si une déclaration d'élément utilisée dans
un ·modèle de contenu· sera
empêchée d'avoir des éléments de ·validation·
supplémentaires (a) ayant un xsi:type
(§2.6.1) identifiant une extension ou une restriction du
type de l'élément déclaré, et/ou (b) issus d'éléments de ·validation· qui sont dans le groupe de substitution dont
l'élément déclaré est le chef de file. Si l'ensemble des {substitutions rejetées} est vide, alors tous les membres
des types dérivés et des groupes de substitution sont autorisés.
Les déclarations d'élément {abstraites} peuvent apparaître dans des modèles de contenu seulement quand la substitution est autorisée ; de telles déclarations peuvent elles-mêmes n'être jamais utilisées pour ·valider· un contenu d'élément.
Reportez-vous au chapitre Annotations (§3.13) pour avoir les informations sur les possibilités des {annotations}.
La représentation XML du composant de schéma d'une déclaration d'élément est l'unité d'information de type élément <element>. Elle spécifie la définition de type d'un élément soit par référence soit explicitement et peut fournir des informations sur les occurrences et les valeurs par défaut. Les correspondances entre les propriétés de l'unité d'information et celles du(des) composant(s) qui lui correspond(ent) sont celles-ci :
element
<element
abstract = boolean : false
block = (#all | Liste de (extension |
restriction | substitution))
default = string
final = (#all | Liste de (extension |
restriction))
fixed = string
form = (qualified | unqualified)
id = ID
maxOccurs = (nonNegativeInteger
| unbounded) : 1
minOccurs = nonNegativeInteger : 1
name = NCName
annulable = boolean : false
ref = QName
substitutionGroup = QName
type = QName
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, ((simpleType | complexType)?, (unique | key | keyref)*))
</element>
Composant de schéma :Déclaration d'élément | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
ref
est absent, alors les composants de schéma correspondant
sont ceux qui suivent (sauf si minOccurs=maxOccurs=0
, auquel cas
l'unité correspond à aucun composant du tout) :Composant de schéma : Particule | ||||||||
---|---|---|---|---|---|---|---|---|
|
Composant de schéma : Déclaration d'élément | ||||||
---|---|---|---|---|---|---|
|
ref
est présent), le composant de schéma correspondant est comme
suit (sauf si minOccurs=maxOccurs=0
, auquel cas l'unité
correspond à aucun composant du tout) :Composant de schéma : Particule | ||||||||
---|---|---|---|---|---|---|---|---|
|
<element> est la représentation d'une déclaration d'élément dont la définition de type peut être spécifiée soit par référencement soit en étant directement incluse.
Des <element>
directement utilisés sous <schema> produisent des déclarations
d'éléments globales ; quand <element> est à l'intérieur de <group> ou de <complexType>, cela
produit soit des particules qui contiennent des déclarations d'éléments
globales (si il y a un attribut ref
) soit des
déclarations locales. Pour avoir des déclarations complètes, qu'elles soient
de niveau supérieur ou locales, l'attribut type
sert à faire
appel à une définition de type préfabriquée ou pré-déclarée (quand cela est
autorisé). Sinon, un type anonyme simple <simpleType> ou complexe <complexType> est
intégré au corps de la déclaration.
Les unités d'information de type élément ·validées· par une déclaration supérieure doivent être
qualifiées par rapport à {l'espace de noms cible} de cette déclaration
(si celle là est ·absente·, alors l'unité
ne doit pas être qualifiée). La condition qui permet de savoir si les unités
d'information de type élément ·validées· par une
déclaration locale doivent être pareillement qualifiées est fournie par [l'attribut]
form
dont la valeur par défaut est fournie par [l'attribut]
elementFormDefault
de l'élément englobant <schema>, via la détermination de son {espace de noms cible}.
Comme cela a pu être noté ci-dessus, les noms des déclarations supérieures d'éléments sont dans un ·espace de symboles· distinct des espaces de symboles des noms des définitions de types, aussi il peut y avoir (sans que cela soit toutefois nécessaire) une définition de type simple ou complexe ayant le même nom qu'un élément de niveau supérieur. Comme avec les noms d'attributs, les noms des déclarations d'éléments de portée locale sans {espace de noms cible} résident dans les espaces de symboles locaux à la définition de type qui les contient.
Remarquez que le paragraphe ci-dessus autorise d'avoir deux niveaux de
valeurs par défaut pour les définitions de type non spécifiées. Un <element> sans définition de
type, ni par inclusion ni par référencement, correspondra à une déclaration
d'élément qui a la même définition de type que la tête de son groupe de
substitution quand il y en a un d'identifié, sinon ce sera la ·définition du
type ur·. La conséquence très importante de ce
qui vient d'être écrit est que la déclaration d'élément minimum et valide,
c'est à dire celle qui ne contient que l'attribut name
et aucun
contenu, est aussi la plus générale, validant toutes les combinaisons
possibles de texte et de contenu formé de sous-éléments et autorisant l'usage
de n'importe quel attribut.
Reportez-vous au chapitre ci-dessous Représentation XML du composant de schéma de définition de la contrainte d'identité (§3.11.2) pour <key>, <unique> et <keyref>.
<xs:element name="unconstrained"/> <xs:element name="videElt"> <xs:complexType> <xs:attribute ...>. . .</xs:attribute> </xs:complexType> </xs:element> <xs:element name="contextOne"> <xs:complexType> <xs:sequence> <xs:element name="myLocalElement" type="myFirstType"/> <xs:element ref="globalElement"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="contextTwo"> <xs:complexType> <xs:sequence> <xs:element name="myLocalElement" type="mySecondType"/> <xs:element ref="globalElement"/> </xs:sequence> </xs:complexType> </xs:element>
myLocalElement
à l'intérieur de
contextOne
seront contraintes par myFirstType
alors
que celles se trouvant à l'intérieur de contextTwo
seront
contraintes par mySecondType
.Remarque :La possibilité d'exprimer que des éléments de même nom puissent avoir des attributs et un contenu différents en fonction de leur contexte d'apparition dans les instances de documents est une nouveauté de XML Schema qui va bien au delà des possibilités permises à l'origine par les DTD in XML 1.0.
<xs:complexType name="facet"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:attribute name="value" use="required"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:element name="facet" type="xs:facet" abstract="true"/> <xs:element name="encoding" substitutionGroup="xs:facet"> <xs:complexType> <xs:complexContent> <xs:restriction base="xs:facet"> <xs:sequence> <xs:element ref="annotation" minOccurs="0"/> </xs:sequence> <xs:attribute name="value" type="xs:encodings"/> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="period" substitutionGroup="xs:facet"> <xs:complexType> <xs:complexContent> <xs:restriction base="xs:facet"> <xs:sequence> <xs:element ref="annotation" minOccurs="0"/> </xs:sequence> <xs:attribute name="value" type="xs:duration"/> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:element> <xs:complexType name="datatype"> <xs:sequence> <xs:element ref="facet" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="name" type="xs:NCName" use="optional"/> . . . </xs:complexType>
facet
est défini et l'élément facet
est
déclaré pour l'utiliser. L'élément facet
est abstrait -- il est
seulement défini pour servir de tête de file au groupe de
substitution. Deux éléments supplémentaires sont déclarés, chacun étant
membre du groupe de substitution facet
. Finalement un type est
défini qui fait référence à facet
, autorisant ainsi soit
period
soit encoding
(ou tout autre membre du
groupe).default
et fixed
ne doivent pas être présents
ensemble.ref
et name
doit être présent, mais pas les deux en même temps.ref
est présent, alors aucun des <complexType>, <simpleType>, <key>, <keyref>, <unique>, nillable
,
default
, fixed
, form
,
block
et type
ne doit être présent, c'est à dire
que seuls sont autorisés minOccurs
, maxOccurs
et
id
en plus de ref
, et bien sûr <annotation>.http://www.w3.org/2001/XMLSchema-instance
et un
[nom local]
de valeur nil
.true
, alors toutes les conditions suivantes
doivent être remplies :
http://www.w3.org/2001/XMLSchema-instance
et dont le [nom local]
est type
, alors toutes les conditions suivantes doivent
être remplies :
http://www.w3.org/2001/XMLSchema-instance
et dont le [nom local]
est type
, nil
, schemaLocation
ou
noNamespaceSchemaLocation
.Reportez-vous au chapitre Tableau des ID/IDREF (§3.15.5) pour y trouver la définition de la [relation] de type ID/IDREF.
Remarque : La première clause ci-dessus s'applique quand il y a une référence à un ID indéfini. La seconde s'applique quand plusieurs ID ont été définis. Ces deux cas sont dissociés pour garantir que des codes d'erreur distincts leurs seront attribués (référez-vous au chapitre Tableaux des résultats (partie normative) (§C)).
Remarque :Bien que cette règle ne s'applique qu'à la ·racine de validation·, en pratique les programmes de traitement, et en particulier ceux qui font du streaming, peuvent espérer détecter et signaler le cas de la clause 2 quand il survient.
Remarque : Cette reconstruction de la fonctionnalité des
ID/IDREF
de [XML 1.0 (Second Edition)]
est imparfaite dans ce sens que si la ·racine de validation· n'est pas l'élément racine d'un document XML,
les résultats ne seront pas nécessairement les mêmes que ceux qui seraient
obtenus avec un analyseur lexico-syntaxique validant le même document mais
à partir d'une DTD comprenant des déclarations équivalentes.
Aussi, pour que la validité de schéma d'une unité d'information de type élément soit évaluée, toutes les conditions suivantes doivent être remplies :
http://www.w3.org/2001/XMLSchema-instance
et dont le [nom local]
est type
.
Remarque : En général, si la clause 1.1
ci-dessus est vérifiée, la clause 1.2 ne l'est pas et
vice versa. Toutefois, quand [l'attribut]
xsi:type
est impliqué, la clause 1.2
devient prioritaire comme cela est mis en évidence au chapitre Elément localement valide (élément)
(§3.3.4).
Remarque :Le {nom} et {l'espace de noms cible} ne sont pas mentionnés ci-dessus parce qu'ils sont contrôlés lors de la phase de ·validation· des particules, comme cela est décrit au chapitre Série d'éléments localement valide (Particule) (§3.9.4).
Toutes les déclarations d'éléments (référez-vous au chapitre déclaration d'élément (§3.3)) doivent satisfaire les contraintes suivantes.
Remarque : L'utilisation du type ID comme définition de type pour des éléments va au delà de ce que permettait de faire XML 1.0 et devrait être évité quand la compatibilité descendante est attendue.
Les contraintes suivantes définissent des relations auxquelles il est fait appel ailleurs dans cette spécification.
Les définitions de types complexes servent à :
<xs:complexType name="PurchaseOrderType"> <xs:sequence> <xs:element name="shipTo" type="USAddress"/> <xs:element name="billTo" type="USAddress"/> <xs:element ref="comment" minOccurs="0"/> <xs:element name="items" type="Items"/> </xs:sequence> <xs:attribute name="orderDate" type="xs:date"/> </xs:complexType>
Le composant de schéma correspondant à la définition d'un type complexe a les propriétés suivantes :
Les définitions de types complexes sont identifiées par leurs {nom} et {espace de noms cible}. Excepté pour les définitions anonymes de types complexes (celles qui n'ont pas de {nom}), puisque les définitions de types (aussi bien des types simples que complexes) doivent être identifiées de manière unique à l'intérieur d'un ·schéma XML·, aucune définition d'un type complexe ne peut avoir le même nom qu'une autre définition de type simple ou complexe. Le {nom} et {l'espace de noms cible} du type complexe sont fournis pour pouvoir y faire référence depuis les instances (référez-vous au chapitre xsi:type (§2.6.1)) et pour les utiliser dans la représentation XML des composants de schéma (spécifiquement dans <element>). Reportez-vous au chapitre Les références aux composants de schéma au travers des espaces de noms (§4.2.3) pour connaître les règles applicables à l'utilisation des identifiants de composants quand un schéma est importé dans un autre.
Remarque : Le {nom} d'un type complexe n'est pas ipso facto le [nom (local)] des unités d'information de type élément ·validées· par cette définition. Le rapport entre un nom et une définition de type est décrit au chapitre déclaration d'élément (§3.3).
Comme cela est décrit au chapitre Hiérarchie des définitions de types (§2.2.1.1), chaque type complexe est dérivé d'une {définition du type de base} qui est elle-même soit la définition d'un type simple (§2.2.1.2) soit celle d'un type complexe (§2.2.1.3). La {méthode de dérivation} spécifie la technique de dérivation utilisée à savoir soit extension soit restriction (référez-vous au chapitre Hiérarchie des définitions de types (§2.2.1.1)).
Un type complexe qui n'est pas {terminal} peut être utilisé comme {définition de type de base} pour d'autres types dérivés soit par extension soit par restriction ; les valeurs explicites extension et restriction permettent de se protéger des dérivations ultérieures par extension et restriction respectivement. Si toutes les valeurs sont spécifiées, alors [Définition :] le type complexe est terminal, parce qu'aucune dérivation supplémentaire n'est possible. Cette caractéristique n'est pas héritée, c'est à dire qu'une définition de type dérivée par restriction à partir de la définition d'un type terminal en extension n'est pas elle-même, en l'absence de tout attribut le spécifiant explicitement, terminale elle-même pour quoi que ce soit.
Les types complexes {abstraits}
ne peuvent pas être utilisés comme {définitions de type} pour la ·validation· d'unités d'information de type élément. Il
s'ensuit qu'ils ne doivent pas être référencés à partir de l'attribut xsi:type
(§2.6.1) dans une instance de
document. Les types complexes abstraits peuvent être utilisés comme des {définitions de types de
base}, ou même comme des {définitions de types} de déclarations
d'éléments, étant supposé dans chaque cas que la définition concrète d'un
type dérivé soit utilisée pour la ·validation·, soit via
l'attribut xsi:type
(§2.6.1) soit au
moyen d'un groupe de substitution.
L'ensemble des {attributs utilisés} est formé des définitions des différentes utilisations des attributs utilisés dans le type complexe. Reportez-vous aux chapitres Elément localement valide (type complexe) (§3.4.4) et Attribut localement valide (§3.2.4) pour connaître les détails sur la ·validation· des attributs.
Les {attributs génériques} fournissent une spécification plus flexible pour la ·validation· des attributs qui ne sont pas explicitement inclus dans l'ensemble des {attributs utilisés}. De manière informelle, les valeurs spécifiques des {attributs génériques} sont interprétées comme suit :
not
' suivi d'un nom d'espace de noms : l'ensemble
des [attributs]
ne peut pas contenir d'attributs provenant de l'espace de noms exclu par
le 'not
'.not
' suivi de ·absent· : l'ensemble des [attributs]
ne peut pas inclure d'attributs non qualifiés.Reportez-vous au chapitre Elément localement valide (type complexe) (§3.4.4) et Noms d'espaces de noms autorisés par les caractères génériques(§3.10.4) pour connaître les détails formels sur la validation des attributs génériques.
Le {type de contenu} détermine la ·validation· des [enfants] des unités d'information de type élément. De manière informelle :
L'ensemble des {substitutions
prohibées} détermine si une déclaration d'élément apparaissant dans un ·modèle
de contenu· est protégé contre le rajout soit
d'unités d'information de type élément participant à la ·validation· et ayant un attribut xsi:type
(§2.6.1) ramenant une définition
de type complexe obtenue par extension ou restriction, soit des
unités d'information de type élément d'un groupe de substitution dont la
définition de type est dérivée de manière similaire : si l'ensemble des {substitutions prohibées} est vide,
alors toutes ces substitutions sont autorisées, sinon, si il liste une ou
plusieurs méthodes de dérivation, celle-là sont interdites.
Reportez-vous au chapitre Annotations (§3.13) pour avoir plus d'informations sur le rôle des {annotations}.
La représentation XML d'un composant de schéma de définition d'un type complexe est l'unité d'information de type élément <complexType>.
La représentation XML de la définition d'un type complexe ayant une définition de type simple comme {type de contenu} est singulièrement différente de celle des autres {types de contenu} et cela se reflète dans la présentation ci-dessous, qui présente en premier les éléments impliqués dans le premier cas, puis ceux du second cas. La correspondance des propriétés est montrée une fois dans chaque cas.
complexType
<complexType
abstract = booléen : false
block = (#all | List of (extension |
restriction))
final = (#all | List of (extension |
restriction))
id = ID
mixed = booléen : false
name = NCName
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, (simpleContent | complexContent | ((group | all | choice | séquence)?, ((attribute | attributeGroup)*, anyAttribute?))))
</complexType>
Composant de schéma :Définition d'un type complexe | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
<simpleContent
id = ID
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, (restriction | extension))
</simpleContent>
<restriction
base = QName
id = ID
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, (simpleType?, (minExclusive
| minInclusive
| maxExclusive
| maxInclusive
| totalDigits
| fractionDigits
| length
| minLength
| maxLength
| enumeration
| whiteSpace
| pattern)*)?,
((attribute | attributeGroup)*, anyAttribute?))
</restriction>
<extension
base = QName
id = ID
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, ((attribute | attributeGroup)*, anyAttribute?))
</extension>
<attributeGroup
id = ID
ref = QName
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?)
</attributeGroup>
<anyAttribute
id = ID
namespace = ((##any | ##other) | List of (anyURI
| (##targetNamespace | ##local)) ) : ##any
processContents = (lax | skip |
strict) : strict
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?)
</anyAttribute>
Composant de schéma : Définition de type complexe ayant un contenu simple | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
<complexContent
id = ID
mixed = booléen
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, (restriction | extension))
</complexContent>
<restriction
base = QName
id = ID
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, (group | all | choice | séquence)?, ((attribute | attributeGroup)*, anyAttribute?))
</restriction>
<extension
base = QName
id = ID
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, ((group | all | choice | séquence)?, ((attribute | attributeGroup)*, anyAttribute?)))
</extension>
Composant de schéma :Définition de type complexe ayant un contenu complexe | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Remarque : Mis à part les conditions simples de cohérence imposées ci-dessus, contraindre les définitions de types identifiées restrictions à en être réellement, c'est à dire à ·valider· un sous-ensemble des unités ·validées· par la définition du type de base, est imposé au chapitre Contraintes sur les composants de schéma de définition d'un type complexe (§3.4.6).
Remarque : La seule fonction permanente de la valeur
prohibited de [l'attribut]
use
de l'élément <attribute> se trouve dans
l'établissement de la correspondance entre un type complexe défini par
restriction et sa représentation XML. Cela empêche d'hériter de
l'utilisation d'un attribut utilisé de nom identique à partir de la {définition d'un type de
base}. Un tel élément <attribute> ne correspond à aucun
composant et de là découle le fait
qu'il n'y ait aucune interaction explicite ou héritée avec des caractères
génériques dans la mise en oeuvre des Règles
de validation de la définition d'un type complexe (§3.4.4) ou des Contraintes sur les composants de schéma de définition d'un
type complexe (§3.4.6).
Une attention minutieuse à la syntaxe concrète ci-dessus révèle qu'une
définition de type n'a besoin d'avoir rien de plus qu'un nom, c'est à dire
que, par exemple, la seul définition <complexType
name="anyThing"/>
est autorisée.
<xs:complexType name="length1"> <xs:simpleContent> <xs:extension base="xs:nonNegativeInteger"> <xs:attribute name="unit" type="xs:NMTOKEN"/> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:element name="width" type="length1"/> <width unit="cm">25</width> <xs:complexType name="length2"> <xs:complexContent> <xs:restriction base="xs:anyType"> <xs:sequence> <xs:element name="size" type="xs:nonPositiveInteger"/> <xs:element name="unit" type="xs:NMTOKEN"/> </xs:sequence> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:element name="depth" type="length2"/> <depth> <size>25</size><unit>cm</unit> </depth> <xs:complexType name="length3"> <xs:sequence> <xs:element name="size" type="xs:non-positive-integer"/> <xs:element name="unit" type="xs:NMTOKEN"/> </xs:sequence> </xs:complexType>
length
) :
l'une avec un contenu formé de caractères de données contraints par une
référence à un type de données préfabriqué et un attribut, les deux autres en
utilisant deux éléments. length3
est l'option abrégée de
length2
: elles correspondent à des composants identiques de
définition de types.<xs:complexType name="personName"> <xs:sequence> <xs:element name="title" minOccurs="0"/> <xs:element name="forename" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="surname"/> </xs:sequence> </xs:complexType> <xs:complexType name="extendedName"> <xs:complexContent> <xs:extension base="personName"> <xs:sequence> <xs:element name="generation" minOccurs="0"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:element name="addressee" type="extendedName"/> <addressee> <forename>Albert</forename> <forename>Arnold</forename> <surname>Gore</surname> <generation>Jr</generation> </addressee>
<xs:complexType name="simpleName"> <xs:complexContent> <xs:restriction base="personName"> <xs:sequence> <xs:element name="forename" minOccurs="1" maxOccurs="1"/> <xs:element name="surname"/> </xs:sequence> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:element name="who" type="simpleName"/> <who> <forename>Bill</forename> <surname>Clinton</surname> </who>
<xs:complexType name="paraType" mixte="true"> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element ref="emph"/> <xs:element ref="strong"/> </xs:choice> <xs:attribute name="version" type="xs:number"/> </xs:complexType>
mixte
apparaissant sur l'élément complexType
lui-même.base
doit être une définition de type complexe ;base
doit être soit une définition de type complexe dont le {type de contenu} est une définition
de type simple soit, mais seulement si l'option <extension> est aussi
choisie, une définition de type simple ;http://www.w3.org/2001/XMLSchema-instance
et dont le [nom local]
est type
, nil
, schemaLocation
ou
noNamespaceSchemaLocation
, l'un des cas suivants doit
être vérifié :
Remarque : Cette clause sert à garantir que même via les attributs génériques aucun élément n'aura plus d'un attribut de type ID et cela s'applique même quand un élément n'a pas, de par sa déclaration, d'attribut de type ID, alors la règle dit qu'un attribut générique validé ne doit permettre de lui en allouer qu'un. Cela étant, si un élément a un type dont les déclarations d'attributs contiennent un attribut de type ID, alors soit il aura cet attribut soit il n'aura aucun attribut de type ID.
Remarque : Quand un {attribut générique} est présent, cela n'introduit aucune ambiguïté par rapport à la manière dont les unités d'information de type attribut qui ont un attribut est membre de l'ensemble des {attributs utilisés} et pour lesquelles les correspondances entre nom et espace de noms cible sont ·évalués·. Dans de tels cas l'attribut utilisé prend toujours la priorité et l'·évaluation· de telles unités est établie ou échoue totalement sur la base de l'attribut utilisé et de sa {déclaration d'attribut}. Cela découle des détails de la clause 3.
Toutes les définitions de types complexes (référez-vous au chapitre Définitions de types complexes (§3.4)) doivent satisfaire les contraintes suivantes.
Remarque : Cette exigence garantit que rien de ce qui pourrait être enlevé par une restriction sera ensuite rajouté par une extension. Il est facile de contrôler si l'extension en question est la seule extension de sa dérivation ou si il n'y a pas de restriction exceptée la première de la ·définition du type ur·. Construire la définition de type intermédiaire pour contrôler cette contrainte est quelque chose de direct : tout d'abord, il faut réordonner la dérivation pour mettre en premier toutes les étapes de l'extension, ensuite on la ramène à une seule extension. Si la définition résultante peut être la base d'une restriction valide pour la définition souhaitée, alors la contrainte est satisfaite.
Remarque : Pour restreindre à empty une définition de type complexe ayant une définition de base de type simple, utilisez une définition de type simple ayant une valeur fixed de la chaîne vide : cela permet de conserver l'information de type.
La contrainte suivante définit une relation utilisée ailleurs dans cette spécification.
Remarque :Cette contrainte est utilisée pour contrôler que lorsque
un type est utilisé dans un contexte où un autre type était attendu (soit
via xsi:type
ou un groupe de substitution), le type utilisé
est réellement dérivé du type attendu et que cette dérivation n'implique
pas une forme de dérivation exclue par le type attendu.
Il y a une définition de type complexe presque équivalente à la ·définition du type ur·et qui est présente dans tout schéma par définition. Ce type complexe a les propriétés suivantes :
définition du type complexe de type ur | ||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Spécifier un contenu mixte
ayant un caractère générique
non-contraint comme spécification de modèle de contenu et d'attribut produit
la ·définition du type ur·,
à savoir que chaque définition de type complexe est (éventuellement)
une restriction de la ·définition du type ur· :
ses permissions et exigences sont les moins restrictives que possible.
Remarque : Cette spécification ne fournit aucun inventaire de définitions préfabriquées de types complexes pour une utilisation dans les schémas utilisateurs. Une bibliothèque préliminaire de définitions de types complexes est disponible qui inclut à la fois des définitions de types mathématiques (par exemple le typerational
) et utilitaire (par exemple le typearray
). En particulier, il y a une définition de typetext
recommandée pour être utilisée comme définition de type des déclarations d'éléments ayant pour but d'être utilisée avec du texte libre comme modèle de contenu, de même que cette bibliothèque contient quelques types pour les aspects internationalisation. Pour plus de détails, reportez-vous au document de type schéma qui contient une bibliothèque de types à son nom d'espace de noms :http://www.w3.org/2001/03/XMLSchema/TypeLibrary.xsd
.
un attribut utilisé est un composant utilitaire qui contrôle l'occurrence et le comportement par défaut des déclarations d'attributs. Il joue, pour les déclarations d'attributs des types complexes, le même rôle que les particules pour les déclarations d'éléments.
<xs:complexType> . . . <xs:attribute ref="xml:lang" use="required"/> <xs:attribute ref="xml:space" default="preserve"/> <xs:attribute name="version" type="xs:number" fixed="1.0"/> </xs:complexType>
Le composant de schéma d'un attribut utilisé a les propriétés suivantes :
La {présence} précise si la présence d'une unité d'information de type attribut est simplement autorisée ou si elle est exigée.
La {déclaration d'attribut} fournit la déclaration d'attribut elle-même, qui, à son tour, permettra de déterminer la définition du type simple utilisé.
La {contrainte de valeur} permet d'avoir une spécification locale d'une valeur par défaut ou fixée. Cela doit être cohérent avec celle de la {déclaration d'attribut}, en ce sens que si la {déclaration d'attribut} spécifie une valeur fixée, la seule {contrainte de valeur} possible est alors cette même valeur.
Un attribut devient utilisé quand l'attribut use
de l'élément
<attribute> est
utilisé. Cela à son tour correspond à deux composants dans chaque cas,
un attribut utilisé et sa {déclaration
d'attribut} (bien que vous pouvez remarquer que cette dernière ne soit
pas nouvelle quand l'utilisation de l'attribut est une référence à une
déclaration d'attribut supérieure). La correspondance est décrite au chapitre
Représentation XML du composant de schéma de
déclaration d'attribut (§3.2.2).
N'existe pas en tant que tel.
N'existe pas en tant que tel.
Tous les attributs utilisés (référez-vous au chapitre utilisations des attributs (§3.5)) doivent satisfaire les contraintes suivantes.
Un schéma permet de nommer le groupe des déclarations d'attributs de telle manière qu'elles puissent être incorporées comme groupe dans des définitions de types complexes.
Les définitions des groupes d'attributs ne participent pas à la ·validation· en tant que tel, mais l'ensemble des {attributs utilisés} et {l'attribut générique} d'une ou plusieurs définitions de types complexes peuvent être construites en tout ou partie par référence à un groupe d'attributs. Ainsi, les définitions de groupes d'attributs fournissent un remplaçant au mécanisme des entités paramètres de XML. Les définitions de groupes d'attributs sont initialement fournies pour pouvoir y faire référence à partir de la représentation XML des composants de schéma (référez-vous aux éléments <complexType> et <attributeGroup>).
<xs:attributeGroup name="myAttrGroup"> <xs:attribute . . ./> . . . </xs:attributeGroup> <xs:complexType name="myelement"> . . . <xs:attributeGroup ref="myAttrGroup"/> </xs:complexType>
myelement
.Le composant de schéma de définition d'un groupe d'attributs a les propriétés suivantes :
Les groupes d'attributs sont identifiés par leurs {nom} et {espace de noms cible} ; l'identité d'un groupe d'attributs doit être unique à l'intérieur d'un ·schéma XML·. Reportez-vous au chapitre Les références aux composants de schéma au travers des espaces de noms (§4.2.3) pour l'utilisation des identifiants de composants quand un schéma est importé dans un autre.
L'ensemble des {attributs utilisés} est un ensemble constitué des attributs utilisés, où les occurrences peuvent avoir des spécifications locales de valeurs par défaut et de valeurs fixées.
{L'attribut générique} permet à un attribut générique d'être inclus dans un groupe d'attributs. Reportez-vous au chapitre ci-dessus Définitions de types complexes (§3.4) pour connaître quelle est l'interprétation des attributs génériques pendant la ·validation·.
Reportez-vous au chapitre Annotations (§3.13) pour avoir des informations sur le rôle de la propriété {annotation}.
La représentation XML du composant de schéma de définition d'un groupe d'attributs est une unité d'information de type élément <attributeGroup>. Elle permet de nommer un groupe constitué de déclarations d'attributs et d'un attribut générique afin d'être ensuite utilisé par référence dans la représentation XML des définitions de types complexes et d'autres définitions de groupes d'attributs. Les correspondances entre les propriétés de l'unité d'information et celles du composant lui correspondant sont les suivantes :
attributeGroup
<attributeGroup
id = ID
name = NCName
ref = QName
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, ((attribute | attributeGroup)*, anyAttribute?))
</attributeGroup>
Composant de schéma :Définition d'un groupe d'attributs | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
L'exemple ci-dessus illustre un motif récurrent dans la représentation XML
des schémas : Le même élément, dans ce cas attributeGroup
, sert
à la fois pour définir et incorporer par référence. Dans le premier cas
l'attribut name
est obligatoire, dans le second l'attribut
ref
est obligatoire et l'élément doit être vide. Ces deux cas
sont mutuellement exclusifs et sont aussi conditionnés par le contexte : la
forme de la définition, avec un attribut name
, doit intervenir
au niveau supérieur d'un schéma, alors que la forme par référence, avec un
attribut ref
, doit intervenir à l'intérieur d'une définition de
type complexe ou de la définition d'un groupe d'attributs.
ref
dont la résolution ramène le composant correspondant à cet
<attributeGroup>.N'existe pas en tant que tel.
N'existe pas en tant que tel.
Toutes les définitions des groupes d'attributs (référez-vous au chapitre des Définitions de groupes d'attributs (§3.6)) doivent satisfaire la contrainte suivante.
La définition d'un groupe modèle associe un nom et des annotations facultatives à un Groupe modèle (§2.2.3.1). En faisant référence au nom, la totalité du groupe modèle peut ainsi être incorporée dans un {terme}.
Les définitions des groupes modèles sont fournies en premier lieu pour pouvoir y faire référence à partir de la Représentation XML des définitions de types complexes (§3.4.2) (référez-vous aux éléments <complexType> et <group>). De cette façon, les définitions des groupes modèles remplacent l'utilisation des entités paramètre de XML.
<xs:group name="myModelGroup"> <xs:sequence> <xs:element ref="someThing"/> . . . </xs:sequence> </xs:group> <xs:complexType name="trivial"> <xs:group ref="myModelGroup"/> <xs:attribute .../> </xs:complexType> <xs:complexType name="moreSo"> <xs:choice> <xs:element ref="anotherThing"/> <xs:group ref="myModelGroup"/> </xs:choice> <xs:attribute .../> </xs:complexType>
choice
.Le composant de schéma de définition d'un groupe modèle a les propriétés suivantes :
La définition d'un groupe modèle est identifiée par ses {nom} et {espace de noms cible} ; l'identité d'un groupe modèle doit être unique à l'intérieur d'un ·schéma XML·. Reportez-vous au chapitre sur les Références aux composants de schéma au travers des espaces de noms (§4.2.3) pour connaître les règles qui s'appliquent aux identifiants de composants quand un schéma est importé dans un autre.
Les définitions de groupes modèles ne participent pas directement à la ·validation· mais le {terme} d'une particule peut renvoyer, en tout ou partie, sur le groupe modèle d'une définition de groupe modèle.
Le {groupe modèle} est le groupe modèle (§2.2.3.1) auquel la définition du groupe modèle fournit un nom.
Reportez-vous au chapitre Annotations (§3.13) pour avoir plus d'informations sur les caractéristiques de la propriété {annotation}.
La représentation XML du composant de schéma de définition d'un groupe modèle est l'unité d'information de type élément <group>. Elle permet de nommer un groupe modèle pour qu'il puisse être utilisé par référence dans les représentations XML des définitions de types complexes et des groupes modèles. Les correspondances entre les propriétés de l'unité d'information et celles du composant qui lui correspond sont les suivantes :
group
<group
name = NCName>
Content: (annotation?, (all | choice | séquence))
</group>
name
est utilisé (ce qui signifie que le parent de l'unité est
<schema> ou <redefine>), alors l'unité
est un composant de définition d'un groupe modèle qui a les propriétés
suivantes :Composant de schéma :Définition d'un groupe modèle | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
ref
et renvoie à une particule ayant les propriétés suivantes
(sauf si minOccurs=maxOccurs=0
, auquel cas l'unité correspond à
aucun composant du tout):Composant de schéma : Particule | ||||||||
---|---|---|---|---|---|---|---|---|
|
Le nom de ce chapitre est légèrement trompeur en cela que le deuxième cas,
anonyme, ci-dessus (avec un attribut ref
et sans attribut
name
) n'est pas vraiment un groupe modèle nommé, mais une
référence à un tel groupe modèle nommé. Remarquez aussi que dans le premier
cas (celui qui est nommé) ci-dessus aucune référence n'est faite à
minOccurs
ou maxOccurs
: la raison en est que le
schéma des schémas n'autorise pas leur utilisation sur l'enfant d'un <group> nommé. Cela, à son
tour, parce que les valeurs prises en compte sont celle du {nombre d'occurrences minimum} et du {nombre d'occurrences maximum} des
particules qui font référence à la définition au groupe modèle
nommé.
Etant donné les contraintes sur son apparition dans les modèles de contenu, un connecteur <all> ne devrait apparaître uniquement comme étant la seule unité des [enfants] d'une définition d'un groupe modèle nommé ou d'un modèle de contenu : reportez-vous au chapitre Contraintes sur les composants de schéma d'un groupe modèle (§3.8.6).
N'existe pas en tant que tel.
N'existe pas en tant que tel.
Toutes les définitions de groupes modèles (référez-vous au chapitre Définitions des groupes modèles (§3.7)) doivent satisfaire la contrainte suivante.
Quand les [enfants] d'une unité d'information de type élément ne sont ni vides ni formés de références à des définitions de types simples (Définition de type simples (§3.14)), alors la séquence des unités d'information de type élément [enfants] qui forme le contenu peut être spécifiée de manière précise avec un groupe modèle. A partir du moment où le {terme} d'une particule peut être un groupe modèle et qu'un groupe modèle peut contenir des particules, un groupe modèle peut indirectement contenir d'autres groupes modèles ; la grammaire des modèles de contenu est, par conséquence, récursive.
<xs:all> <xs:element ref="cats"/> <xs:element ref="dogs"/> </xs:all> <xs:sequence> <xs:choice> <xs:element ref="left"/> <xs:element ref="right"/> </xs:choice> <xs:element ref="landmark"/> </xs:sequence>
Le composant de schéma des groupes modèles a les propriétés suivantes :
Ce composant permet de définir, respectivement, un modèle de contenu constitué d'une séquence (sequence), d'un choix exclusif (choice) ou d'un ensemble non-ordonné (all) de {particules} . Cela, à son tour, détermine si les unités d'information de type élément [enfants] ·validées· par le groupe modèle doivent :
=0
ou 1
et le {nombre d'occurrences
maximum}=1
.Quand deux particules ou plus contenues directement ou indirectement dans le lot de {particules} d'un groupe modèle ont comme {terme} des déclarations d'éléments de même nom, les définitions de types de ces déclarations doivent être les mêmes. Par 'indirectement', on entend les particules d'un lot de {particules} d'un groupe qui serait lui-même le {terme} d'une particule directement contenue dans un autre groupe, et ainsi de suite récursivement.
Reportez-vous au chapitre Annotations (§3.13) pour avoir les informations détaillées sur le rôle des {annotations}.
Les représentations XML des composants de schéma d'un groupe modèle sont les unités d'information de type élément <all>, <choice> ou <séquence>. Les correspondances entre les propriétés de ces unités d'information et celles du composant qui leur correspond sont les suivantes :
all
, choice
et
sequence
<all
id = ID
maxOccurs = 1 : 1
minOccurs = (0 | 1) : 1
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, element*)
</all>
<choice
id = ID
maxOccurs = (nonNegativeInteger
| unbounded) : 1
minOccurs = nonNegativeInteger : 1
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, (element | group | choice | séquence | any)*)
</choice>
<séquence
id = ID
maxOccurs = (nonNegativeInteger
| unbounded) : 1
minOccurs = nonNegativeInteger : 1
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, (element | group | choice | séquence | any)*)
</séquence>
minOccurs=maxOccurs=0
, auquel cas l'unité correspond à aucun
composant du tout):Composant de schéma : Particule | ||||||||
---|---|---|---|---|---|---|---|---|
|
Composant de schéma : Groupe modèle | ||||||||
---|---|---|---|---|---|---|---|---|
|
n
sous-série où
n
est la longueur de l'ensemble des {particules} de telle manière que chaque sous-série,
dans l'ordre, soit ·valide· par rapport à la
particule correspondante de l'ensemble des {particules} de départ comme cela est défini au
chapitre Série d'éléments localement valide
(particule) (§3.9.4).n
sous-séries où
n
est la longueur de l'ensemble des {particules} de départ, de sorte qu'il y ait des
correspondances une à une entre les sous-séries et les {particules} et que chaque sous-série soit ·valide· par rapport à la particule correspondante comme
cela est défini dans Série d'éléments localement
valide (particule) (§3.9.4).
Remarque : La définition ci-dessus est implicitement
non-déterministe et ne devrait pas être prise comme une recette de cuisine
dans les mises en pratique de la spécification. Remarquez en particulier
que quand le {connecteur} est
all, la série de particules est réduite à une liste de déclarations
locales ou supérieures (reportez-vous au chapitre Contraintes sur les composants de schéma d'un
groupe modèle (§3.8.6)). Une implémentation plus simple est possible
qui consiste à interpréter littéralement la définition ci-dessus ; de
manière informelle, le contenu est ·valide· quand chaque
élément déclaré apparaît exactement une fois (ou au plus une fois, si le {nombre d'occurrences minimum}
vaut 0
) et que chacun d'eux est ·valide· par rapport à sa déclaration correspondante. Les
éléments peuvent apparaître dans n'importe quel ordre.
N'existe pas en tant que tel.
Tous les groupes modèles (référez-vous au chapitre Groupes modèles (§3.8)) doivent satisfaire les contraintes suivantes.
all
=1
, et
cette particule doit faire partie d'une paire qui constitue le {type de contenu} d'une définition
de type complexe.0
or
1
.Remarque : Cette contrainte est équivalente à celle de [XML 1.0 (Second Edition)] et SGML. Etant donné la présence de groupes de substitution d'élément et de caractères génériques, l'expression concise de cette contrainte est difficile, reportez-vous au chapitre Analyse de la contrainte d'attribution de particule unique (partie non-normative) (§H) pour plus d'informations.
Remarque : parce que la propriété {espace de noms cible} des déclarations d'éléments de portée locale est facultative, la portée des déclarations n'est pas utile pour imposer l'une quelconque des deux contraintes qui précèdent.
Les contraintes qui suivent définissent des relations qui sont utilisées ailleurs dans cette spécification.
all
et
sequence
) 0
si le
lot de {particules} n'existe
pas).0
si le lot de {particules} n'existe pas).0
si le
lot {particules} n'existe
pas).0
si le
lot {particules} n'existe
pas).Comme cela fut décrit dans le chapitre Groupes modèles (§3.8), les particules contribuent à la définition des modèles de contenu.
<xs:element ref="egg" minOccurs="12" maxOccurs="12"/> <xs:group ref="omelette" minOccurs="0"/> <xs:any maxOccurs="unbounded"/>
Le composant de schéma de type particule a les propriétés suivantes :
En général, plusieurs unité d'information de type élément [enfants], potentiellement avec des caractères de données entre les [enfants] pour le cas des modèles mixed, peuvent être ·validées· par rapport à une seule particule. Quand le {terme} est une déclaration d'élément ou un caractère générique, le {nombre d'occurrences minimum} détermine le nombre minimum de fois qu'un tel élément [enfant] peut apparaître. Le nombre de ces enfants doit être plus grand que ou égal au {nombre d'occurrences minimum}. Si le {nombre d'occurrences minimum} vaut 0, alors l'apparition d'une occurrence de cet enfant est facultative.
A nouveau, quand le {terme} est une déclaration d'élément ou un caractère générique, le nombre d'apparition de cet élément [enfant] doit être inférieur à ou égal à toute spécification numérique du {nombre d'occurrences maximum} ; si la valeur de {nombre d'occurrences maximum} est unbounded, alors il n'y a pas de limite supérieures au nombre de fois que l'enfant peut apparaître.
Quand le {terme} est un groupe modèle, le nombre des occurrences permises est déterminé par une combinaison du {nombre d'occurrences minimum} et du {nombre d'occurrences maximum} et celles de l'ensemble des {particules} du {terme}.
Les particules correspondent aux trois éléments (<element> et <group> quand ils sont utilisés directement
sous <schema> et <any>) avec lesquels on peut
utiliser les attributs minOccurs
et maxOccurs
. Ce
qui, à son tour, correspond à deux composants dans chaque cas, une
particule et son {terme}. Les
correspondances sont respectivement décrites des chapitres Représentation XML du composant de schéma de
déclaration d'élément (§3.3.2), Représentation XML des composants de schéma d'un
groupe modèle (§3.8.2) et Représentation XML
des composants de schéma pour les caractères génériques (§3.10.2).
N'existe pas en tant que tel.
Dans ce cas, la ·déclaration de substitution· est la ·déclaration contextuelle· pour l'unité d'information de type élément par rapport à L'évaluation de la validité de schéma (élément) (§3.3.4) et les résultats de l'évaluation (élément) (§3.3.5).
n
sous-séries de sorte que n
soit
supérieur ou égal au {nombre
d'occurrences minimum}.n
doit être inférieur ou égal au {nombre d'occurrences maximum}.Remarque : Les clauses 1 et 2.3.3 n'inter-réagissent pas : une unité d'information de type élément validable par une déclaration ayant un groupe de substitution de tête dans un espace de noms différent n'est pas validable par un caractère générique qui reçoit l'espace de nom de tête mais pas le sien propre.
N'existe pas en tant que tel.
Toutes les particules (référez-vous au chapitre Les particules (§3.9)) doivent satisfaire les contraintes suivantes.
Les contraintes suivantes définissent des relations appelées ailleurs dans cette spécification.
=1
de E et son {terme} est un groupe de type sequence dont le
premier membre de l'ensemble des {particules} est une particule dont toutes les
propriétés, récursivement, sont identiques à celles de B, à
l'exception des {annotations}.L'approche que nous présentons ici pour définir un type par restriction d'un autre est conçue pour garantir que les types définis de cette manière forment un sous-ensemble du type qu'ils restreignent. Cela est accompli en requérant une mise en correspondance claire entre les composants de la définition d'un type de base et ceux de la version restreinte. Les mises en correspondance autorisées sont présentées ci-dessous via un ensemble de définitions récursives, en approfondissant les cas les plus évidents, par exemple le cas où une déclaration d'élément (restreinte) correspond à une autre déclaration d'élément (de base) ayant les mêmes nom et type mais avec le même ou un plus grand nombre d'occurrences.
Remarque : L'approche par les correspondances structurelles pour garantir la relation de sous-ensemble présentée ici est nécessairement verbeuse mais a l'avantage d'être contrôlable d'une manière directe. Le groupe de travaille sollicite vos retours sur les difficultés de la mise en pratique et sur comment d'autres approches pourraient être viables.
1
pour la déclaration supérieure d'élément et pour chacune des
déclarations de son ·groupe de substitution·.1
.0
.1
.Particule de base | ||||||
---|---|---|---|---|---|---|
elt | any | all | choice | séquence | ||
Particule dérivée | elt | NameAnd- TypeOK | NSCompat | Recurse- AsIfGroup | Recurse- AsIfGroup | RecurseAs- IfGroup |
any | Interdit | NSSubset | Interdit | Interdit | Interdit | |
all | Interdit | NSRecurse- CheckCardinality | Recurse | Interdit | Interdit | |
choice | Interdit | NSRecurse- CheckCardinality | Interdit | RecurseLax | Interdit | |
seq- uence | Interdit | NSRecurse- CheckCardinality | Recurse- Unidered | MapAndSum | Recurse |
Remarque : La contrainte ci-dessus sur la {définition de type} signifie qu'en dérivant un type par restriction, toutes les définitions de types contenues doivent elles-mêmes être explicitement dérivées par restriction à partir des définitions de types correspondantes dans la définition de base.
1
et l'ensemble des {particules} réduit à une seule particule, la même que
celle de la déclaration d'élément, doit être une ·restriction
valide· du groupe comme cela est défini aux
chapitres Dérivation correcte d'une particule
(All:All,Sequence:Sequence -- Recurse) (§3.9.6), Dérivation correcte d'une particule (Choice:Choice
-- RecurseLax) (§3.9.6) et Dérivation correcte
d'une particule (All:All,Sequence:Sequence -- Recurse) (§3.9.6), en
fonction de la nature du groupe : all, choice ou
séquence.Remarque : Bien que la ·validation· sémantique d'un groupe de type all ne dépende pas de l'ordre de ses particules, les groupes de type all dérivés sont contraints de faire correspondre l'ordre de leur base afin de simplifier le contrôle de validité de la dérivation.[Définition :] Une mise en correspondance fonctionnelle totale est conservatrice de l'ordre si chaque particule r de l'ensemble R correspond à une particule b de la série B qui suit (sans nécessairement que ce soit le suivant immédiat) la particule de la gamme B en relation avec le prédécesseur de r, si il existe, où "prédécesseur" et "suivant" sont définis en référence à l'ordre des listes qui forment R et B.
Remarque : Bien que la ·validation· sémantique d'un groupe de type choice ne dépende pas de l'ordre de ses particules, les groupes de type choice dérivés sont priés d'avoir le même ordre que celui de leur groupe de base afin de simplifier le contrôle de la justesse de la dérivation.
Remarque :Bien que cette clause autorise le réordonnancement, à cause des limites sur les contenus des groupes de type all le processus de validation peut quand même être déterministe.
Remarque : Cette clause est, en principe, plus restrictive que absolument nécessaire, mais en pratique couvrira tous les cas souhaités et est plus facile à spécifier que la version totalement générale.
Remarque : Ce cas permet le déroulement séquentiel des séquences itérées de type "ou" (choice). Cela peut être particulièrement pratique quand le "ou" est de type implicite, provoquée par l'utilisation d'un groupe de substitutions.
0
.all
et sequence
) (§3.8.6)
(si le groupe est de type all ou sequence) et Nombre réel d'occurrences (choice) (§3.8.6) (si
c'est un type choice), est 0
.Afin d'exploiter pleinement le potentiel d'extensibilité offert par XML et les espaces de noms, il faut offrir plus de possibilités que ce que les DTD permettent de faire pour la flexibilité des modèles de contenus et des déclarations d'attributs. Un caractère générique permet de réaliser des ·validations· d'unités d'information de type élément et attribut qui dépendent de leur nom d'espace de noms, cela restant indépendant de leur nom local.
<xs:any processContents="skip"/> <xs:any namespace="##other" processContents="lax"/> <xs:any namespace="http://www.w3.org/1999/XSL/Transform"/> <xs:any namespace="##targetNamespace"/> <xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace"/>
Le composant de schéma d'un caractère générique a les propriétés suivantes :
La {contrainte d'espace de noms} permet la ·validation· des unités de type élément et attribut qui :
Le {type de validation} permet de contrôler l'impact sur ·l'évaluation· des unités d'information autorisées par les caractères génériques, de la manière suivante :
xsi:type
, et l'unité doit
être ·valide· dans les
deux cas de figure.Reportez-vous au chapitre Annotations (§3.13) pour plus d'informations sur le rôle des {annotations}.
La représentation XML du composant de schéma pour un caractère générique sont les unités d'information de type élément <any> ou <anyAttribute> . Les correspondances entre les propriétés de l'unité d'information <any> et celles des composants qui lui correspondent sont les suivantes (référez-vous à <complexType> et <attributeGroup> pour plus d'informations sur les correspondances pour <anyAttribute>) :
any
<any
id = ID
maxOccurs = (nonNegativeInteger
| unbounded) : 1
minOccurs = nonNegativeInteger : 1
namespace = ((##any | ##other) | List of (anyURI
| (##targetNamespace | ##local)) ) : ##any
processContents = (lax | skip |
strict) : strict
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?)
</any>
minOccurs=maxOccurs=0
, auquel cas l'unité
correspond à aucun composant du tout) :Composant de schéma : Particule | ||||||||
---|---|---|---|---|---|---|---|---|
|
Composant de schéma : Caractère générique | ||||||||
---|---|---|---|---|---|---|---|---|
|
Les caractères génériques sont sujets aux mêmes contraintes d'ambiguïté (Attribution de particule unique (§3.8.6)) que les autres particules du modèle de contenu : Si, à l'intérieur du modèle de contenu d'un type, un élément instance peut simultanément correspondre soit à une particule explicite et un caractère générique soit à un caractère générique parmi deux, alors cela signifie que ce modèle est faux.
N'existe pas en tant que tel.
Tous les caractères génériques (référez-vous au chapitre Caractères génériques (§3.10)) doivent satisfaire à la contrainte suivante.
Les contraintes suivantes définissent une relation utilisée ailleurs dans cette spécification.
Les composants de définition de la contrainte d'identité offrent la possibilité d'exprimer des contraintes d'unicité et de référencement par rapport au contenu de plusieurs éléments et attributs.
<xs:key name="fullName"> <xs:selector xpath=".//person"/> <xs:field xpath="forename"/> <xs:field xpath="surname"/> </xs:key> <xs:keyref name="personRef" refer="fullName"> <xs:selector xpath=".//personPointer"/> <xs:field xpath="@first"/> <xs:field xpath="@last"/> </xs:keyref> <xs:unique name="nearlyID"> <xs:selector xpath=".//*"/> <xs:field xpath="@id"/> </xs:unique>
Le composant de schéma de définition de la contrainte d'identité a les propriétés suivantes :
Les définitions de contraintes d'identité sont identifiées par leur {nom} et leur {espace de noms cible} ; les identités des définitions des contraintes d'identité doivent être uniques à l'intérieur d'un ·schéma XML·. Reportez-vous au chapitre Références aux composants de schéma au travers des espaces de noms (§4.2.3) pour avoir des informations détaillées sur le traitement des identifiants de composants quand un schéma est importé dans un autre.
De manière informelle, la {catégorie de la contrainte d'identité} fixe le rôle joué par la contrainte d'identité :
Ces contraintes sont spécifiées parallèlement aux spécifications qui
portent, de leur côté, sur les types des attributs et des éléments concernés,
c'est à dire que quelque chose qui est déclaré comme étant du type 'nombre
entier' peut aussi servir de clé. Chaque déclaration de contrainte a un nom,
qui existe dans un seul et même espace de symboles réservé aux contraintes.
Les conditions d'égalité ou d'inégalité qu'on utilise pour le contrôle de ces
contraintes s'appliquent aux valeurs des champs sélectionnés, de sorte que,
par exemple, 3.0
et 3
seraient des clés
conflictuelles si elles étaient toutes les deux des nombres, mais ne sont pas
conflictuelles si ce sont des chaînes de caractères, ou si l'une était une
chaîne de caractères et l'autre un nombre. Les valeurs de types différents
peuvent seulement être égales quand un type est dérivé de l'autre et que la
valeur comparée se trouve dans l'espace commun aux deux.
Les compléments au mécanisme des ID/IDREF
de XML sont :
Le {sélecteur} sert à spécifier une forme restreinte d'expression XPath ([XPath]) relative aux instances de l'élément déclaré. Il permet d'isoler l'ensemble des noeuds éléments subordonnés (c'est à dire contenu à l'intérieur de l'élément déclaré) sur lesquels s'applique la contrainte.
L'ensemble des {champs} sert à spécifier des expressions XPath qui vont s'appliquer relativement aux éléments isolés par le {sélecteur}. Cela permet d'identifier un seul noeud (de type élément ou attribut) dont le contenu ou la valeur, obligatoirement de type simple, est utilisé dans la contrainte. Il est possible de spécifier une liste ordonnée d'ensembles de {champs}, afin de pouvoir traiter le cas des clés, références de clés et contraintes d'unicité multivaluées.
Afin de réduire les difficultés de mise en oeuvre, en particulier celles des programmes de traitement de données en flot continu, seul un sous-ensemble des expressions XPath est autorisé pour les {sélecteurs} et les {champs}. Les détails sont donnés au chapitre Contraintes du composant de schéma de définition de la contrainte d'identité (§3.11.6).
Remarque : La provision fonctionnelle relative aux champs
multivalués mentionnée va au delà de ce qui est supporté avec
xsl:key
.
Reportez-vous au chapitre Annotations (§3.13) pour plus d'information sur le rôle des {annotations}.
La représentation XML du composant de schéma de définition de la contrainte d'identité est une unité d'information de type élément qui est <key>, <keyref> ou <unique>. Les correspondances entre les propriétés de ces unités d'information et celles du composant auquel elles correspondent sont les suivantes :
unique
<unique
id = ID
name = NCName
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, (selector, field+))
</unique>
<key
id = ID
name = NCName
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, (selector, field+))
</key>
<keyref
id = ID
name = NCName
refer = QName
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, (selector, field+))
</keyref>
<selector
id = ID
xpath = un sous-ensemble d'expressions XPath, reportez-vous au
chapitre ci-dessous
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?)
</selector>
<field
id = ID
xpath = un sous-ensemble d'expressions XPath, reportez-vous au
chapitre ci-dessous
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?)
</field>
Composant de schéma : Définition de la contrainte d'identité | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
<xs:element name="vehicle"> <xs:complexType> . . . <xs:attribute name="plateNumber" type="xs:integer"/> <xs:attribute name="state" type="deuxLetterCode"/> </xs:complexType> </xs:element> <xs:element name="state"> <xs:complexType> <xs:sequence> <xs:element name="code" type="deuxLetterCode"/> <xs:element ref="vehicle" maxOccurs="unbounded"/> <xs:element ref="person" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:key name="reg"> <!-- les véhicules sont reconnus par leur plaque à l'intérieur des Etats Unis --> <xs:selector xpath=".//vehicle"/> <xs:field xpath="@plateNumber"/> </xs:key> </xs:element> <xs:element name="root"> <xs:complexType> <xs:sequence> . . . <xs:element ref="state" maxOccurs="unbounded"/> . . . </xs:sequence> </xs:complexType> <xs:key name="state"> <!-- La clé des Etats est leur code --> <xs:selector xpath=".//state"/> <xs:field xpath="code"/> </xs:key> <xs:keyref name="vehicleState" refer="state"> <!-- tout véhicule se réfère à son Etat --> <xs:selector xpath=".//vehicle"/> <xs:field xpath="@state"/> </xs:keyref> <xs:key name="regKey"> <!-- La clé des véhicules est une paire composée de l'Etat et de la plaque --> <xs:selector xpath=".//vehicle"/> <xs:field xpath="@state"/> <xs:field xpath="@plateNumber"/> </xs:key> <xs:keyref name="carRef" refer="regKey"> <!-- les voitures des gens forment une référence --> <xs:selector xpath=".//car"/> <xs:field xpath="@regState"/> <xs:field xpath="@regPlate"/> </xs:keyref> </xs:element> <xs:element name="person"> <xs:complexType> <xs:sequence> . . . <xs:element name="car"> <xs:complexType> <xs:attribute name="regState" type="deuxLetterCode"/> <xs:attribute name="regPlate" type="xs:integer"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element>
state
est défini, qui contient un enfant
code
et plusieurs enfants vehicle
et
person
. Un vehicle
, à son tour, a un numéro
minéralogique plateNumber
en attribut qui est un entier ainsi
qu'un attribut state
pour l'Etat. Les code
s d'Etat
servent de clés aux Etats à l'intérieur du document. Le numéro minéralogique
des véhicules (l'attribut plateNumber
) servent de clé à
l'intérieur des Etats et state
et plateNumber
sont
définis comme étant des clés pour les vehicle
s dans tout le
document. De plus, un élément person
a un enfant qui s'appelle
car
, de type vide, et porteur des attributs
regState
et regPlate
, qui sont alors considérés
comme faisant ensemble référence aux vehicle
s via la contrainte
carRef
. La condition de correspondance entre la valeur de
l'attribut state
d'un véhicule
est celle de
l'élément code
de la balise state
ne peut pas être
exprimée ici.Remarque : L'utilisation de la [valeur normalisée par le schéma] dans la définition de la ·séquence clé· ci-dessus signifie que les valeurs de contrainte default et fixed peuvent jouer un rôle dans les ·séquences clés·.
Remarque : Bien que cette spécification définisse une contribution à l'ensemble d'information résultant de la validation de schéma qui pourrait permettre aux programmes de traitement concernés par les schémas de mettre en pratique la clause 4.2.3 vue ci-dessus au chapitre Déclaration d'élément (§3.3.5), ceux-là ne sont pas obligés de la produire. Cette clause peut être interprétée comme si, en l'absence de contribution à l'ensemble d'information, la valeur {d'annulation} appropriée doit être disponible.
Remarque : La complexité de ce qui est écrit ci-dessus vient du fait que les contraintes d'identité keyref peuvent être définies sur des domaines différents de celui inclus de la contrainte d'identité qu'elles référencent, ou que les domaines peuvent être les mêmes mais s'auto-inclure à un certain niveau de profondeur. Dans d'autres cas la ·table des noeuds· pour la contrainte d'identité référencée a besoin de se propager par le haut, avec des conflits de résolution. L'unité d'information de type relation de contrainte d'identité, contrairement à d'autres de cette spécification, est essentiellement un mécanisme interne de comptabilité. Il est introduit pour supporter la définition de la Contrainte d'identité satisfaite (§3.11.4) ci-dessus. En conséquence, les programmes de traitement conformes peuvent, sans y être toutefois obligés, les exposer via les propriétés de la [table des contraintes d'identité] dans l'ensemble d'information résultant de la validation de schéma. En d'autres termes, les contraintes ci-dessus peuvent être interprétées en disant que la ·validation· des contraintes d'identité se poursuit comme si ces unités de l'ensemble d'information existaient.
Toute définition de contrainte d'identité (référez-vous au chapitre définitions de contrainte d'identité (§3.11)) doit satisfaire la condition suivante.
enfant
et/ou attribut
dont des formes abrégées sont
données ci-dessus.Les déclarations de notation reprennent un principe qui existait déjà en XML 1.0 sous la forme des déclarations de NOTATION.
<xs:notation name="jpeg" public="image/jpeg" system="viewer.exe">
Le composant de schéma de déclaration d'une notation a les propriétés suivantes :
Les déclarations des notations ne participent pas à la ·validation· en tant que tel. Elles sont référencées au cours de la ·validation· des chaînes de caractères comme étant des membres du type simple NOTATION.
Reportez-vous au chapitre sur les Annotations (§3.13) pour avoir plus de renseignements sur le rôle des {annotation}.
Le composant de schéma de la représentation XML d'une déclaration de notation est l'unité d'information de type élément <notation>. Les correspondances entre les propriétés de cette unité d'information et les propriétés du composant qui lui correspond sont les suivantes :
notation
<notation
id = ID
name = NCName
public = anyURI
system = anyURI
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?)
</notation>
Composant de schéma : Déclaration d'une notation | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
<xs:notation name="jpeg" public="image/jpeg" system="viewer.exe" /> <xs:element name="picture"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:hexBinary"> <xs:attribute name="pictype"> <xs:simpleType> <xs:restriction base="xs:NOTATION"> <xs:enumeration value="jpeg"/> <xs:enumeration value="png"/> . . . </xs:restriction> </xs:simpleType> </xs:attribute> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <picture pictype="jpeg">...</picture>
N'existe pas en tant que tel.
Remarque : Pour la compatibilité, un seul de ces attributs devrait apparaître sur un élément donné. Dans le cas où il y en a plusieurs, cette spécification ne définit pas lequel d'entre eux fournit la ou les propriétés ci-dessus.
Toutes les déclarations de notation (référez-vous au chapitre déclarations des notations (§3.12)) doivent satisfaire la contrainte suivante.
Les annotations permettent d'introduire dans les composants de schéma des annotations destinées tant aux humains qu'aux programmes de traitement.
<xs:simpleType fn:note="special"> <xs:annotation> <xs:documentation>A type for experts only</xs:documentation> <xs:appinfo> <fn:specialHandling>checkForPrimes</fn:specialHandling> </xs:appinfo> </xs:annotation>
Le composant de schéma pour les annotations a les propriétés suivantes :
Les {informations pour
l'utilisateur} sont prévues pour un usage humain, les {informations applicatives} pour un
traitement automatique. Dans les deux cas, une provision est faite pour une
référence d'URI facultative mais prévue pour venir compléter l'information
locale, comme la valeur de l'attribut source
des unités
d'information de type élément correspondantes. La ·validation· n'implique pas le déréférencement de ces URI,
quand elles sont présentes. Dans le cas d'une {information pour l'utilisateur}, une
information doit être donnée quant au type de langage humain qui s'y trouve
être utilisé, cela se fait en utilisant l'attribut xml:lang
.
Les {attributs} garantissent que lorsque les auteurs de schéma tirent partie de la prévision faite pour pouvoir rajouter des attributs provenant d'espaces de noms autres que l'espace de noms des schémas XML à des documents de type schéma, ceux-là sont disponibles à l'intérieur des composants correspondant à l'unité élément où ces attribuent apparaissent.
Les annotations ne participent pas à la ·validation· en tant que tel. Etant considéré qu'une annotation elle-même satisfait toutes les ·Contraintes des composants de schémas· elle ne peut pas affecter la ·validation· des unités d'information de type élément.
Le principe des annotations, au niveau des schémas comme des composants, et dont le contenu est prévu tant pour les humains que pour les programmes, est prévu en début de presque tous les éléments principaux des schémas, et n'importe où au niveau supérieur des schémas. La représentation XML du composant de schéma correspondant à l'annotation est l'unité d'information de type élément <annotation>. Les correspondances entre les propriétés de cette unité d'information et les propriétés du composant qui lui correspond sont les suivantes :
annotation
<annotation
id = ID
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (appinfo |
documentation)*
</annotation>
<appinfo
source = anyURI>
Content: ({any})*
</appinfo>
<documentation
source = anyURI
xml:lang = language>
Content: ({any})*
</documentation>
Le composant de schéma : Annotation | ||||||||
---|---|---|---|---|---|---|---|---|
|
Le composant annotation correspondant à l'élément <annotation> dans l'exemple ci-dessus aura une unité élément dans chacun de ses ensembles {informations pour l'utilisateur} et {informations applicative} et une unité attribut dans sa série {d'attributs}.
N'existe pas en tant que tel.
N'existe pas en tant que tel : la question du rajout des annotations dans l'ensemble d'information résultant de la validation de schéma est couverte par les contributions à l'ensemble d'information résultant de la validation de schéma des éléments englobant.
Toutes les annotations (référez-vous au chapitre Annotations (§3.13)) doivent satisfaire la contrainte suivante.
Remarque : Ce chapitre est une combinaison de versions non-normatives de parties normatives de [XML Schema tome 2 : Types de données], à des fins de références croisées locales et de parties normatives en rapport avec l'interfaçage entre composants de schéma défini dans cette spécification et la définition du composant de type simple.
Les définitions de types simples permettent de contraindre les unités d'information [enfants] de type caractère qui sont utilisées dans les unités d'information de type élément et attribut.
<xs:simpleType name="farenheitWaterTemp"> <xs:restriction base="xs:number"> <xs:fractionDigits value="2"/> <xs:minExclusive value="0.00"/> <xs:maxExclusive value="100.00"/> </xs:restriction> </xs:simpleType>
Le composant de schéma de définition d'un type simple a les propriétés suivantes :
Les types simples sont identifiés par leurs {nom} et {espace de noms cible}. A l'exception des
types simples anonymes (ceux qui n'ont pas de {nom}), puisque les définitions de types (c'est à dire à
la fois de types simples et complexes) doivent être identifiées de manière
unique à l'intérieur d'un ·schéma XML·, aucune
définition de type simple peut avoir le même nom qu'une autre définition de
type, qu'elle soit simple ou complexe. Les {noms} et {espaces de noms cible} des types simples
sont utilisés pour pouvoir être référencés à partir des instances
(référez-vous au chapitre xsi:type
(§2.6.1)) et pour être utilisés dans la représentation XML des composants
de schéma (spécifiquement dans les éléments <element> et <attribute>). Reportez-vous au chapitre
Références aux composants de schéma au
travers des espaces de noms (§4.2.3) pour connaître les détails relatifs
à l'utilisation des identifiants de composants quand un schéma est importé
dans un autre.
Remarque : Le {nom} d'un type simple n'est pas ipso facto le [nom (local)] des unités d'information de type élément ou attribut ·validées· par cette définition. La connexion entre un nom et une définition de type est décrite dans les chapitres Déclaration d'éléments (§3.3) et Déclarations d'attributs (§3.2).
Une définition de type simple qui n'est pas {terminale} peut être utilisé comme {définition de type de base} pour d'autres types dérivés par extension ou restriction, ou comme {définition du type unité} dans la définition d'une liste ou dans l'ensemble des {définitions de type de membre} d'une union ; les valeurs explicites extension, restriction, list et union pour empêcher les dérivations supplémentaires par extension (pour donner un type complexe) ou restriction (pour donner un type simple) et leur utilisation dans la construction des listes et des unions respectivement.
La {variante} détermine si le type simple correspond à un type atomic, list ou union comme cela est défini dans [XML Schema tome 2 : Types de données].
Comme cela est décrit au chapitre Hiérarchie
des définitions de types (§2.2.1.1), chaque définition de type simple est
une ·restriction· d'un autre
type simple (la {définition du type de base}), qui est la
simple ·définition du type ur·
si et seulement si la définition de type en question est l'un des types de
données primitif préfabriqué, ou une définition de type list
ou
union
. Chaque type atomic est finalement une restriction
d'exactement une de ces {définitions de types primitifs}
simples préfabriqués.
Les {facettes} pour chaque définition de type simple sont sélectionnées parmi celles définies dans [XML Schema tome 2 : Types de données]. Pour les définitions du type atomic, elles sont réduites au jeu approprié à la {définition du type primitif} correspondant. Par conséquent, la valeur du blanc et du blanc lexical (c'est à dire ce qui est ·validé· par tout type simple atomic) est déterminé par la paire ({définition de type primitif}, {facettes}).
Comme spécifié dans [XML Schema tome 2 : Types de
données], les définitions de type simple list ·valident· les unités lexicales séparées par des espaces,
chacune d'elle étant conforme à une définition spécifiée d'un type simple :
la {définition du type
unité}. Le type unité spécifié ne doit pas être lui-même un type
list et doit être l'un des types identifiés dans [XML Schema tome 2 : Types de données] comme un type
unité adapté pour le type simple list
. Dans ce cas les {facettes} s'appliquent à la liste
elle-même et sont réduites à celles appropriées aux listes.
Une définition de type simple union ·valide· les chaînes de caractères qui satisfont au moins
une des définitions de l'ensemble des {définitions de type de membre}. Comme
dans le cas de list, les {facettes} s'appliquent à l'union elle-même et sont
réduites à celles appropriées au cas union
.
Comme discuté au chapitre Hiérarchie des
définitions de types (§2.2.1.1), la ·définition du type ur· fonctionne comme un type simple quand il est
utilisé comme ·définition d'un type de base· pour des types de données primitifs préfabriqués
et pour les définitions des types list
et union
.
Elle est considérée comme ayant un espace lexical sans contrainte et un
espace de valeurs résultant de l'union des espaces de valeurs de tous les
types de donnés primitifs préfabriqués et de l'ensemble de toutes les listes
de tous les membres des espaces de valeurs de tous les types de données
primitifs préfabriqués.
La ·définition du type ur· simple ne doit pas être nommée comme c'est le cas pour toute ·définition du type de base· de n'importe lequel des types simples définis par les utilisateurs : comme elle n'a aucune facette contraignante, cela serait incohérent.
Reportez-vous au chapitre Annotations (§3.13) pour avoir plus d'informations sur le rôle des {annotations}.
Remarque : Ce chapitre reproduit une version de l'information se trouvant dans [XML Schema tome 2 : Types de données], cela à des fins de références croisées locales à ce document.
simpleType
<simpleType
final = (#all | (list | union |
restriction))
id = ID
name = NCName
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, (restriction | list | union))
</simpleType>
<restriction
base = QName
id = ID
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, (simpleType?, (minExclusive
| minInclusive
| maxExclusive
| maxInclusive
| totalDigits
| fractionDigits
| length
| minLength
| maxLength
| enumeration
| whiteSpace
| pattern)*))
</restriction>
<list
id = ID
itemType = QName
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, (simpleType?))
</list>
<union
id = ID
memberTypes = Liste de QName
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?, (simpleType*))
</union>
Composant de schéma : Définition d'un type simple | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Composant de schéma : Définition du type simple atomique | ||||||
---|---|---|---|---|---|---|
|
Composant de schéma : Définition du type simple list | ||||||
---|---|---|---|---|---|---|
|
Composant de schéma : Définition du type simple union | ||||||
---|---|---|---|---|---|---|
|
base
soit l'élément <simpleType>.itemType
soit l'élement <simpleType>.memberTypes
quelqu'en soit la profondeur qui se ramène au
composant correspondant à l'élément <simpleType>.N'existe pas en tant que tel.
Toute définition de type simple (référez-vous au chapitre Définition de types simples (§3.14)) doit satisfaire les contraintes suivantes.
La contrainte suivante définit des relations exploitées ailleurs dans cette spécification.
Une définition de type simple presque équivalente à la version simple de la ·définition du type ur· se trouve dans chaque schéma par définition. Elle a les propriétés suivantes :
définition d'un type simple de type ur | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Les définitions de types simples pour tous les types de données primitifs
préfabriqués, à savoir string, booléen, float,
double, number, dateTime, duration, time,
date, gMonth, gMonthDay, gDay, gYear,
gYearMonth, hexBinary, base64Binary, anyURI
(référez-vous au chapitre Types
de données primitifs dans [XML Schema tome 2 : Types
de données]), tant pour les ·définitions du type ur·
simples que complexes (comme cela a déjà été décrit), sont présents par
définition dans tous les schémas. Tous sont dans {l'espace de noms cible} de XML Schema (nom
de l'espace de noms http://www.w3.org/2001/XMLSchema
), ont une
{variante} atomic et un
ensemble de {facettes} vide et ne
s'appuient que sur la ·définition du type ur·
simple comme ·définition de
type de base· et eux-mêmes comme {définition de type
primitif}.
De manière similaire, les définitions de types simples de tous les types dérivées préfabriqués (référez-vous au chapitre Types de données dérivés de [XML Schema tome 2 : Types de données]) sont présents par définition dans tous les schémas avec des propriétés conformes à ce qui est spécifié dans [XML Schema tome 2 : Types de données] et avec la représentation XML telle que décrite dans l'annexe Schéma des schémas (§A).
Un schéma est constitué d'un ensemble de composants de schéma.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/example"> . . . </xs:schema>
Au niveau abstrait, le schéma lui-même se limite à un concept de conteneur pour les composants de schéma.
Un schéma est représenté en XML par un ou plusieurs ·documents de type schéma·, c'est à dire, une ou plusieurs unités d'information de type élément <schema>. Un ·document de type schéma· contient les représentations d'un ensemble de composants de schéma, comme des définitions de types et des déclarations d'éléments, qui ont le même {espace de noms cible}. Un ·document de type schéma· qui a une ou plusieurs unités d'information de type élément <import> correspond à un schéma ayant des composants dans plusieurs {espaces de noms cible}. Reportez-vous au chapitre Contraintes d'importation et sémantique (§4.2.3).
schema
<schema
attributeFormDefault = (qualified |
unqualified) : unqualified
blockDefault = (#all | List of (extension |
restriction | substitution)) : ''
elementFormDefault = (qualified |
unqualified) : unqualified
finalDefault = (#all | List of (extension |
restriction)) : ''
id = ID
targetNamespace = anyURI
version = token
xml:lang = language
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: ((include |
import | redefine | annotation)*, (((simpleType | complexType | group | attributeGroup) | element | attribute | notation), annotation*)*)
</schema>
Remarquez qu'aucune des unités d'information de type attribut montrées
ci-dessus ne correspond directement aux propriétés des schémas. Les attributs
blockDefault
, finalDefault
,
attributeFormDefault
, elementFormDefault
et
targetNamespace
sont utilisés dans les sous-chapitres ci-dessus
parce qu'ils fournissent des informations globales applicables à plusieurs
correspondances entre représentation et composant. Les autres attributs
(id
et version
) sont pour la commodité des
utilisateurs et cette spécification ne leur définit aucune sémantique.
La définition du modèle de données abstrait du schéma présentée au
chapitre Modèle de données abstrait de XML
schema (§2.2) clarifie le fait que la plupart des composants ont un {espace de noms cible}. La
plupart des composants correspondant à des représentations à l'intérieur
d'une unité d'information de type élément <schema> donnée auront un {espace de noms cible} qui correspondra à
l'attribut targetNamespace
.
Comme la chaîne de caractère vide n'est pas un nom d'espace de noms
autorisé, fournir une telle chaîne à l'attribut targetNamespace
est incohérent et ne signifie pas la même chose que de ne pas la spécifier du
tout. La forme du document de type schéma correspondant à un ·schéma· dont les composants n'ont pas {d'espace de noms cible} est celle pour
laquelle l'attribut targetNamespace
n'a pas été spécifié du
tout.
Remarque : La recommandation sur les espaces de noms XML se limite à la syntaxe des éléments et des attributs dans les instances de documents ; elle ne fournit par conséquent aucun cadre de travail direct pour la gestion des noms des définitions de types, de groupes d'attributs etc. Néanmoins, la spécification applique sans distinction de cas, à tous les composants de schéma, la possibilité d'avoir un espace de noms cible, c'est à dire pas uniquement aux déclarations mais aussi aux définitions.
Bien que l'exemple de schéma de ce début de chapitre pourrait être un document XML complet avec l'élément <schema> comme élément principal du document, ce même élément pourrait très bien apparaître à l'intérieur d'autres documents. En vérité il n'existe aucune obligation pour qu'un schéma corresponde à un quelconque document (textuel) : il peut correspondre à une unité d'information de type élément construite 'manuellement', par exemple via une API conforme à DOM.
A part les éléments <include> et <import> qui ne correspondent pas directement à un quelconque composant de schéma, chacune des unités d'information de type élément pouvant apparaître dans le contenu de <schema> correspond à un composant de schéma et toutes, à l'exception de <annotation>, sont nommées. Les chapitres ci-dessous présentent tour à tour chacune de ces unités, exposant les composants auxquels elles peuvent correspondre.
Le référencement des composants de schéma depuis un document de type schéma est géré de manière uniforme, que le composant corresponde à une unité d'information de type élément se trouvant dans le même document de type schéma ou qu'il soit importé (se référer au chapitre Références aux composants de schéma au travers des espaces de noms (§4.2.3)) d'un schéma externe (qui peut, sans y être obligé, correspondre à un véritable document de type schéma). La forme de toutes ces références est un ·QName·.
[Définition :] Un QName est un nom pouvant être qualifié par un espace de noms tel que défini dans [XML-Namespaces]. Quand un QName (Nom Qualifié) est utilisé pour la représentation XML des composants de schéma ou de leur référencement, il s'agit du QName correspondant au type simple QName tel qu'il est défini dans [XML Schema tome 2 : Types de données].
[Définition :] Un NCName est un nom sans double point tel que défini dans [XML-Namespaces]. Quand un NCName est utilisé pour la représentation XML des composants de schéma dans cette spécification, il s'agit du NCName correspondant au type simple NCName tel qu'il est défini dans [XML Schema tome 2 : Types de données].
Dans chacune des représentations XML exposées dans les chapitres qui
suivent, un attribut a le type QName
si et seulement si il est
vu comme référençant un composant de schéma.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.example.com" targetNamespace="http://www.example.com"> . . . <xs:element name="elem1" type="Address"/> <xs:element name="elem2" type="xhtml:blockquote"/> <xs:attribute name="attr1" type="xsl:quantity"/> . . . </xs:schema>
Les noms des composants de schéma tels que des définitions de types et des déclarations d'éléments ne sont pas du type ID : ils ne sont pas uniques à l'intérieur d'un schéma, seulement à l'intérieur d'un espace de symboles. Cela signifie que des identifiants simples de fragments ne marcheront pas toujours pour référencer des composants de schéma à partir d'un monde extérieur au contexte des documents de type schéma.
Il n'y a actuellement aucune prévision de faite spécialement pour la
definition de l'interprétation des identifiants de fragments par le type MIME
text/xml
, qui est le type MIME pour les schémas, afin de
référencer les composants de schéma en tant que tel. Cependant, [XPointer] fournit un mécanisme qui correspond bien
aux notions d'espaces de symboles telles qu'elles sont conçues dans la
représentation XML des composants de schéma. Un identifiant de fragment de la
forme #xpointer(xs:schema/xs:element[@name="person"])
identifiera de manière unique la représentation d'une déclaration supérieure
d'élément ayant le nom person
et d'autres identifiants
similaires de fragments peuvent évidemment être construits pour d'autres
espaces de symboles globaux.
Des identifiants courts de fragments peuvent aussi être utilisés dans
certains cas, c'est à dire quand une DTD ou un schéma XML sont disponibles
pour le schéma en question et qu'il a été prévu un attribut id
de type ID
pour toutes les représentations primaires et secondaires des composants du
schéma.
C'est aux applications de savoir spécifier si elles interprètent les références de niveau document de l'une ou l'autre des variantes exposées ci-dessus comme appartenant à l'unité d'information concernée (c'est à dire sans reconnaissance particulière de la relation entre les documents de type schéma et les composants de schéma) ou comme étant au composant de schéma correspondant.
[Définition :] chaque fois que l'expression verbale se ramener à, quel qu'en soit sa forme, est utilisée dans ce chapitre en relation avec un ·QName· se trouvant dans un document de type schéma, la définition Résolution de QName (document de type schéma) (§3.15.3) doit être comprise ainsi :
namespace
est identique à ce ·nom d'espace de noms·.Comme cela a été clairement exposé au chapitre Détails sur les composants de schéma (§3), le référencement de composants par leur nom, tant au niveau des composants de schéma que de la ·validation·, n'est normalement pas impliqué. Dans quelques cas cependant, des noms qualifiés apparaissant dans des unités d'information en cours de ·validation· doivent être ramenés à des composants de schéma par un processus de lookup. La contrainte suivante s'applique alors à ces cas :
targetNamespace
correspond à la propriété cible [espace de noms du
schéma] décrite ci-dessus (ou dont l'attribut
targetNamespace
était ·absent· mais dont les composants auront
contribué à cet espace de noms en ayant été inclus via l'élément
<include> par
un document de type schéma ayant cet attribut
targetNamespace
comme cela est décrit au chapitre Assembler un schéma pour un seul espace
de noms cible à partir de plusieurs documents de définition
.2.1)):
Remarque : L'unité d'information de type relation ID/IDREF, au contraire de la plupart des autres aspects de cette spécification, est essentiellement un mécanisme interne de gestion. Il est introduit pour supporter la définition faite au chapitre Racine de validation valide (ID/IDREF) (§3.3.4) ci-dessus. En conséquence, les programmes de traitement conformes peuvent, mais n'y sont pas obligés, l'exposer dans l'ensemble d'information résultant de la validation de schéma. En d'autres termes, la contrainte ci-dessus peut être interprétée comme étant une ·évaluation· se faisant comme si une telle unité d'ensemble d'information existait.
Toutes les schémas (référez-vous au chapitre Les schémas dans leur ensemble (§3.15)) doivent satisfaire la contrainte suivante.
Ce chapitre définit les mécanismes qui permettent à cette spécification d'établir les conditions préalables à ·l'évaluation·, à savoir l'accès à un ou plusieurs schémas. Ce chapitre expose également en détail la relation entre les schémas et les espaces de noms, tout comme les mécanismes de modularisation des schémas, incluant les possibilités d'incorporation des définitions et des déclarations d'un schéma dans un autre, y compris le cas où des modifications sont faites au passage.
Le chapitre sur la conformité (§2.4) décrit trois niveaux de conformité pour les programmes validant et le chapitre sur L'évaluation de la validité des schémas (§5) fournit une définition formelle de ·l'évaluation·. Ce chapitre expose en détail l'architecture à 3-niveaux découlant des trois niveaux de conformité qui sont :
Le niveau 1 spécifie comment un schéma constitué de composants de schéma peut être utilisé dans ·l'évaluation· d'une unité d'information de type élément instance. Le niveau 2 spécifie l'utilisation des éléments <schema> dans des documents XML tels que la représentation standard en XML de l'information de schéma dans un large éventail de systèmes informatiques et d'environnements d'exécution. Pour supporter l'interopérabilité sur le World Wide Web en particulier, le niveau 3 fournit un ensemble de conventions pour le référencement des schémas sur le Web. Les chapitres ci-dessous contiennent les détails de chacun de ces trois niveaux.
L'objectif fondamental du noyau de ·l'évaluation· est de définir ce que signifie ·l'évaluation· d'une seule unité d'information de type élément (mais en incluant ses descendants) par rapport à une définition de type complexe. Tous les programmes validant doivent implémenter ce noyau d'une manière qui se conforme exactement à cette spécification.
·l'évaluation· est définie en référence à un ·schéma XML· (récepteur qu'il ne s'agit pas d'un ·document de type schéma·) constitué (au moins) de l'ensemble des composants de schéma (définitions et déclarations) nécessaires à cette ·évaluation·. Cela n'est pas une définition circulaire, mais plutôt une observation à posteriori : aucune unité d'information de type élément ne peut être pleinement évaluée que si tous les composants rendus nécessaires par un quelconque aspect de son ·évaluation· (potentiellement récursive) sont présents dans le schéma.
Comme il l'est spécifié ci-dessus, chaque composant de schéma est associé directement or indirectement à un espace de noms cible mais peut faire également l'objet d'une association explicite sans espace de noms. Pour les documents ayant plusieurs espaces de noms, les composants de plusieurs espaces de noms cibles devront cohabiter dans un schéma.
Les programmes de traitement ont la possibilité soit d'assembler (voire d'optimiser ou pré-compiler) le schéma tout entier avant de commencer une étape ·d'évaluation· soit de ne l'assembler qu'au fil de l'eau, au fur et à mesure que les composants individuels sont nécessaires. Dans tous les cas, il est obligatoire :
Remarque : le noyau de ·l'évaluation· est défini en termes de composants de schéma du niveau abstrait et aucune référence n'est faite quant à la syntaxe de définition du schéma (c'est à dire la manière de représenter l'élément <schema>). Bien que la plupart des programmes ne feront que lire les schémas de ce format, d'autres pourraient très bien agir à partir soit de formes compilées, soit de représentations orientées programmation comme cela est possible avec quelques langages de programmation, etc...
L'obligation que les programmes de traitement concernés par les schémas ont, en tout cas en ce qui concerne le noyau de ·l'évaluation·, est de mettre en application une ou plusieurs options de ·l'évaluation· fournies ci-après au chapitre Evaluation de la validité de schéma (§5.2). Ni le choix de l'unité d'information de type élément pour cette ·évaluation·, ni celui des moyens utilisés pour initier ·l'évaluation· ne font partie du domaine d'application de cette spécification.
Bien que ·l'évaluation· soit définie récursivement, elle est aussi prévue pour pouvoir être mise en application dans des programmes de traitement à flot continu de données. Ceux-là peuvent choisir d'assembler le schéma de manière incrémentale pendant le traitement, par exemple, au fur et à mesure que de nouveaux espaces de noms sont rencontrés. La conséquence des exigences de base du noyau vues ci-dessus sur ce mode de fonctionnement est qu'il doit donner une sortie ·d'évaluation· identique à celle qui résulterait de l'évaluation qui aurait été réalisée en ayant préalablement assemblé le schéma en totalité.
Les sous-chapitres du chapitre Détails sur les composants de schéma (§3) définissent une représentation XML pour les définitions de types, les déclarations d'éléments etc., en spécifiant leur espace de noms cible et en les collectant dans des documents de type schéma. Les deux chapitres suivants traitent de l'assemblage complet d'un schéma pour une ·évaluation· à partir de sources multiples. Ils ne doivent pas être interprétés comme une forme de substitution de texte, mais plutôt comme des mécanismes de gestion de la répartition des définitions des composants de schéma, en ayant une sémantique appropriée aux schémas.
Remarque : L'architecture du noyau de ·l'évaluation· impose de pouvoir disposer d'un schéma complet ayant toutes les déclarations et définitions nécessaires. Cela peut impliquer de résoudre à la fois des références de type instance->schéma et d'autres de type schéma->schéma. Comme cela a déjà pu être observé plus haut au chapitre Conformité (§2.4), il est admis que les mécanismes précis qui gèrent ces liens doivent pouvoir évoluer dans le temps. En prévision de cela, cette spécification observe un principe conceptuel qui consiste à considérer les mécanismes de référencement schéma->schéma et ceux de référencement instance->schéma sur deux plans parallèles.
Remarque : Dans les chapitres ci-après, le terme
"schemaLocation
" recouvre une fonctionnalité qui appartient en
réalité au niveau 3. Pour plus de facilité de lecture, il est documenté
avec les mécanismes du niveau 2 d'import et d'inclusion, avec lesquels il
est étroitement associé.
Les composants d'un schéma pour un seul espace de noms cible peuvent être assemblés à partir de plusieurs ·documents de type schéma·, en clair plusieurs unités d'information de type élément <schema> :
include
<include
id = ID
schemaLocation = anyURI
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?)
</include>
Une unité d'information <schema> peut contenir un nombre quelconque
d'éléments <include> dont
l'attribut schemaLocation
, qui est concrètement une référence
d'URI, identifie d'autres ·documents de type schéma·, c'est à dire d'autres unités d'information <schema>.
Le ·schéma XML·
correspondant à <schema>
ne contient pas seulement les composants correspondant aux définitions et
déclarations [enfants], mais
contient également tous les composants de tous les ·schémas XML· appelés par <include>. Les documents de type schéma qui
sont inclus de la sorte doivent soit (a) avoir le même
targetNamespace
que le document les incluant, ou (b) ne pas
avoir du tout cet attribut, auquel cas le document de type schéma qui est
inclus est transféré dans l'espace de noms cible du document de type schéma
l'incluant.
schemaLocation
est ramenée avec succès, l'une des
conditions suivantes doit être vérifiée :
application/xml
ou text/xml
ayant une déclaration XML de préférence, mais cela n'est pas obligé), qui, à
son tour, correspond à l'unité d'information de type élément <schema> d'un ensemble
d'information bien formé, qui, à son tour, correspond à un schéma
valide.Dans les deux cas, si on appelle SII l'unité <schema> incluse, I le schéma valide et SII’ l'unité <schema> parent de l'unité où se trouve l'élément <include>.
targetNamespace
et sa ·valeur réelle· est
identique à la ·valeur réelle· de [l'attribut]
targetNamespace
de SII’ (qui doit avoir un tel [attribut]).targetNamespace
de SII’ qui devra être utilisée. En
particulier, cette valeur remplace ·absent· aux endroits
suivants :
code
était
qualified
) que de manière imbriquée à l'intérieur de
définitions ;Ce n'est pas une erreur si la ·valeur réelle· de [l'attribut]
schemaLocation
n'arrive pas du tout à ramener l'information
recherchée, dans ce cas l'inclusion correspondante n'est pas réalisée. Par
contre, c'est une erreur quand l'information est ramenée mais que le
reste de la clause 1 n'est ensuite pas satisfait. Un échec de la résolution
peut très bien produire un résultat ·d'évaluation· moins
complet, évidemment.
Remarque : Comme cela a été exposé au chapitre Sous-composants manquant (§5.3), les ·QName· utilisés dans les représentations XML peuvent échouer dans leur ·résolution·, rendant les composants incomplets et inutilisables à cause de sous-composants manquants. Pendant la construction du schéma, les mises en application de la spécification sont susceptibles de conserver en mémoire des valeurs de ·QName· en guise de référence, au cas où un traitement ultérieur fournirait l'information référencée. Les ·noms d'espaces de noms· cibles de type ·absent· qui se trouvent dans de telles références pas encore résolues issues de composants inclus doivent aussi être converties si la clause 3.2 est satisfaite.
Remarque : Le point ci-dessus est écrit de manière très précise afin que plusieurs inclusions du même document de type schéma ne constituent pas une violation de la clause 2 du chapitre Exactitudes des propriétés des schémas (§3.15.6), et les applications sont autorisées, voire encouragées, à éviter les inclusions répétitives du même document de type schéma afin de ne pas avoir à se retrouver obligées de gérer l'identité des composants individuellement.
Afin d'apporter un certain niveau de support en prévision de la nécessaire gestion des révisions et du versionnement des schémas, il est possible d'incorporer des composants correspondant à un document de type schéma en les modifiant. Les modifications sont définitives, c'est à dire, que seuls la version redéfinie des composants est utilisée, même quand ils sont référencés par d'autres composants incorporés, qu'ils soient eux-mêmes redéfinis ou non.
redefine
<redefine
id = ID
schemaLocation = anyURI
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation | (simpleType | complexType | group | attributeGroup))*
</redefine>
Une unité d'information <schema> peut contenir n'importe quel nombre
d'éléments <redefine>.
L'attribut schemaLocation
, qui contient une référence d'URI,
pointe un ·document de type schéma·, c'est à dire contenant l'unité d'information <schema>.
Le ·schéma XML·
correspondant à <schema>
ne contient dès lors pas seulement les composants correspondant à ses propres
définitions et déclarations [enfants], mais
aussi tous les composants redéfinis ·des documents de type
schéma identifiés par l'éléments <redefine>. Ceux-là doivent soit (a) avoir
le même attribut targetNamespace
que le document de type schéma
les redéfinissant, soit (b) ne pas avoir cet attribut du tout, auquel cas le
document de type schéma redéfini est transféré dans l'espace de noms cible du
document de type schéma le redéfinissant.
Les définitions propres à l'élément <redefine> lui-même ne sont que les redéfinitions des composants du schéma pointé par l'élément <redefine>. C'est à dire :
Il n'est pas obligé de redéfinir tous les composants du document de type schéma pointé par l'éléments <redefine>.
Ce mécanisme est sensé fournir une approche déclarative et modulaire à la modification des schémas, avec des fonctionnalités pas différentes à l'exception des limites de ce qui aurait été possible de faire par une copie massive et une redéfinition des éléments via une étape d'édition. En particulier redéfinir un type n'est pas garanti contre les effets de bords : cela peut avoir des conséquences imprévues sur d'autres définitions de types qui seraient basées sur celle redéfinie, cela peut aller jusqu'au point où ces définitions deviennent elles-mêmes mal-formées.
Remarque : L'aspect "définitif" de la redéfinition renforce la nécessité d'avoir des implémentations permettant d'avoir des mécanismes de construction de composants basés sur une approche souple ou 'juste-à-temps', cela pour éviter de devoir imposer un ordre d'écriture des définitions et des références dans les documents de type schéma.
v1.xsd: <xs:complexType name="personName"> <xs:sequence> <xs:element name="title" minOccurs="0"/> <xs:element name="forename" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:element name="addressee" type="personName"/> v2.xsd: <xs:redefine schemaLocation="v1.xsd"> <xs:complexType name="personName"> <xs:complexContent> <xs:extension base="personName"> <xs:sequence> <xs:element name="generation" minOccurs="0"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> </xs:redefine> <xs:element name="author" type="personName"/>
v2.xsd
contient tout ce qui est
spécifié dans v1.xsd
, à la différence du type redéfini
personName
, plus tout ce qui est propre à v2.xsd
.
D'après ce schéma, le contenu des éléments sous la contrainte de
personName
peuvent finir par l'élément generation
.
Cela n'est pas uniquement vrai pour l'élément author
mais
également pour l'élément addressee
.schemaLocation
doit être ramenée avec succès.schemaLocation
est ramenée avec succès l'une des
conditions suivantes doit être vérifiée :
Dans les deux cas, on appelle SII l'unité <schema> qui est redéfinie, I le schéma valide et SII’ l'unité <schema> parent de l'unité redéfinissante <redefine>.
targetNamespace
et sa ·valeur réelle· est
identique à la ·valeur réelle· de [l'attribut]
targetNamespace
de SII’ (qui doit avoir un tel [attribut]).targetNamespace
de SII’ est utilisée (référez-vous
à la clause 3.2 du chapitre Contraintes et sémantique de l'inclusion (§4.2.1)
pour plus de détails).restriction
ou une extension
parmi
ses grands-[enfants] pour
lesquels la ·valeur réelle· de [l'attribut]
base
doit être la même que la ·valeur réelle· de son propre attribut name
augmentée
de l'espace de noms cible ;ref
est la même que celle de son propre attribut
name
augmentée de l'espace de noms cible, alors
toutes les conditions suivantes doivent être remplies :
minOccurs
et maxOccurs
de ce groupe doivent être
1
(Sinon, il doivent être ·absents·).name
augmentée de l'espace de noms cible doit être ·ramenée· avec succès et doit se ramener à la définition
d'un groupe modèle de I.ref
est la même que la ·valeur réelle· de son
propre attribut name
augmentée de l'espace de noms cible,
alors il ne doit y avoir exactement qu'un seul tel groupe.name
augmentée de l'espace de noms cible doit être ·ramenée· avec succès et se ramener à la définition d'un
groupe attribut de I.Remarque : Un groupe d'attributs redéfini par restriction via la clause 7.2 correspond à un groupe d'attributs dont l'ensemble des {attributs utilisés} ne contient que des attributs dont l'utilisation correspond aux éléments <attribute> explicitement présents parmi les [enfants] de la version redéfinie (par l'élément <redefine>) de <attributeGroup>. Aucun héritage du groupe d'attributs redéfini par <redefine> n'intervient. Son {attribut générique} est, de manière similaire, purement basé sur la présence explicite de l'élément <anyAttribute>.
name
dans le document de type schéma redéfini par <redefine> comme cela est
défini au chapitre sur les Détails des composants de
schéma (§3), excepté que son {nom}
est ·absent· ;Ce couple garantit que les contraintes de cohérence sur les définitions de types sont respectées tout en conservant le résultat souhaité, à savoir que les références à des noms de composants redéfinis dans les deux cas de schéma (celui qui est redéfini et celui qui redéfinit) ramènent le composant redéfini comme cela est précisé dans la clause 1.2 ci-dessus.
ref
ayant la même ·valeur réelle· que celle
de l'attribut name
de l'unité augmentée de l'espace de noms
cible est ramené, alors un composant correspondant à l'unité de la définition
supérieure de ce nom et du genre de celui utilisé dans I est
utilisé.Dans tous les cas il doit y avoir une unité de définition supérieure du nom et du genre dans le document de type schéma redéfini par <redefine>.
Remarque : Le texte ci-dessus est minutieusement écrit de manière à ce que plusieurs redéfinitions du même document de type schéma faites par <redefine> ne provoquent pas une violation de la clause 2 du chapitre Exactitudes des propriétés de schéma (§3.15.6), mais les applications sont autorisées, et même encouragées, à éviter la redéfinition successive d'un même document de type schéma par <redefine> afin de ne pas avoir à se retrouver obligées de gérer l'identité des composants individuellement (bien que cela devra être fait pour les redéfinitions individuelles elles-mêmes).
Comme cela est décrit au chapitre sur le Modèle de données abstrait de XML Schema (§2.2), chaque composant de niveau supérieur est associé à un espace de noms cible (ou, explicitement, avec aucun). Ce chapitre expose le mécanisme précis par lequel une référence à un composant étranger est faite, c'est à dire, un composant ayant un espace de noms cible différent de celui du composant le référençant. Ce chapitre donne la syntaxe de ce mécanisme sous la forme de définitions de schéma XML.
Deux points sont requis : il faut premièrement mettre en place un moyen d'adressage du composant étranger et deuxièmement il faut transmettre un signal spécifique aux programmes validant pour leur indiquer qu'un document de type schéma contient de telles références :
import
<import
id = ID
namespace = anyURI
schemaLocation = anyURI
{tout attribut ayant un espace de noms différent de celui du schéma. .
.}>
Content: (annotation?)
</import>
L'unité d'information de type élément <import> identifie les espaces de noms
utilisés dans des références externes, c'est à dire celles identifiées par
leur ·QName· comme venant d'un
espace de noms différent (ou aucun) que le targetNamespace
du
document de type schéma récepteur. La ·valeur réelle· de son [attribut]
namespace
indique que le document de type schéma récepteur peut
contenir des références qualifiées à des composants de schéma de cet espace
de noms (via un ou plusieurs préfixes déclarés porteurs de déclarations
d'espace de noms standard). Si cette attribut est absent, alors l'import
permet d'avoir des références non qualifiées à des composants n'ayant pas
d'espace de noms cible. Remarquez que les composants qui sont importés n'ont
pas besoin d'être de la forme d'un ·document de type
schéma·; le programme de traitement est libre
d'accéder ou de construire des composants en utilisant les moyens de ses
propres choix.
La ·valeur
réelle· de l'attribut
schemaLocation
, si il est présent, donne un indice sur
l'emplacement où se trouve la version sérialisée d'un ·document de type
schéma· ayant des déclarations et des
définitions pour cet espace de noms (ou aucun). Quand il n'y a pas [d'attribut]
schemaLocation
, l'auteur du schéma laisse le soin de
l'identification de ce schéma soit à l'instance, soit à l'application soit
enfin à l'utilisateur, cela via les mécanismes décrits ci-dessous dans le
chapitre sur le Niveau 3: document de type
schéma accès et interopérabilité avec le Web (§4.3). Quand un attribut
schemaLocation
est présent, il ne peut contenir qu'une seule
référence d'URI à propos de laquelle l'auteur du schéma certifie qu'elle
ramènera une version sérialisée d'un ·document de type
schéma· contenant le ou les composants dans
l'espace de noms importé et référencé par ailleurs dans le document de type
schéma récepteur.
Remarque : Puisque les deux [attributs]namespace
etschemaLocation
sont facultatifs, l'écriture sous la forme<import/>
est autorisée. Cela permet simplement d'utiliser une référence non qualifiée à des composants étrangers n'ayant pas d'espace de noms cible en s'affranchissant de devoir donner un quelconque indice quant à leur emplacement.
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:html="http://www.w3.org/1999/xhtml" targetNamespace="uri:mywork" xmlns:my="uri:mywork"> <import namespace="http://www.w3.org/1999/xhtml"/> <annotation> <documentation> <html:p>[Some documentation for my schema]</html:p> </documentation> </annotation> . . . <complexType name="myType"> <séquence> <element ref="html:p" minOccurs="0"/> </séquence> . . . </complexType> <element name="myElt" type="my:myType"/> </schema>
namespace
est présent, alors sa ·valeur réelle· doit être différente de celle de [l'attribut]
targetNamespace
de l'élément <schema> englobant.namespace
est absent, alors l'élément <schema> englobant doit avoir un [attribut]
targetNamespace
schemaLocation
et namespace
, fournit un référent,
comme cela est défini au chapitre sur la Stratégie de repérage des documents de type schéma
(§4.3.2), l'une des conditions suivantes doit être remplie :
Dans les deux cas on appelle SII l'unité <schema> et I le schéma valide.
namespace
, alors sa ·valeur réelle· doit être identique à celle de [l'attribut]
targetNamespace
de SII.namespace
, alors SII ne doit avoir aucun [attribut]
targetNamespace
Ce n'est pas une erreur si la stratégie de référencement du schéma de l'application échoue. C'est une erreur si elle résout le référencement mais que le reste de la clause 2 ci-dessus échoue. L'échec de la recherche d'un référent peut tout à fait causer la production d'un résultat ·d'évaluation· très incomplet, bien évidemment.
Les ·composants de schéma· (c'est à dire les {définition de types}, les {déclarations d'attributs}, les {déclarations d'éléments}, les {définitions de groupes d'attributs}, les {définitions des groupes modèles}, les {déclarations des notations}) du schéma correspondant à l'unité d'information de type élément <schema> contenant elle-même une ou plusieurs unités d'information de type élément <import> ne doit pas seulement inclure les définitions et les déclarations de ses [enfants], mais aussi, et ceci pour chaque unité d'information de type élément <import> qui satisfait la clause 2 ci-dessus, l'ensemble des ·composants de schéma· identiques à tous les ·composants de schéma· de I.
Remarque : Le texte ci-dessus est écrit avec précision de manière à ce que plusieurs importations du même document de type schéma n'entraînent pas une violation de la clause 2 du chapitre sur les Exactitudes des propriétés de schéma (§3.15.6), mais les applications sont autorisées, voire même encouragées, à éviter les importations successive du même document de type schéma afin de ne pas avoir à se retrouver obligées de gérer l'identité des composants individuellement. En considérant que [l'attribut]schemaLocation
n'est qu'une indication, les applications sont libres d'ignorer toutes les unités <import> après la première pour un espace de noms donné, cela indépendamment de la ·valeur réelle· deschemaLocation
, mais le risque est alors de passer à côté d'une information utile quand les valeurs deschemaLocation
évoluent.
Les niveaux 1 et 2 fournissent le cadre de travail pour ·l'évaluation· et les définitions XML de schémas pour un grand nombre d'environnements. Avec le temps, les standards et les conventions relatifs au support de l'interopérabilité des mises en oeuvre de XML Schema sur le World Wide Web pourront évoluer. Le niveau 3 de conformité définit les fonctions minimum obligatoires pour tout programme validant ouvert au cas des ressources réparties sur le Web : on s'attend à ce que, avec le temps, d'autres standards (par exemple XML Packages) touchant directement les questions de l'interopérabilité sur le Web et dans d'autres environnements voient le jour et il ne faudrait alors pas avoir besoin de publier une nouvelle version de cette spécification.
Pour répondre au besoin d'interopérabilité, les ·documents de type schéma· sérialisés (comme toute ressource du Web) peuvent être identifiés par un URI et récupérés en utilisant les mécanismes standard du Web (par exemple http, https, etc.) Ces documents sur le Web doivent être des parties de documents XML (référez-vous à la clause 1.1) et représentés sous la forme standard définie par XML schema (décrite par le niveau 2), c'est à dire comme des unités d'information de type élément <schema>.
Remarque : il arrivera souvent qu'un document de type schéma soit en réalité un document XML 1.0 complet ayant <schema> comme élément racine. Il existera également des cas où les unités <schema> seront contenues dans d'autres documents et seront référencées comme fragments via une notation XPointer.
Remarque : Les différences entre logiciels serveurs et les politiques d'administration des sites web rendent difficile une quelconque recommandation d'une approche particulière aux requêtes de récupération de ·documents de type schéma· sérialisés. Une entêteAccept
deapplication/xml, text/xml; q=0.9, */*
est peut-être un point de départ raisonnable.
Comme cela est décrit dans le chapitre Niveau 1: Résumé du noyau de l'évaluation de la validité du schéma (§4.1), les programmes validant sont responsables de la collecte des composants de schéma (définitions et déclarations) nécessaires à ·l'évaluation·. Ce chapitre introduit un ensemble de conventions normatives visant à faciliter l'interopérabilité des instances et schémas récupérés et traités sur le Web.
Remarque : comme cela est discuté dans la chapitre Niveau 2 : documents de type schémas, espaces de noms et assemblage (§4.2), des mécanismes de collecte indépendant du Web peuvent exister mais ceux-là sont en dehors du périmètre de cette spécification.
Les programmes validant supportant le Web sont libres de prendre en charge ·l'évaluation· par rapport à n'importe quel schéma arbitraire de n'importe laquelle des manières exposées au chapitre sur L'évaluation de la validité de schéma (§5.2). Cependant, il est pratique de pouvoir déterminer le schéma à utiliser sur la base d'une convention commune. En conséquence, un programme général de validation (c'est à dire ceux qui ne sont pas spécialisés dans un seul ou un ensemble de schémas prédéterminés) se chargeant de ·l'évaluation· d'un document sur le web doit se comporter comme suit :
targetNamespace
est identique au nom de l'espace de noms, si
il existe, de l'unité d'information de type élément sur laquelle ·l'évaluation·
s'applique.L'assemblage du schéma complet pour son utilisation dans ·l'évaluation· est discuté au chapitre sur le Niveau 2 : document de type schémas, espaces de noms et assemblage (§4.2) ci-dessus. Les moyens utilisés pour repérer les documents de type schéma appropriés dépendent des programmes de validation et des applications, et sont soumis aux exigences suivantes :
Remarque : L'expérience suggère qu'il n'est pas systématiquement sûr ou ne serait-ce que souhaitable, d'un point de vue des performances, de considérer le deréférencement des noms d'espaces de noms comme une question évidente. La communauté des utilisateurs et/ou les accords entre consommateur et fournisseur peuvent être à l'origine de conditions favorables pour qu'un tel déréférencement soit une stratégie raisonnable par défaut : Cette spécification autorise sans toutefois exiger que des communautés particulières puissent établir et mettre en oeuvre de telles conventions. Les utilisateurs sont toujours libres de fournir des noms d'espaces de noms comme information de repérage des schémas sur le web alors que le déréférencement est souhaité : voir ci-après.
schemaLocation
et noNamespaceSchemaLocation
(de
l'espace des noms réservés aux instances de XML Schema, c'est à dire,
http://www.w3.org/2001/XMLSchema-instance
, soit
xsi:schemaLocation
et
xsi:noNamespaceSchemaLocation
) sont fournis. Le premier
attribut enregistre la garantie de l'auteur sous la forme d'une paire de
référence d'URI (une pour le nom de l'espace de noms et l'autre pour
l'information de repérage du schéma livrant des noms à ce nom d'espace de
noms). Le deuxième attribut fournit de la même manière une référence
d'URI servant d'information de repérage d'un schéma n'ayant pas [d'attribut]
targetNamespace
.
A moins d'être pilotés autrement, par exemple par l'application
appelante ou une option sur la ligne de commande, les programmes validant
doivent essayer de déréférencer chacune des URI de repérage des schéma se
trouvant dans la ·valeur réelle· de
l'ensemble des [attributs]
xsi:schemaLocation
et
xsi:noNamespaceSchemaLocation
, référez-vous aux details
ci-après.
xsi:schemaLocation
et
xsi:noNamespaceSchemaLocation
peuvent apparaître sur
n'importe quel élément. C'est cependant une erreur si l'un d'eux apparaît
après la première apparition d'une unité d'information de type
élément ou attribut à l'intérieur d'une unité d'information de type
élément initialement ·validée· avec le [nom de
l'espace de noms] qu'elle adresse. D'après les règles du chapitre sur
le Niveau 1: Résumé du noyau de l'évaluation de la
validité du schéma (§4.1), le schéma résultant peut être
superficiellement assemblé, tout en étant par ailleurs stable sur
l'ensemble du processus ·d'évaluation·. Bien
que les attributs de repérage du schéma peuvent apparaître sur n'importe
quel élément et peuvent être traités par un processus incrémental au fur
et à mesure de leur découverte, leur effet sur ·l'évaluation· est essentiellement global. Les définitions et
les déclarations restent actives au delà des frontières de l'élément où
l'association a été déclarée.<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/1999/XSL/Transform http://www.w3.org/1999/XSL/Transform.xsd http://www.w3.org/1999/xhtml http://www.w3.org/1999/xhtml.xsd">
schemaLocation
peuvent, sans que cela soit nécessaire, être
identiques à ceux qualifiant réellement l'élément sur lequel on va trouver,
au niveau de la balise ouvrante, une utilisation de ce même attribut ou au
niveau des autres attributs de cet élément. Par exemple, comme ci-dessus,
toute l'information de repérage du schéma peut être déclarée sur l'élément
racine du document, si on le souhaite ainsi, indépendamment de l'endroit ou
les espaces de noms sont réellement utilisés.xsi:schemaLocation
ou
xsi:noNamespaceSchemaLocation
, le programme validant peut mettre
en application n'importe quelle combinaison des stratégies suivantes, dans
n'importe quel ordre :
Chaque fois que c'est possible, des configurations et/ou des options d'exécution des programmes permettant de choisir et/ou ordonner les stratégies mises en oeuvre doivent être fournies aux utilisateurs.
De nouvelles conventions ou de nouvelles options relatives à l'interopérabilité avec le web peuvent voir le jour dans le futur sans que cela remette en cause cette spécification. Par exemple, le W3C est actuellement en train de réfléchir sur de nouvelles propositions faites pour normaliser la présentation des ressources ayant un rapport avec des documents et/ou des espaces de noms particuliers : Cela viendrait typiquement se rajouter aux mécanismes décrits ici au niveau 3. Cette architecture facilite aussi l'innovation au niveau 2 : par exemple, il serait possible dans le future de définir un standard supplémentaire pour la représentation des composants de schéma qui autoriserait, par exemple, des définitions de types à être spécifiées morceau par morceau, plutôt que d'un seul bloc.
L'architecture relative aux schémas permet de traiter un grand nombre de cas différents de documents XML : la validité de schéma n'est pas un prédicat binaire.
Cette spécification fait la distinction entre les erreurs de construction et de structure d'un schéma d'un côté avec celles liées aux résultats de la validation de schéma d'un autre côté.
Avant de pouvoir tenter une ·évaluation·, il est
obligatoire de disposer d'un schéma. Les applications spécifiques sont libres
de définir leur propres règles d'association d'un schéma à une ·évaluation· particulière, mais les programmes validant
généralistes doivent implémenter la stratégie exposée au chapitre sur la Stratégie de repérage des documents de type schéma
(§4.3.2), en commençant par l'interprétation des espaces de noms déclarés
dans les documents ·évalués· et les ·valeurs
réelles· des [attributs]
xsi:schemaLocation
et xsi:noNamespaceSchemaLocation
qui s'y trouvent éventuellement, conjointement au traitement de l'information
relative à l'identification du schéma ou à sa localisation ; information qui
peut être spécifiquement fournie par les utilisateurs, via une option de
l'application, quand elle le permet.
Une erreur doit être générée quand un schéma et les composants de l'une quelconque de ses propriétés, récursivement, échouent à satisfaire les contraintes correspondantes à celles exposées dans chacun des derniers sous-chapitres des sous-chapitres du grand chapitre sur les Détails sur les composants de schéma (§3).
Si un schéma est dérivé d'un ou plusieurs schémas (c'est à dire, une ou plusieurs unités d'information de type élément <schema>) basés sur les règles de correspondance exposées au chapitre sur les Détails sur les composants de schéma (§3) et à celui sur les Schémas et les espaces de noms : accès et assemblage (§4), deux conditions additionnelles existent alors :
Les trois cas décrits ci-dessus sont les seuls types d'erreur que cette spécification définit. Par rapport aux programmes de contrôle de structure des schémas et des éditeurs de schémas, cette spécification n'impose aucune règle quant au comportement que doivent avoir les programmes après qu'ils aient détecté une erreur. Toutefois, faire une ·évaluation· d'entités de type schéma qui ne respecteraient pas toutes les exigences de cette spécification serait incohérent. En conséquence, les programmes validant conformes à cette spécification doivent refuser ·l'évaluation· de tels schémas.
Si un schéma remplit les conditions exprimées au chapitre sur les Erreurs de construction et de structuration d'un schéma (§5.1), alors la validité de schéma d'une unité d'information de type élément a un sens et peut être évaluée. Trois approches sont possibles :
xsi:type
) ou autre chose.Le résultat de cet effort, dans tous les cas, sera visible au niveau de l'ensemble des [tentatives de validation] et de la [validité] de l'unité d'information de type élément, de ses [attributs] et de ses [enfants], récursivement comme cela est défini aux chapitres sur les Résultats de l'évaluation (élément) (§3.3.5) et sur les Résultats de l'évaluation (attribut) (§3.2.5). Il appartient aux applications de décider ce qui constitue un résultat réussi.
Remarquez que chaque unité d'information de type élément et attribut participant à ·l'évaluation· auront aussi un [contexte de validation] qui renvoie à l'unité d'information de type élément sur laquelle commença ·l'évaluation·. [Définition :] Cette unité, qui est l'unité d'information de type élément sur laquelle commença ·l'évaluation·, est appelée la racine de validation.
Remarque : Cette spécification n'est pas en train de redéfinir la notion d'élément racine de XML 1.0 tant au niveau des schémas que des instances. Une fonctionnalité comparable est mise en place, via la clause 2 ci-dessus, au moment du lancement de ·l'évaluation·.
Remarque : Cette spécification ne normalise en rien les ·évaluations· réalisées par couches successives. Il doit cependant être clair en lisant le texte ci-dessus que si un programme validant redémarre une ·évaluation· à partir de l'ensemble d'information issu d'une validation de schéma précédente, quelques unes des contributions qui s'y trouvent peuvent être écrasées. Le redémarrage est cependant parfois utile, particulièrement sur un noeud dont la [tentative de validation] est none, auquel cas il y a trois cas évidents pour lesquels la surcharge d'information après relance de l'évaluation est utile :
- ·l'évaluation· n'a pas été tentée à cause d'un échec de ·validation·, mais les déclarations et/ou les définitions sont disponibles pour au moins quelques uns des [enfants] ou des [attributs] ;
- ·l'évaluation· n'a pas été tentée parce qu'une définition ou une déclaration nommée manquait, mais que le programme de validation a pu récupérer après avoir fait des efforts supplémentaires.
- ·l'évaluation· n'a pas été tentée parce qu'elle a été sautée, mais le programme de traitement a au moins quelques déclarations et/ou définitions disponibles pour au moins quelques uns des [enfants] et des [attributs].
Au début du chapitre sur les Détails sur les composants de schéma (§3), une attention particulière est apportée au fait que la plupart des modèles de composants de schéma ont des propriétés elles-mêmes ayant comme valeur d'autres composants ou ensembles de composants, mais que lorsque des composants de schéma sont construits sur la base d'une correspondance directe avec des unités d'information de type élément, alors ces propriétés correspondent habituellement à des QNames dont la ·résolution· peut échouer, résultant en une ou plusieurs valeurs ·absentes· ou contenant des ·absences· là où un composant était requis.
Si à tout moment pendant ·l'évaluation·, une unité d'information de type élément ou attribut est en train d'être ·validée· par rapport à un composant de n'importe quel type dont n'importe laquelle de ces propriétés a ou contient une telle valeur ·absente·, le comportement de la ·validation· doit être modifiée de la manière suivante :
De part la spécification même de la propriété [tentative de validation] du Résultat de l'évaluation (élément) (§3.3.5), si la situation décrite ci-dessus arrive, la [tentative de validation] du document dans son entier aura une valeur qui ne pourra en aucun cas être full.
Les programmes validant sont responsables du traitement (de différentes manières) de documents XML, de schémas et de documents de type schéma et, en fonction du niveau de conformité (tel que cela est défini au chapitre sur la Conformité (§2.4)) qu'ils supportent, doivent respecter fidèlement les conditions présentées ci-dessus.
La définition de XML Schema pour XML Schema tome 1 : Structures est elle-même présentée ici comme partie normative de la spécification et comme un exemple représentatif de XML Schema en se définissant lui-même à partir des constructions que la spécification définit. Les noms des types, éléments, attributs et des groupes du langage XML Schema définis ici évoquent leur propos mais ne sont que rarement verbeux.
Il y a des annotations dans des commentaires mais une version commentée plus complète aurait nécessité l'utilisation des moyens documentaires intégrés ou d'hyperliens vers des annotations externes pour lesquels aucun outil n'est vraiment disponible à ce jour.
Puisqu'un schéma conforme à XML Schema tome 1 : Structures est un
document XML, il contient des déclarations XML et de document type
optionnelles fournies ici par souci de fournir une information la plus
complète que possible. L'élément racine schema
définit un
nouveau schéma. Puisque celui-là est un schéma pour XML Schema tome 1 :
Structures, l'attribut targetNamespace
référence l'espace de
noms de XML Schema lui-même.
<?xml version='1.0' encoding='UTF-8'?> <!-- XML Schema schema for XML Schemas: Part 1: Structures --> <!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd" [ <!-- fournit des informations de type ID même pour les analyseurs lexico-syntaxiques qui ne font que lire le sous-ensemble interne --> <!ATTLIST xs:schema id ID #IMPLIED> <!ATTLIST xs:complexType id ID #IMPLIED> <!ATTLIST xs:complexContent id ID #IMPLIED> <!ATTLIST xs:simpleContent id ID #IMPLIED> <!ATTLIST xs:extension id ID #IMPLIED> <!ATTLIST xs:element id ID #IMPLIED> <!ATTLIST xs:group id ID #IMPLIED> <!ATTLIST xs:all id ID #IMPLIED> <!ATTLIST xs:choice id ID #IMPLIED> <!ATTLIST xs:sequence id ID #IMPLIED> <!ATTLIST xs:any id ID #IMPLIED> <!ATTLIST xs:anyAttribute id ID #IMPLIED> <!ATTLIST xs:attribute id ID #IMPLIED> <!ATTLIST xs:attributeGroup id ID #IMPLIED> <!ATTLIST xs:unique id ID #IMPLIED> <!ATTLIST xs:key id ID #IMPLIED> <!ATTLIST xs:keyref id ID #IMPLIED> <!ATTLIST xs:selector id ID #IMPLIED> <!ATTLIST xs:field id ID #IMPLIED> <!ATTLIST xs:include id ID #IMPLIED> <!ATTLIST xs:import id ID #IMPLIED> <!ATTLIST xs:redefine id ID #IMPLIED> <!ATTLIST xs:notation id ID #IMPLIED> ]> <xs:schema targetNamespace="http://www.w3.org/2001/XMLSchema" blockDefault="#all" elementFormDefault="qualified" version="Id: XMLSchema.xsd,v 1.48 2001/04/24 18:56:39 ht Exp " xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="EN"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/structures.html"> Le schéma correspondant à ce document est normatif, respectant les contraintes syntaxiques qu'il exprime dans le langage XML Schema. La documentation (à l'intérieur d'éléments <documentation>) ci-dessous, n'est pas normative, mais met plutôt en exergue des aspects importants de la recommandation du W3C dont ce schéma fait partie</xs:documentation> </xs:annotation> <xs:annotation> <xs:documentation> L'élément simpleType et tous ses membres sont définis dans datatypes.xsd</xs:documentation> </xs:annotation> <xs:include schemaLocation="datatypes.xsd"/> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"> <xs:annotation> <xs:documentation> Donne accès aux groupes d'attributs xml: pour l'attribut xml:lang référencé dans les éléments 'schema' et 'documentation' ci-dessous. </xs:documentation> </xs:annotation> </xs:import> <xs:complexType name="openAttrs"> <xs:annotation> <xs:documentation> Ce type est étendu par pratiquement tous les types de schéma pour permettre aux attributs provenant d'autres espaces de noms d'être rajoutés aux schémas utilisateurs. </xs:documentation> </xs:annotation> <xs:complexContent> <xs:restriction base="xs:anyType"> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="annotated"> <xs:annotation> <xs:documentation> Ce type est étendu par tous les types qui permettent d'avoir des annotations autres que <schema> lui-même </xs:documentation> </xs:annotation> <xs:complexContent> <xs:extension base="xs:openAttrs"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> </xs:sequence> <xs:attribute name="id" type="xs:ID"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:group name="schemaTop"> <xs:annotation> <xs:documentation> Ce groupe est pour les éléments qui apparaissent librement au niveau supérieur des schémas. Tous leurs types sont une extension du type de base "annotated".</xs:documentation> </xs:annotation> <xs:choice> <xs:group ref="xs:redefinable"/> <xs:element ref="xs:element"/> <xs:element ref="xs:attribute"/> <xs:element ref="xs:notation"/> </xs:choice> </xs:group> <xs:group name="redefinable"> <xs:annotation> <xs:documentation> Ce groupe est destiné aux éléments qui peuvent s'auto-redéfinir (se référer à <redefine> ci-dessous).</xs:documentation> </xs:annotation> <xs:choice> <xs:element ref="xs:simpleType"/> <xs:element ref="xs:complexType"/> <xs:element ref="xs:group"/> <xs:element ref="xs:attributeGroup"/> </xs:choice> </xs:group> <xs:simpleType name="formChoice"> <xs:annotation> <xs:documentation> Un type utilitaire reservé à un usage interne</xs:documentation> </xs:annotation> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="qualified"/> <xs:enumeration value="unqualified"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="reducedDerivationControl"> <xs:annotation> <xs:documentation> Un type utilitaire reservé à un usage interne</xs:documentation> </xs:annotation> <xs:restriction base="xs:derivationControl"> <xs:enumeration value="extension"/> <xs:enumeration value="restriction"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="derivationSet"> <xs:annotation> <xs:documentation> Un type utilitaire reservé à un usage interne</xs:documentation> <xs:documentation> #all ou un sous-ensemble(pouvent être empty de {extension, restriction}</xs:documentation> </xs:annotation> <xs:union> <xs:simpleType> <xs:restriction base="xs:token"> <xs:enumeration value="#all"/> </xs:restriction> </xs:simpleType> <xs:simpleType> <xs:list itemType="xs:reducedDerivationControl"/> </xs:simpleType> </xs:union> </xs:simpleType> <xs:element name="schema" id="schema"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-schema"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:openAttrs"> <xs:sequence> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element ref="xs:include"/> <xs:element ref="xs:import"/> <xs:element ref="xs:redefine"/> <xs:element ref="xs:annotation"/> </xs:choice> <xs:sequence minOccurs="0" maxOccurs="unbounded"> <xs:group ref="xs:schemaTop"/> <xs:element ref="xs:annotation" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:sequence> <xs:attribute name="targetNamespace" type="xs:anyURI"/> <xs:attribute name="version" type="xs:token"/> <xs:attribute name="finalDefault" type="xs:derivationSet" use="optional" default=""/> <xs:attribute name="blockDefault" type="xs:blockSet" use="optional" default=""/> <xs:attribute name="attributeFormDefault" type="xs:formChoice" use="optional" default="unqualified"/> <xs:attribute name="elementFormDefault" type="xs:formChoice" use="optional" default="unqualified"/> <xs:attribute name="id" type="xs:ID"/> <xs:attribute ref="xml:lang"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:key name="element"> <xs:selector xpath="xs:element"/> <xs:field xpath="@name"/> </xs:key> <xs:key name="attribute"> <xs:selector xpath="xs:attribute"/> <xs:field xpath="@name"/> </xs:key> <xs:key name="type"> <xs:selector xpath="xs:complexType|xs:simpleType"/> <xs:field xpath="@name"/> </xs:key> <xs:key name="group"> <xs:selector xpath="xs:group"/> <xs:field xpath="@name"/> </xs:key> <xs:key name="attributeGroup"> <xs:selector xpath="xs:attributeGroup"/> <xs:field xpath="@name"/> </xs:key> <xs:key name="notation"> <xs:selector xpath="xs:notation"/> <xs:field xpath="@name"/> </xs:key> <xs:key name="identityConstraint"> <xs:selector xpath=".//xs:key|.//xs:unique|.//xs:keyref"/> <xs:field xpath="@name"/> </xs:key> </xs:element> <xs:simpleType name="allNNI"> <xs:annotation><xs:documentation> for maxOccurs</xs:documentation></xs:annotation> <xs:union memberTypes="xs:nonNegativeInteger"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="unbounded"/> </xs:restriction> </xs:simpleType> </xs:union> </xs:simpleType> <xs:attributeGroup name="occurs"> <xs:annotation><xs:documentation> pour toutes les particules</xs:documentation></xs:annotation> <xs:attribute name="minOccurs" type="xs:nonNegativeInteger" use="optional" default="1"/> <xs:attribute name="maxOccurs" type="xs:allNNI" use="optional" default="1"/> </xs:attributeGroup> <xs:attributeGroup name="defRef"> <xs:annotation><xs:documentation> pour un élément, un groupe et un groupe attribut, qui, tous les deux, définissent et référencent</xs:documentation></xs:annotation> <xs:attribute name="name" type="xs:NCName"/> <xs:attribute name="ref" type="xs:QName"/> </xs:attributeGroup> <xs:group name="typeDefParticle"> <xs:annotation> <xs:documentation> 'complexType' utilise ceci</xs:documentation></xs:annotation> <xs:choice> <xs:element name="group" type="xs:groupRef"/> <xs:element ref="xs:all"/> <xs:element ref="xs:choice"/> <xs:element ref="xs:sequence"/> </xs:choice> </xs:group> <xs:group name="nestedParticle"> <xs:choice> <xs:element name="element" type="xs:localElement"/> <xs:element name="group" type="xs:groupRef"/> <xs:element ref="xs:choice"/> <xs:element ref="xs:sequence"/> <xs:element ref="xs:any"/> </xs:choice> </xs:group> <xs:group name="particle"> <xs:choice> <xs:element name="element" type="xs:localElement"/> <xs:element name="group" type="xs:groupRef"/> <xs:element ref="xs:all"/> <xs:element ref="xs:choice"/> <xs:element ref="xs:sequence"/> <xs:element ref="xs:any"/> </xs:choice> </xs:group> <xs:complexType name="attribute"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:sequence> <xs:element name="simpleType" minOccurs="0" type="xs:localSimpleType"/> </xs:sequence> <xs:attributeGroup ref="xs:defRef"/> <xs:attribute name="type" type="xs:QName"/> <xs:attribute name="use" use="optional" default="optional"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="prohibited"/> <xs:enumeration value="optional"/> <xs:enumeration value="required"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="default" type="xs:string"/> <xs:attribute name="fixed" type="xs:string"/> <xs:attribute name="form" type="xs:formChoice"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="topLevelAttribute"> <xs:complexContent> <xs:restriction base="xs:attribute"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:element name="simpleType" minOccurs="0" type="xs:localSimpleType"/> </xs:sequence> <xs:attribute name="ref" use="prohibited"/> <xs:attribute name="form" use="prohibited"/> <xs:attribute name="use" use="prohibited"/> <xs:attribute name="name" use="required" type="xs:NCName"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:group name="attrDecls"> <xs:sequence> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="attribute" type="xs:attribute"/> <xs:element name="attributeGroup" type="xs:attributeGroupRef"/> </xs:choice> <xs:element ref="xs:anyAttribute" minOccurs="0"/> </xs:sequence> </xs:group> <xs:element name="anyAttribute" type="xs:caractère générique" id="anyAttribute"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-anyAttribute"/> </xs:annotation> </xs:element> <xs:group name="complexTypeModel"> <xs:choice> <xs:element ref="xs:simpleContent"/> <xs:element ref="xs:complexContent"/> <xs:sequence> <xs:annotation> <xs:documentation> Cette branche est un raccourci pour <complexContent> <restriction base="xs:anyType"> ... </restriction> </complexContent></xs:documentation> </xs:annotation> <xs:group ref="xs:typeDefParticle" minOccurs="0"/> <xs:group ref="xs:attrDecls"/> </xs:sequence> </xs:choice> </xs:group> <xs:complexType name="complexType" abstract="true"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:group ref="xs:complexTypeModel"/> <xs:attribute name="name" type="xs:NCName"> <xs:annotation> <xs:documentation> Sera restreinte à required ou forbidden</xs:documentation> </xs:annotation> </xs:attribute> <xs:attribute name="mixte" type="xs:booléen" use="optional" default="faux"> <xs:annotation> <xs:documentation> Interdit si l'enfant simpleContent est choisi. Peut être écrasée en mettant un enfant de type complexContent.</xs:documentation> </xs:annotation> </xs:attribute> <xs:attribute name="abstract" type="xs:booléen" use="optional" default="faux"/> <xs:attribute name="final" type="xs:derivationSet"/> <xs:attribute name="block" type="xs:derivationSet"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="topLevelComplexType"> <xs:complexContent> <xs:restriction base="xs:complexType"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:complexTypeModel"/> </xs:sequence> <xs:attribute name="name" type="xs:NCName" use="required"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="localComplexType"> <xs:complexContent> <xs:restriction base="xs:complexType"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:complexTypeModel"/> </xs:sequence> <xs:attribute name="name" use="prohibited"/> <xs:attribute name="abstract" use="prohibited"/> <xs:attribute name="final" use="prohibited"/> <xs:attribute name="block" use="prohibited"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="restrictionType"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:sequence> <xs:choice> <xs:group ref="xs:typeDefParticle" minOccurs="0"/> <xs:group ref="xs:simpleRestrictionModel" minOccurs="0"/> </xs:choice> <xs:group ref="xs:attrDecls"/> </xs:sequence> <xs:attribute name="base" type="xs:QName" use="required"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="complexRestrictionType"> <xs:complexContent> <xs:restriction base="xs:restrictionType"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:typeDefParticle" minOccurs="0"/> <xs:group ref="xs:attrDecls"/> </xs:sequence> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="extensionType"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:sequence> <xs:group ref="xs:typeDefParticle" minOccurs="0"/> <xs:group ref="xs:attrDecls"/> </xs:sequence> <xs:attribute name="base" type="xs:QName" use="required"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:element name="complexContent" id="complexContent"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-complexContent"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:choice> <xs:element name="restriction" type="xs:complexRestrictionType"/> <xs:element name="extension" type="xs:extensionType"/> </xs:choice> <xs:attribute name="mixte" type="xs:booléen"> <xs:annotation> <xs:documentation> Ecrase toute initialisation faite sur un parent de type complexe.</xs:documentation> </xs:annotation> </xs:attribute> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:complexType name="simpleRestrictionType"> <xs:complexContent> <xs:restriction base="xs:restrictionType"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:simpleRestrictionModel" minOccurs="0"/> <xs:group ref="xs:attrDecls"/> </xs:sequence> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="simpleExtensionType"> <xs:complexContent> <xs:restriction base="xs:extensionType"> <xs:sequence> <xs:annotation> <xs:documentation> Pas de référence au groupe typeDefParticle</xs:documentation> </xs:annotation> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:attrDecls"/> </xs:sequence> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:element name="simpleContent" id="simpleContent"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-simpleContent"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:choice> <xs:element name="restriction" type="xs:simpleRestrictionType"/> <xs:element name="extension" type="xs:simpleExtensionType"/> </xs:choice> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="complexType" type="xs:topLevelComplexType" id="complexType"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-complexType"/> </xs:annotation> </xs:element> <xs:simpleType name="blockSet"> <xs:annotation> <xs:documentation> Un type utilitaire reservé à un usage interne</xs:documentation> <xs:documentation> #all ou un sous-ensemble (pouvant être vide) de {substitution, extension, restriction}</xs:documentation> </xs:annotation> <xs:union> <xs:simpleType> <xs:restriction base="xs:token"> <xs:enumeration value="#all"/> </xs:restriction> </xs:simpleType> <xs:simpleType> <xs:list> <xs:simpleType> <xs:restriction base="xs:derivationControl"> <xs:enumeration value="extension"/> <xs:enumeration value="restriction"/> <xs:enumeration value="substitution"/> </xs:restriction> </xs:simpleType> </xs:list> </xs:simpleType> </xs:union> </xs:simpleType> <xs:complexType name="element" abstract="true"> <xs:annotation> <xs:documentation> L'élément element peut être utilisé soit au niveau supérieur pour définir une relation globale à un élément type, soit à l'intérieur d'un modèle de contenu pour référencer soit un élément soit un type défini globalement ou déclarer localement une relation à un éément type. La forme ref est interdite au niveau supérieur.</xs:documentation> </xs:annotation> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:sequence> <xs:choice minOccurs="0"> <xs:element name="simpleType" type="xs:localSimpleType"/> <xs:element name="complexType" type="xs:localComplexType"/> </xs:choice> <xs:group ref="xs:identityConstraint" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attributeGroup ref="xs:defRef"/> <xs:attribute name="type" type="xs:QName"/> <xs:attribute name="substitutionGroup" type="xs:QName"/> <xs:attributeGroup ref="xs:occurs"/> <xs:attribute name="default" type="xs:string"/> <xs:attribute name="fixed" type="xs:string"/> <xs:attribute name="nillable" type="xs:booléen" use="optional" default="faux"/> <xs:attribute name="abstract" type="xs:booléen" use="optional" default="faux"/> <xs:attribute name="final" type="xs:de dérivation"/> <xs:attribute name="block" type="xs:blockSet"/> <xs:attribute name="form" type="xs:formChoice"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="topLevelElement"> <xs:complexContent> <xs:restriction base="xs:element"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:choice minOccurs="0"> <xs:element name="simpleType" type="xs:localSimpleType"/> <xs:element name="complexType" type="xs:localComplexType"/> </xs:choice> <xs:group ref="xs:identityConstraint" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="ref" use="prohibited"/> <xs:attribute name="form" use="prohibited"/> <xs:attribute name="minOccurs" use="prohibited"/> <xs:attribute name="maxOccurs" use="prohibited"/> <xs:attribute name="name" use="required" type="xs:NCName"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="localElement"> <xs:complexContent> <xs:restriction base="xs:element"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:choice minOccurs="0"> <xs:element name="simpleType" type="xs:localSimpleType"/> <xs:element name="complexType" type="xs:localComplexType"/> </xs:choice> <xs:group ref="xs:identityConstraint" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="substitutionGroup" use="prohibited"/> <xs:attribute name="final" use="prohibited"/> <xs:attribute name="abstract" use="prohibited"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:element name="element" type="xs:topLevelElement" id="element"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-element"/> </xs:annotation> </xs:element> <xs:complexType name="group" abstract="true"> <xs:annotation> <xs:documentation> type de groupe pour les groupes explicite, les groupes nommés de niveau supérieur et les références de groupes</xs:documentation> </xs:annotation> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:group ref="xs:particle" minOccurs="0" maxOccurs="unbounded"/> <xs:attributeGroup ref="xs:defRef"/> <xs:attributeGroup ref="xs:occurs"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="realGroup"> <xs:complexContent> <xs:restriction base="xs:group"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:choice minOccurs="0" maxOccurs="1"> <xs:element ref="xs:all"/> <xs:element ref="xs:choice"/> <xs:element ref="xs:sequence"/> </xs:choice> </xs:sequence> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="namedGroup"> <xs:annotation> <xs:documentation> Ceci devrait être une dérivation de realGroup, mais c'est trop compliqué pour le moment</xs:documentation> </xs:annotation> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:choice minOccurs="1" maxOccurs="1"> <xs:element name="all"> <xs:complexType> <xs:complexContent> <xs:restriction base="xs:all"> <xs:group ref="xs:allModel"/> <xs:attribute name="minOccurs" use="prohibited"/> <xs:attribute name="maxOccurs" use="prohibited"/> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="choice" type="xs:simpleExplicitGroup"/> <xs:element name="sequence" type="xs:simpleExplicitGroup"/> </xs:choice> </xs:sequence> <xs:attribute name="name" use="required" type="xs:NCName"/> <xs:attribute name="ref" use="prohibited"/> <xs:attribute name="minOccurs" use="prohibited"/> <xs:attribute name="maxOccurs" use="prohibited"/> </xs:complexType> <xs:complexType name="groupRef"> <xs:complexContent> <xs:restriction base="xs:realGroup"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> </xs:sequence> <xs:attribute name="ref" use="required" type="xs:QName"/> <xs:attribute name="name" use="prohibited"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="explicitGroup"> <xs:annotation> <xs:documentation> groupe type pour les trois sortes de groupes</xs:documentation> </xs:annotation> <xs:complexContent> <xs:restriction base="xs:group"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:nestedParticle" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="name" type="xs:NCName" use="prohibited"/> <xs:attribute name="ref" type="xs:QName" use="prohibited"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="simpleExplicitGroup"> <xs:complexContent> <xs:restriction base="xs:explicitGroup"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:nestedParticle" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="minOccurs" use="prohibited"/> <xs:attribute name="maxOccurs" use="prohibited"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:group name="allModel"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:element name="element" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:annotation> <xs:documentation>valeurs restreintes des particules max/min</xs:documentation> </xs:annotation> <xs:complexContent> <xs:restriction base="xs:localElement"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:choice minOccurs="0"> <xs:element name="simpleType" type="xs:localSimpleType"/> <xs:element name="complexType" type="xs:localComplexType"/> </xs:choice> <xs:group ref="xs:identityConstraint" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="minOccurs" use="optional" default="1"> <xs:simpleType> <xs:restriction base="xs:nonNegativeInteger"> <xs:enumeration value="0"/> <xs:enumeration value="1"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="maxOccurs" use="optional" default="1"> <xs:simpleType> <xs:restriction base="xs:allNNI"> <xs:enumeration value="0"/> <xs:enumeration value="1"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:element> </xs:sequence> </xs:group> <xs:complexType name="all"> <xs:annotation> <xs:documentation> Seuls des éléments sont autorisés à l'intérieur</xs:documentation> </xs:annotation> <xs:complexContent> <xs:restriction base="xs:explicitGroup"> <xs:group ref="xs:allModel"/> <xs:attribute name="minOccurs" use="optional" default="1"> <xs:simpleType> <xs:restriction base="xs:nonNegativeInteger"> <xs:enumeration value="0"/> <xs:enumeration value="1"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="maxOccurs" use="optional" default="1"> <xs:simpleType> <xs:restriction base="xs:allNNI"> <xs:enumeration value="1"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:element name="all" id="all" type="xs:all"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-all"/> </xs:annotation> </xs:element> <xs:element name="choice" type="xs:explicitGroup" id="choice"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-choice"/> </xs:annotation> </xs:element> <xs:element name="sequence" type="xs:explicitGroup" id="sequence"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-sequence"/> </xs:annotation> </xs:element> <xs:element name="group" type="xs:namedGroup" id="group"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-group"/> </xs:annotation> </xs:element> <xs:complexType name="wildcard"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:attribute name="namespace" type="xs:namespaceList" use="optional" default="##any"/> <xs:attribute name="processContents" use="optional" default="strict"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="skip"/> <xs:enumeration value="lax"/> <xs:enumeration value="strict"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:extension> </xs:complexContent> </xs:complexType> <xs:element name="any" id="any"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-any"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:wildcard"> <xs:attributeGroup ref="xs:occurs"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:annotation> <xs:documentation> Type simple pour la valeur de l'attribut 'namespace' de 'any' et 'anyAttribute'</xs:documentation> </xs:annotation> <xs:annotation> <xs:documentation> La valeur est ##any - - tout WFXML/attribut non-conflictuel du tout ##other - - tout WFXML/attribut non-conflictuel d'espace de nom autre que l'espace de nom cible ##local - - tout WFXML/attribut non qualifié non-conflictuel une ou - - tout WFXML/attribut non-conflictuel venant des espaces de noms listés plusieurs références URI (séparées par des blancs) ##targetNamespace ou ##local peuvent apparaître dans la liste ci-dessus, pour faire référence, respectivement, à l'espace de noms cible du schéma englobant ou à l'espace de noms cible absent</xs:documentation> </xs:annotation> <xs:simpleType name="namespaceList"> <xs:annotation> <xs:documentation> Un type utilitaire réservé à un usage interne</xs:documentation> </xs:annotation> <xs:union> <xs:simpleType> <xs:restriction base="xs:token"> <xs:enumeration value="##any"/> <xs:enumeration value="##other"/> </xs:restriction> </xs:simpleType> <xs:simpleType> <xs:list> <xs:simpleType> <xs:union memberTypes="xs:anyURI"> <xs:simpleType> <xs:restriction base="xs:token"> <xs:enumeration value="##targetNamespace"/> <xs:enumeration value="##local"/> </xs:restriction> </xs:simpleType> </xs:union> </xs:simpleType> </xs:list> </xs:simpleType> </xs:union> </xs:simpleType> <xs:element name="attribute" type="xs:topLevelAttribute" id="attribute"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-attribute"/> </xs:annotation> </xs:element> <xs:complexType name="attributeGroup" abstract="true"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:group ref="xs:attrDecls"/> <xs:attributeGroup ref="xs:defRef"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="namedAttributeGroup"> <xs:complexContent> <xs:restriction base="xs:attributeGroup"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:attrDecls"/> </xs:sequence> <xs:attribute name="name" use="required" type="xs:NCName"/> <xs:attribute name="ref" use="prohibited"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="attributeGroupRef"> <xs:complexContent> <xs:restriction base="xs:attributeGroup"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> </xs:sequence> <xs:attribute name="ref" use="required" type="xs:QName"/> <xs:attribute name="name" use="prohibited"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:element name="attributeGroup" type="xs:namedAttributeGroup" id="attributeGroup"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-attributeGroup"/> </xs:annotation> </xs:element> <xs:element name="include" id="include"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-include"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:attribute name="schemaLocation" type="xs:anyURI" use="required"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="redefine" id="redefine"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-redefine"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:openAttrs"> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element ref="xs:annotation"/> <xs:group ref="xs:redefinable"/> </xs:choice> <xs:attribute name="schemaLocation" type="xs:anyURI" use="required"/> <xs:attribute name="id" type="xs:ID"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="import" id="import"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-import"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:attribute name="namespace" type="xs:anyURI"/> <xs:attribute name="schemaLocation" type="xs:anyURI"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="selector" id="selector"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-selector"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:attribute name="xpath" use="required"> <xs:simpleType> <xs:annotation> <xs:documentation>Un sous-ensemble des expressions XPath pour une utilisation dans les sélecteurs</xs:documentation> <xs:documentation> Un type utilitaire réservé à un usage interne </xs:documentation> </xs:annotation> <xs:restriction base="xs:token"> <xs:annotation> <xs:documentation>Le motif suivant à comme objectif de permettre l'usage d'expressions XPath conformes aux règles de production suivantes : Selector ::= Path ( '|' Path )* Path ::= ('.//')? Step ( '/' Step )* Step ::= '.' | NameTest NameTest ::= QName | '*' | NCName ':' '*' child:: est aussi autorisé </xs:documentation> </xs:annotation> <xs:pattern value="(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*(\|(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*)*"> </xs:pattern> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="field" id="field"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-field"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:attribute name="xpath" use="required"> <xs:simpleType> <xs:annotation> <xs:documentation> Un sous-ensemble des expressions XPath pour un usage dans des champs </xs:documentation> <xs:documentation> Un type utilitaire réservé à un usage interne </xs:documentation> </xs:annotation> <xs:restriction base="xs:token"> <xs:annotation> <xs:documentation>Le motif suivant à comme objectif de permettre l'usage d'expressions XPath conformes aux règles de production suivantes, comme pour les formules de sélection, à la modification suivante près : Path ::= ('.//')? ( Step '/' )* ( Step | '@' NameTest ) </xs:documentation> </xs:annotation> <xs:pattern value="(\.//)?((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)/)*((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)|((attribute::|@)((\i\c*:)?(\i\c*|\*))))(\|(\.//)?((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)/)*((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)|((attribute::|@)((\i\c*:)?(\i\c*|\*)))))*"> </xs:pattern> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:complexType name="keybase"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:sequence> <xs:element ref="xs:selector"/> <xs:element ref="xs:field" minOccurs="1" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="name" type="xs:NCName" use="required"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:group name="identityConstraint"> <xs:annotation> <xs:documentation>Les trois sortes de contraintes d'identité, toutes ayant soit le même type que 'keybase' soit en étant dérivées. </xs:documentation> </xs:annotation> <xs:choice> <xs:element ref="xs:unique"/> <xs:element ref="xs:key"/> <xs:element ref="xs:keyref"/> </xs:choice> </xs:group> <xs:element name="unique" type="xs:keybase" id="unique"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-unique"/> </xs:annotation> </xs:element> <xs:element name="key" type="xs:keybase" id="key"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-key"/> </xs:annotation> </xs:element> <xs:element name="keyref" id="keyref"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-keyref"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:keybase"> <xs:attribute name="refer" type="xs:QName" use="required"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="notation" id="notation"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-notation"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:attribute name="name" type="xs:NCName" use="required"/> <xs:attribute name="public" type="xs:public" use="required"/> <xs:attribute name="system" type="xs:anyURI"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:simpleType name="public"> <xs:annotation> <xs:documentation> Un type utilitaire réservé à un usage interne </xs:documentation> <xs:documentation> Un identifiant publique, comme pour l'ISO 8879</xs:documentation> </xs:annotation> <xs:restriction base="xs:token"/> </xs:simpleType> <xs:element name="appinfo" id="appinfo"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-appinfo"/> </xs:annotation> <xs:complexType mixte="true"> <xs:sequence minOccurs="0" maxOccurs="unbounded"> <xs:any processContents="lax"/> </xs:sequence> <xs:attribute name="source" type="xs:anyURI"/> </xs:complexType> </xs:element> <xs:element name="documentation" id="documentation"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-documentation"/> </xs:annotation> <xs:complexType mixte="true"> <xs:sequence minOccurs="0" maxOccurs="unbounded"> <xs:any processContents="lax"/> </xs:sequence> <xs:attribute name="source" type="xs:anyURI"/> <xs:attribute ref="xml:lang"/> </xs:complexType> </xs:element> <xs:element name="annotation" id="annotation"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-annotation"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:openAttrs"> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element ref="xs:appinfo"/> <xs:element ref="xs:documentation"/> </xs:choice> <xs:attribute name="id" type="xs:ID"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:annotation> <xs:documentation> notations pour usage à l'intérieur des schémas de XML Schema</xs:documentation> </xs:annotation> <xs:notation name="XMLSchemaStructures" public="structures" system="http://www.w3.org/2000/08/XMLSchema.xsd"/> <xs:notation name="XML" public="REC-xml-19980210" system="http://www.w3.org/TR/1998/REC-xml-19980210"/> <xs:complexType name="anyType" mixte="true"> <xs:annotation> <xs:documentation> Ce n'est pas le véritable type ur, mis une approximation aussi proche que nous pouvons obtenir avec une représentation XML</xs:documentation> </xs:annotation> <xs:sequence> <xs:any minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:anyAttribute/> </xs:complexType> </xs:schema>
Remarque : Et cela et la fin du schéma pour XML Schema tome 1 : Structures.
Pour faciliter la production de rapports d'erreurs homogènes et des échecs
de ·validation·, ce chapitre
présente sous forme de tables et fournit des noms uniques pour toutes les
contraintes présentées dans ce document. Chaque fois que ces contraintes ont
des constitutants numérotés, les rapports doivent utiliser le nom donné
ci-dessous en plus du numéro du constitutant, les deux séparés par un point
('.'). Par exemple cos-ct-extends.1.2
doit être utilisé pour
reporter une violation de la clause 1.2 du chapitre Dérivation valide (extension) (§3.4.6).
ID
/IDREF
)ID
/IDREF
] (tableau
d'ID
/IDREF
) ID
/IDREF
) ID
/IDREF
) MemberType
ou enfants simpleType
All
limitéall
" et "sequence
")NOTATION
fractionDigits
inférieur à ou égale à totalDigits
totalDigit
Cette spécification impose, comme condition préalable à ·l'évaluation·, un ensemble d'information tel que défini dans [XML-Infoset] supportant au moins les unités d'information et propriétés suivantes :
Cette spécification ne provoque aucune altération destructive de l'ensemble d'information mis en entrée : toutes les contributions à l'ensemble d'information spécifiées dans ce document lui sont additives.
L'objectif de cette annexe est de satisfaire aux exigences de Conformité à la spécification [XML-Infoset].
Le glossaire qui suit doit profiter aux lecteurs de la version imprimée de ce document : il rassemble toutes les définitions qui apparaissent dans le texte ci-dessus.
La DTD qui correspond à ce document XML Schema tome 1 : Structures
est fournie ci-dessous. Remarquez d'ores et déjà qu'elle n'impose absolument
pas que l'élément schema
soit la racine d'une instance de cette
DTD.
Bien que cette DTD ne soit pas normative, tout document XML qui valide par
rapport à cette DTD (tout en considérant les redéfinitions qui y sont faites
des entités paramètres 'p
' et 's
' appropriées à sa
déclaration d'espace de noms de l'espace de nom des schémas XML) a de fortes
chances d'être également valide vis à vis de XML Schema (sauf cas des
documents multipliant les noms d'espaces de noms). En conséquence, écrire
des documents contenant des schémas XML avec cette DTD, de les éditer avec
des éditeurs structurés pour XML 1.0 (éditeurs à base de DTD), de leur
attribuer le DOCTYPE des documents dont l'objet est d'être des schémas XML et
de les valider ensuite par rapport à un analyseur lexico-syntaxique XML, est
une démarche de développement raisonnable que l'on encourage les auteurs de
suivre en attendant que les éditeurs natifs XML soient plus répandus.
<!-- DTD for XML Schemas: Part 1: Structures Public Identifier: "-//W3C//DTD XMLSCHEMA 200102//EN" Official Location: http://www.w3.org/2001/XMLSchema.dtd --> <!-- Id: XMLSchema.dtd,v 1.30 2001/03/16 15:23:02 ht Exp --> <!-- A l'exception des cas ayant plusieurs espaces de noms en préfixe pour l'espace de noms du schéma XML, tout document XML qui ne serait pas valide par rapport à cette DTD (tenant compte des redéfinitions des entités paramètres 'p' et 's' nécessaires à sa déclaration d'espace de noms de XMl Schema) aurait de fortes chances de ne pas être un schéma valide. --> <!-- L'élément simpleType et ses parties constituantes sont définies dans XML Schema tome 2: Types de données --> <!ENTITY % xs-datatypes PUBLIC 'datatypes' 'datatypes.dtd' > <!ENTITY % p 'xs:'> <!-- peut être réécrit dans le sous-ensemble interne d'un document de type schéma pour établir un nouveau préfixe d'espace de noms --> <!ENTITY % s ':xs'> <!-- si l'entité paramètre %p est définie (comme par exemple as foo:) alors vous devez aussi définir l'entité paramètre %s comme étant le suffixe pour la déclaration d'espace de noms (par exemple :foo) --> <!ENTITY % nds 'xmlns%s;'> <!-- Définit tous les noms d'éléments, avec préfixe optionnel --> <!ENTITY % schema "%p;schema"> <!ENTITY % complexType "%p;complexType"> <!ENTITY % complexContent "%p;complexContent"> <!ENTITY % simpleContent "%p;simpleContent"> <!ENTITY % extension "%p;extension"> <!ENTITY % element "%p;element"> <!ENTITY % unique "%p;unique"> <!ENTITY % key "%p;key"> <!ENTITY % keyref "%p;keyref"> <!ENTITY % selector "%p;selector"> <!ENTITY % field "%p;field"> <!ENTITY % group "%p;group"> <!ENTITY % all "%p;all"> <!ENTITY % choice "%p;choice"> <!ENTITY % sequence "%p;sequence"> <!ENTITY % any "%p;any"> <!ENTITY % anyAttribute "%p;anyAttribute"> <!ENTITY % attribute "%p;attribute"> <!ENTITY % attributeGroup "%p;attributeGroup"> <!ENTITY % include "%p;include"> <!ENTITY % import "%p;import"> <!ENTITY % redefine "%p;redefine"> <!ENTITY % notation "%p;notation"> <!-- annotation elements --> <!ENTITY % annotation "%p;annotation"> <!ENTITY % appinfo "%p;appinfo"> <!ENTITY % documentation "%p;documentation"> <!-- La personnalisation des entités pour la déclaration de liste d'attribut de chaque type d'élément. Définit l'un de ceux-ci one si votre schéma tire profit de la possibilité anyAttribute='##other' du schéma des schémas --> <!ENTITY % schemaAttrs ''> <!ENTITY % complexTypeAttrs ''> <!ENTITY % complexContentAttrs ''> <!ENTITY % simpleContentAttrs ''> <!ENTITY % extensionAttrs ''> <!ENTITY % elementAttrs ''> <!ENTITY % groupAttrs ''> <!ENTITY % allAttrs ''> <!ENTITY % choiceAttrs ''> <!ENTITY % sequenceAttrs ''> <!ENTITY % anyAttrs ''> <!ENTITY % anyAttributeAttrs ''> <!ENTITY % attributeAttrs ''> <!ENTITY % attributeGroupAttrs ''> <!ENTITY % uniqueAttrs ''> <!ENTITY % keyAttrs ''> <!ENTITY % keyrefAttrs ''> <!ENTITY % selectorAttrs ''> <!ENTITY % fieldAttrs ''> <!ENTITY % includeAttrs ''> <!ENTITY % importAttrs ''> <!ENTITY % redefineAttrs ''> <!ENTITY % notationAttrs ''> <!ENTITY % annotationAttrs ''> <!ENTITY % appinfoAttrs ''> <!ENTITY % documentationAttrs ''> <!ENTITY % complexDerivationSet "CDATA"> <!-- #all ou une liste d'éléments séparés par des blancs issues de dérivation Choice --> <!ENTITY % blockSet "CDATA"> <!-- #all ou une liste d'éléments séparés par des blancs issues de dérivation Choice + 'substitution' --> <!ENTITY % mgs '%all; | %choice; | %sequence;'> <!ENTITY % cs '%choice; | %sequence;'> <!ENTITY % formValues '(qualified|unqualified)'> <!ENTITY % attrDecls '((%attribute;| %attributeGroup;)*,(%anyAttribute;)?)'> <!ENTITY % particleAndAttrs '((%mgs; | %group;)?, %attrDecls;)'> <!-- Ceci est utilisé dans le tome 2 --> <!ENTITY % restriction1 '((%mgs; | %group;)?)'> %xs-datatypes; <!-- La recopie ci-après est faite pour produire un modèle de contenu non-ambigüe qui permet d'avoir des annotations n'importe où --> <!ELEMENT %schema; ((%include; | %import; | %redefine; | %annotation;)*, ((%simpleType; | %complexType; | %element; | %attribute; | %attributeGroup; | %group; | %notation; ), (%annotation;)*)* )> <!ATTLIST %schema; targetNamespace %URIref; #IMPLIED version CDATA #IMPLIED %nds; %URIref; #FIXED 'http://www.w3.org/2001/XMLSchema' xmlns CDATA #IMPLIED finalDefault %complexDerivationSet; '' blockDefault %blockSet; '' id ID #IMPLIED elementFormDefault %formValues; 'unqualified' attributeFormDefault %formValues; 'unqualified' xml:lang CDATA #IMPLIED %schemaAttrs;> <!-- Remarquez que la déclaration xmlns n'est PAS dans le schéma des schémas, parce que au niveau de l'ensemble d'information où le schéma agit, xmlns(:prefix) n'est PAS un attribut! --> <!-- La déclaration de xmlns est pratique pour les auteurs de schémas --> <!-- L'attribut id ici et dessous doit être utilisé dans des références externes à partir de données différentes de celles de type schéma utilisant de simples identifiants de fragments. Ce n'est PAS utilisé pour faire des références de schéma à schéma, que ce soit interne ou externe. --> <!-- un type est une spécification de contenu nommée qui permet d'avoir des déclarations d'attributs--> <!-- --> <!ELEMENT %complexType; ((%annotation;)?, (%simpleContent;|%complexContent;| %particleAndAttrs;))> <!ATTLIST %complexType; name %NCName; #IMPLIED id ID #IMPLIED abstract %booléen; #IMPLIED final %complexDerivationSet; #IMPLIED block %complexDerivationSet; #IMPLIED mixte (vrai|faux) 'faux' %complexTypeAttrs;> <!-- le mot particleAndAttrs est un raccourci pour un type racine --> <!-- le modèle mixte est interdit dans le cas du contenu simple, surchargé si le contenu complexe en a un également. --> <!-- Si anyAttribute apparaît dans un ou plusieurs attributeGroups référencés et/ou explicites, l'intersection des permissions est utilisée--> <!ELEMENT %complexContent; (%restriction;|%extension;)> <!ATTLIST %complexContent; mixte (vrai|faux) #IMPLIED id ID #IMPLIED %complexContentAttrs;> <!-- la restriction devrait utiliser la brache définie ci-dessus, pas celle qui est simple de part2; l'extension devrait utiliser la totalité du modèle --> <!ELEMENT %simpleContent; (%restriction;|%extension;)> <!ATTLIST %simpleContent; id ID #IMPLIED %simpleContentAttrs;> <!-- la restriction devrait utiliser la branche simple de part2, pas celle définit ci-dessus ; l'extension devrait avoir aucune particule --> <!ELEMENT %extension; (%particleAndAttrs;)> <!ATTLIST %extension; base %QName; #REQUIRED id ID #IMPLIED %extensionAttrs;> <!-- un élément est déclaré soit : par un nom et un type (soit emboîté soit référencé via l'attribut type) soit par une référence à une déclaration d'élément existante --> <!ELEMENT %element; ((%annotation;)?, (%complexType;| %simpleType;)?, (%unique; | %key; | %keyref;)*)> <!-- simpleType ou complexType seulement si il n'y a aucun attirbut type|ref --> <!-- ref est interdit au niveau supérieur --> <!ATTLIST %element; name %NCName; #IMPLIED id ID #IMPLIED ref %QName; #IMPLIED type %QName; #IMPLIED minOccurs %nonNegativeInteger; #IMPLIED maxOccurs CDATA #IMPLIED nillable %booléen; #IMPLIED substitutionGroup %QName; #IMPLIED abstract %booléen; #IMPLIED final %complexDerivationSet; #IMPLIED block %blockSet; #IMPLIED default CDATA #IMPLIED fixed CDATA #IMPLIED form %formValues; #IMPLIED %elementAttrs;> <!-- type et ref sont mutuellement exclusifs. name et ref sont mutuellement exclusifs, l'un d'eux est requis --> <!-- En l'absence du type AND les attributs ref et type ont comme valeur par défaut le type du groupe de substitution, si il existe, sinon le type ur, c'est à dire sans aucune contrainte --> <!-- les caractéristiques default et fixed sont mutuellement exclusives --> <!ELEMENT %group; ((%annotation;)?,(%mgs;)?)> <!ATTLIST %group; name %NCName; #IMPLIED ref %QName; #IMPLIED minOccurs %nonNegativeInteger; #IMPLIED maxOccurs CDATA #IMPLIED id ID #IMPLIED %groupAttrs;> <!ELEMENT %all; ((%annotation;)?, (%element;)*)> <!ATTLIST %all; minOccurs (1) #IMPLIED maxOccurs (1) #IMPLIED id ID #IMPLIED %allAttrs;> <!ELEMENT %choice; ((%annotation;)?, (%element;| %group;| %cs; | %any;)*)> <!ATTLIST %choice; minOccurs %nonNegativeInteger; #IMPLIED maxOccurs CDATA #IMPLIED id ID #IMPLIED %choiceAttrs;> <!ELEMENT %sequence; ((%annotation;)?, (%element;| %group;| %cs; | %any;)*)> <!ATTLIST %sequence; minOccurs %nonNegativeInteger; #IMPLIED maxOccurs CDATA #IMPLIED id ID #IMPLIED %sequenceAttrs;> <!-- un groupement anonyme d'un modèle ou une définition supérieure de groupe nommé ou une référence à l'une de ces entités --> <!-- Remarquez que si order est 'all', le groupe est interdit à l'intérieur. Si order est 'all' CE groupe doit être seul (ou seul référencé) au niveau supérieur d'un modèle de contenu --> <!-- Si order est 'all', on a minOccurs==maxOccurs==1 sur l'élément ou any qui se trouve à l'intérieur --> <!-- Devrait autoriser minOccurs=0 à l'intérieur de order='all' . . . --> <!ELEMENT %any; (%annotation;)?> <!ATTLIST %any; namespace CDATA '##any' processContents (skip|lax|strict) 'strict' minOccurs %nonNegativeInteger; '1' maxOccurs CDATA '1' id ID #IMPLIED %anyAttrs;> <!-- l'espace de noms est interprété comme suit : ##any - - tout WFXML non-conflictuel du tout ##other - - tout WFXML non-conflictuel de l'espace de nosm autre que targetNamespace ##local - - tout WFXML/attribut non-conflictuel non-qualifié un ou - - tout WFXML non-conflictuel des plusieurs espaces de noms listés références d'URIs ##targetNamespace ##local peuvent apparaître dans la liste ci-dessus, avec une signification évidente --> <!ELEMENT %anyAttribute; (%annotation;)?> <!ATTLIST %anyAttribute; namespace CDATA '##any' processContents (skip|lax|strict) 'strict' id ID #IMPLIED %anyAttributeAttrs;> <!-- namespace est interprété comme pour 'any' ci-dessus --> <!-- simpleType seulement si il n'y a pas d'attribut type|ref --> <!-- ref est interdit auniveau supérieur, name iff au niveau supérieur --> <!ELEMENT %attribute; ((%annotation;)?, (%simpleType;)?)> <!ATTLIST %attribute; name %NCName; #IMPLIED id ID #IMPLIED ref %QName; #IMPLIED type %QName; #IMPLIED use (prohibited|optional|required) #IMPLIED default CDATA #IMPLIED fixed CDATA #IMPLIED form %formValues; #IMPLIED %attributeAttrs;> <!-- type et ref sont mutuellement exclusifs. name et ref sont mutuellement exclusifs, un est éxigé --> <!-- le mode par défaut pour l'attribut use est optional quand imbriqué, rien sinon --> <!-- default et fixed sont mutuellement exclusifs --> <!-- le type attr et le contenu simpleType sont mutuellement exclusifs --> <!-- un attributeGroup est une collection nomée de déclarations d'attributs, ou une référence à une telle collection --> <!ELEMENT %attributeGroup; ((%annotation;)?, (%attribute; | %attributeGroup;)*, (%anyAttribute;)?) > <!ATTLIST %attributeGroup; name %NCName; #IMPLIED id ID #IMPLIED ref %QName; #IMPLIED %attributeGroupAttrs;> <!-- ref iff no content, no name. ref iff not top level --> <!-- mécanismes pour de meilleures références--> <!ELEMENT %unique; ((%annotation;)?, %selector;, (%field;)+)> <!ATTLIST %unique; name %NCName; #REQUIRED id ID #IMPLIED %uniqueAttrs;> <!ELEMENT %key; ((%annotation;)?, %selector;, (%field;)+)> <!ATTLIST %key; name %NCName; #REQUIRED id ID #IMPLIED %keyAttrs;> <!ELEMENT %keyref; ((%annotation;)?, %selector;, (%field;)+)> <!ATTLIST %keyref; name %NCName; #REQUIRED refer %QName; #REQUIRED id ID #IMPLIED %keyrefAttrs;> <!ELEMENT %selector; ((%annotation;)?)> <!ATTLIST %selector; xpath %XPathExpr; #REQUIRED id ID #IMPLIED %selectorAttrs;> <!ELEMENT %field; ((%annotation;)?)> <!ATTLIST %field; xpath %XPathExpr; #REQUIRED id ID #IMPLIED %fieldAttrs;> <!-- mécanismes de combinaison de schémas --> <!ELEMENT %include; (%annotation;)?> <!ATTLIST %include; schemaLocation %URIref; #REQUIRED id ID #IMPLIED %includeAttrs;> <!ELEMENT %import; (%annotation;)?> <!ATTLIST %import; namespace %URIref; #IMPLIED schemaLocation %URIref; #IMPLIED id ID #IMPLIED %importAttrs;> <!ELEMENT %redefine; (%annotation; | %simpleType; | %complexType; | %attributeGroup; | %group;)*> <!ATTLIST %redefine; schemaLocation %URIref; #REQUIRED id ID #IMPLIED %redefineAttrs;> <!ELEMENT %notation; (%annotation;)?> <!ATTLIST %notation; name %NCName; #REQUIRED id ID #IMPLIED public CDATA #REQUIRED system %URIref; #IMPLIED %notationAttrs;> <!-- Annotation contient soit une information pour une application ou des commentaires --> <!-- En ayant leur déclarations ici, elles sont disponibles aussi bien pour des types de données que pour toutes les structures d'éléments --> <!ELEMENT %annotation; (%appinfo; | %documentation;)*> <!ATTLIST %annotation; %annotationAttrs;> <!-- l'utilisateur doit définir des éléments annotation dans le sous-ensemble interne pour que ça marche --> <!ELEMENT %appinfo; ANY> <!-- trop rstrictif --> <!ATTLIST %appinfo; source %URIref; #IMPLIED id ID #IMPLIED %appinfoAttrs;> <!ELEMENT %documentation; ANY> <!-- trop restrictif --> <!ATTLIST %documentation; source %URIref; #IMPLIED id ID #IMPLIED xml:lang CDATA #IMPLIED %documentationAttrs;> <!NOTATION XMLSchemaStructures PUBLIC 'structures' 'http://www.w3.org/2001/XMLSchema.xsd' > <!NOTATION XML PUBLIC 'REC-xml-1998-0210' 'http://www.w3.org/TR/1998/REC-xml-19980210' >
Une spécification de l'import, l'attribution de particule unique (§3.8.6), qui ne ferait pas appel à un modèle de traitement serait difficile. La prétention de ce qui suit est uniquement de servir de guide, pas de prétendre être complet.
[Définition :] Deux particules qui ne sont pas des groupes se chevauchent si
ou
ou
ou
Un modèle de contenu viole la contrainte d'attribution unique quand il contient deux particules qui se ·chevauchent· et qui vérifient l'une des deux conditions suivantes :
ou
Deux particules peuvent ·valider· des unités d'information adjacentes si des écarts infimes les séparent pendant la transformation mécanique la plus directe d'un modèle de contenu.
Une formulation précise de cette contrainte peut aussi être exprimée en
termes de suite d'opérations de transformation appliquées de manière
mécanique dont les grandes lignes consistent à transcrire le modèle de
contenu, mécaniquement et comme cela se fait habituellement, en utilisant des
transitions infinitésimales pour les valeurs optionnelles et non-limitées de
maxOccurs
, dérouler les autres séries d'occurrences numériques
et traiter les têtes des groupes de substitution comme si il s'agissait d'une
alternative à tous les éléments du groupe, en n'utilisant pas les éléments
QNames comme étiquettes intermédiaires mais plutôt des paires composées des
éléments QNames et des positions dans le modèle. Déterminer cette mécanique,
considérer comme étant opaques les valeurs intermédiaires des caractères
génériques. Ensuite, vous pouvez remplacer toutes les étiquettes
intermédiaires formées des couples (QName, position) par les seuls éléments
QNames. Si, dans e résultat, on a des états avec une ou plusieurs fois la
même étiquette QName, ou un état intermédiaire étiqueté par un QName et un
caractère générique qui le subsumes, ou
deux caractères génériques dont l'intersection n'est pas vide, alors le
modèle ne satisfait pas à la contrainte d'attribution unique.
Les personnes suivantes ont concrètement participé à l'élaboration de ce document :
Les éditeurs remercient les membres du groupe de travail sur XML Schema, les membres des autres groupes de travail du W3C et les experts de l'industrie d'autres forums qui ont contribué directement ou indirectement au processus de création ou au contenu de ce document. Le groupe de travail remercie particulièrement les sociétés Lotus Development Corp. et IBM pour avoir fourni les moyens de faire les téléconférences.
Les membres actuels du groupe de travail sur XML Schema sont :
Jim Barnette, Defense Information Systems Agency (DISA); Paul V. Biron, Health Level Seven; Don Box, DevelopMentor; Allen Brown, Microsoft; Lee Buck, TIBCO Extensibility; Charles E. Campbell, Informix; Wayne Carr, Intel; Peter Chen, Bootstrap Alliance and LSU; David Cleary, Progress Software; Dan Connolly, W3C (staff contact); Ugo Corda, Xerox; Roger L. Costello, MITRE; Haavard Danielson, Progress Software; Josef Dietl, Mozquito Technologies; David Ezell, Hewlett-Packard Company; Alexander Falk, Altova GmbH; David Fallside, IBM; Dan Fox, Defense Logistics Information Service (DLIS); Matthew Fuchs, Commerce One; Andrew Goodchild, Distributed Systems Technology Centre (DSTC Pty Ltd); Paul Grosso, Arbortext, Inc; Martin Gudgin, DevelopMentor; Dave Hollander, Contivo, Inc (co-chair); Mary Holstege, Invited Expert; Jane Hunter, Distributed Systems Technology Centre (DSTC Pty Ltd); Rick Jelliffe, Academia Sinica; Simon Johnston, Rational Software; Bob Lojek, Mozquito Technologies; Ashok Malhotra, Microsoft; Lisa Martin, IBM; Noah Mendelsohn, Lotus Development Corporation; Adrian Michel, Commerce One; Alex Milowski, Invited Expert; Don Mullen, TIBCO Extensibility; Dave Peterson, Graphic Communications Association; Jonathan Robie, Software AG; Eric Sedlar, Oracle Corp.; C. M. Sperberg-McQueen, W3C (co-chair); Bob Streich, Calico Commerce; William K. Stumbo, Xerox; Henry S. Thompson, University of Edinburgh; Mark Tucker, Health Level Seven; Asir S. Vedamuthu, webMethods, Inc; Priscilla Walmsley, XMLSolutions; Norm Walsh, Sun Microsystems; Aki Yoshida, SAP AG; Kongyi Zhou, Oracle Corp.
Le groupe de travail sur XML Schema a bénéficié de la participation et des contributions d'un certain nombre de gens extérieurs au groupe de travail, et certains d'entre eux sont cités ci-dessous. Leurs noms de société d'appartenance fournis sont ceux valides a moment de leur contribution au groupe de travail.
Paula Angerstein, Vignette Corporation; David Beech, Oracle Corp.; Gabe Beged-Dov, Rogue Wave Software; Greg Bumgardner, Rogue Wave Software; Dean Burson, Lotus Development Corporation; Mike Cokus, MITRE; Andrew Eisenberg, Progress Software; Rob Ellman, Calico Commerce; George Feinberg, Object Design; Charles Frankston, Microsoft; Ernesto Guerrieri, Inso; Michael Hyman, Microsoft; Renato Iannella, Distributed Systems Technology Centre (DSTC Pty Ltd); Dianne Kennedy, Graphic Communications Association; Janet Koenig, Sun Microsystems; Setrag Khoshafian, Technology Deployment International (TDI); Ara Kullukian, Technology Deployment International (TDI); Andrew Layman, Microsoft; Dmitry Lenkov, Hewlett-Packard Company; John McCarthy, Lawrence Berkeley National Laboratory; Murata Makoto, Xerox; Eve Maler, Sun Microsystems; Murray Maloney, Muzmo Communication, agissant au nom de Commerce One; Chris Olds, Wall Data; Frank Olken, Lawrence Berkeley National Laboratory; Shriram Revankar, Xerox; Mark Reinhold, Sun Microsystems; John C. Schneider, MITRE; Lew Shannon, NCR; William Shea, Merrill Lynch; Ralph Swick, W3C; Tony Stewart, Rivcom; Matt Timmermans, Microstar; Jim Trezzo, Oracle Corp.; Steph Tryphonas, Microstar