Ceci est une traduction de la Recommandation du W3C portant sur les espaces de nommage dans XML
Cependant ce n'est pas la version officielle en français de la Recommandation. Seul le document original en anglais a valeur de norme. On peut l'obtenir à : http://www.w3.org/TR/REC-xml-names.
Des erreurs ont pu survenir malgré le soin apporté à ce travail.
Certains concepts sont difficiles à rendre en français ou peuvent nécessiter une explication,
aussi les expressions originales en anglais viennent parfois en renfort dans le texte sous cette forme :
ex. traduction [ndt. translation]
D'autre part, certains liens renvoient sur des définitions de la recommandation XML 1.0 originale. Ces liens sont doublés vers leur version française et sont signalés ainsi : vf.
Cette version française intègre toutes les corrections survenues depuis la première parution de la recommandation en 1999. L'errata de la recommandation, qui est également traduit, est ainsi à jour en date du 19 février 2004 (voir l'errata traduit). Les erreurs répertoriées sont signalées dans le document de cette manière : « errata-NE01 ».
Cette traduction est disponible sous forme d'archive compressée et, le cas échéant, dans d'autres formats à l'adresse http://www.yoyodesign.org/doc/w3c/w3c.html.
On peut consulter les traductions en français d'autres documents du W3C à
http://www.w3.org/Consortium/Translation/French
Copyright © 1994-2002 World Wide Web Consortium,
(Massachusetts Institute of Technology,
Institut National de Recherche en Informatique et en Automatique,
Keio University).
Tous droits réservés.
Consulter la notice de copyright pour les productions du W3C.
Copyright © 1999 W3C (MIT, INRIA, Keio ), tous droits réservés. Les règles de responsabilité, de marque commerciale, d'usage des documents et de licence logicielle du W3C s'appliquent.
Ce document, qui a été revu par les membres du W3C et les tiers concernés, a été approuvé par le Directeur comme recommandation du W3C. C'est un document stable qui peut être utilisé comme matériel de référence ou cité comme norme de référence par un autre document. Le rôle du W3C, en produisant cette recommandation, est de mettre en lumière la spécification et d'en promouvoir le plus large déploiement. Ceci pour améliorer la fonctionnalité et l'interopérabilité du Web.
La liste des erreurs connues dans cette spécification est disponible à http://www.w3.org/XML/xml-names-19990114-errata.
Merci de signaler les erreurs survenues dans ce document à xml-names-editor@w3.org.
Les espaces de nommage XML offrent une méthode simple pour qualifier les noms des éléments et des attributs utilisés dans des documents XML, en associant ceux-ci avec des espaces de nommage désignés par des références d'URI.
Nous envisageons des applications du Langage de Balisage Extensible (XML) où un seul document XML peut contenir des éléments et des attributs (regroupés ici sous l'intitulé « vocabulaire de balisage ») qui sont définis et utilisés par plusieurs modules logiciels. Une raison pour ceci : la modularité ; si un tel vocabulaire de balisage existe, bien compris et pour lequel des logiciels pratiques sont disponibles, il est préférable de ré-employer ce balisage plutôt que de le ré-inventer.
De tels documents, qui contiennent plusieurs vocabulaires de balisage, posent des problèmes de reconnaissance et de collision. Les modules logiciels doivent être capables de reconnaître les balises et les attributs que ceux-ci sont conçus pour traiter, même si survenaient des « collisions » quand le balisage destiné à un autre ensemble logiciel utilise les mêmes noms de type d'élément ou d'attribut.
Ces considérations entraînent que les constructions des documents devraient avoir des noms universels, dont la portée va au-delà de leur document conteneur. Cette spécification décrit un mécanisme, les espaces de nommage XML, qui réalise ceci.
[Définition :] Un espace de nommage XML est une collection de noms, identifiée par une référence d'URI [RFC2396], qui sont utilisés dans les documents XML comme types d'élément vf. et noms d'attribut vf. Les espaces de nommage XML diffèrent des « espaces de nommage » utilisés conventionnellement dans les disciplines informatiques en ce qu'ils ont une structure interne et qu'ils ne sont pas, mathématiquement parlant, des ensembles. Ces questions sont abordées au chapitre A. La structure interne des espaces de nommage XML.
[Définition :] Des références d'URI qui identifient des espaces de nommage sont considérées identiques quand elles sont semblables au caractère près. Noter que les références d'URI qui ne sont pas identiques dans ce sens peuvent en fait être fonctionnellement équivalentes. Comme exemple, les références d'URI qui diffèrent seulement par la casse ou qui se trouvent dans des entités externes ayant effectivement des URIs de base différents. « errata-NE04 » « errata-NE09 »
Les noms des espaces de nommage XML peuvent avoir la forme de noms qualifiés, qui contiennent un seul caractère deux-points séparant le nom en un préfixe d'espace de nommage et une partie locale. Le préfixe, qui correspond à une référence d'URI, détermine un espace de nommage. La combinaison de l'URI de l'espace de nommage universellement reconnu et du propre espace de nommage du document produit des identifiants universellement uniques. Des mécanismes sont fournis pour déterminer la portée du préfixe et l'espace de nommage implicite. « errata-NE10 »
Les références d'URI peuvent contenir des caractères qui ne sont pas admis dans les noms et, de ce fait, qui ne peuvent pas être employés directement dans un préfixe d'espace de nommage. Aussi, le préfixe d'espace de nommage sert de procuration pour une référence d'URI. On utilise une syntaxe, décrite plus loin, fondée sur l'attribut pour déclarer l'association du préfixe de l'espace de nommage avec une référence d'URI ; un logiciel qui reconnaît cette proposition d'espace de nommage doit reconnaître et réagir à ces déclarations et leur préfixe.
Noter que plusieurs non-terminaux des productions de cette spécification ne sont pas définis ici mais dans la spécification XML [XML]. Quand les non-terminaux définis ici ont les mêmes noms que ceux définis dans la spécification XML, les productions d'ici correspondent dans tous les cas à un sous-ensemble des chaînes trouvées par les non-terminaux correspondants de là-bas.
Dans les productions de ce document, l'expression CEN
est une « contrainte d'espace de nommage »,
une des règles que doivent suivre les documents conformes à cette spécification.
Noter que tous les noms de domaines Internet, cités dans les exemples, sauf w3.org
,
sont fortuits et ne devraient pas être considérés comme ayant une quelconque importance.
[Définition :] Un espace de nommage est déclaré
à l'aide d'une famille d'attributs réservés. Comme tel, le nom d'attribut doit être soit
xmlns
soit comporter le préfixe xmlns:
. Ces attributs, comme tous les attributs XML,
peuvent être fournis directement ou implicitement
vf..
Les noms d'attribut pour la déclaration d'espace de nommage | ||||||||||||||||||||||||||||
|
[Définition :] La
valeur
vf.
de l'attribut, une référence d'URI,
est le nom de l'espace de nommage identifiant l'espace de nommage. Ce nom d'espace de nommage, pour atteindre son
objectif, devrait avoir les caractéristiques d'unicité et de persistance. Ce n'est pas le but que celui-ci soit
directement utilisable pour le rapport d'un schéma (s'il en existe un). Un exemple de syntaxe conçu pour
cet usage est celui des Noms de Ressource Uniformes (URN)
[RFC2141]. Cependant, il faudrait remarquer qu'on peut utiliser les URLs ordinaires de façon
à atteindre les mêmes finalités.
« errata-NE12 »
[Définition :] Si le nom d'attribut correspond à l'expression
NomAttPréfixé
, alors la valeur de
NomEspCondensé
donne le préfixe de l'espace de nommage, qui est utilisé
pour associer les noms des éléments et des attributs avec le nom de l'espace de nommage
dans la valeur de l'attribut en regard de la portée de l'élément auquel la déclaration
est attachée. Pour de telles déclarations, le nom de l'espace de nommage ne peut pas être vide.
[Définition :] Si le nom d'attribut correspond à celui
indiqué par NomAttImpl
, alors le
nom de l'espace de nommage dans la valeur de l'attribut est celui de l'espace de nommage implicite
en regard de la portée de l'élément auquel la déclaration est attachée.
Dans une telle déclaration implicite, la valeur de l'attribut peut être vide. Les espaces de nommage implicites
et le surclassement des déclarations sont abordés au chapitre
5. L'application des espaces de nommage aux éléments et attributs.
Un exemple de déclaration d'espace de nommage, qui associe le préfixe d'espace de nommage edi
avec
le nom d'espace de nommage http://ecommerce.org/schema
:
<x xmlns:edi='http://ecommerce.org/schema'> |
Contrainte d'espace de nommage : « XML » au début
L'utilisation des préfixes qui commencent avec la séquence des trois lettres x
, m
, l
,
quelle que soit leur casse, est réservée à XML et à toutes les spécifications en relation
avec XML. « errata-NE05 »
« errata-NE06 »
[Définition :] Pour les documents XML conformes à cette
spécification, certaines dénominations (les constructions correspondant au non-terminal
Nom
vf.)
peuvent être données en tant
que noms qualifiés, définis comme suit :
Nom qualifié | ||||||||||||
|
Le Préfixe
fournit la partie préfixe de l'espace de nommage
du nom qualifié et doit être associé avec une référence d'URI d'espace de nommage dans la
déclaration de l'espace de nommage.
[Définition :] La partie PartieLocale
fournit la partie locale du nom qualifié.
Remarquer que le préfixe fait seulement office de représentant pour le nom de l'espace de nommage. Les applications devraient utiliser le nom de l'espace de nommage, et non le préfixe, pour la construction de noms dont la portée s'étend au-delà du document conteneur.
Pour les documents XML conformes à cette spécification, les types d'élément sont donnés comme noms qualifiés, comme suit :
Les types d'élément | ||||||||||||||||||
|
Un exemple de nom qualifié faisant office de type d'élément :
<x xmlns:edi='http://ecommerce.org/schema'> |
Les attributs sont des déclarations d'espace de nommage ou bien leurs noms sont donnés comme noms qualifiés :
Attribut | ||||||||||
|
Un exemple de nom qualifié faisant office de nom d'attribut :
<x xmlns:edi='http://ecommerce.org/schema'> |
Contrainte d'espace de nommage : Préfixe déclaré
Le préfixe d'espace de nommage, à moins d'être xml
ou xmlns
, doit avoir été
déclaré dans un attribut de déclaration d'espace de nommage, soit dans la balise
ouvrante de l'élément où on utilise le préfixe, soit dans un élément ancêtre
(c'est-à-dire, un élément dans le contenu
vf.
duquel apparaît le balisage préfixé). Le préfixe xml
est lié par définition
au nom de l'espace de nommage http://www.w3.org/XML/1998/namespace
. Le préfixe xmlns
ne
s'utilise que pour le rattachement à un espace de nommage, celui-ci n'est pas lui-même rattaché à un
quelconque nom d'espace de nommage.
« errata-NE05 »
Cette contrainte peut conduire à des difficultés opératoires au cas où l'attribut de
déclaration d'espace de nommage ne serait pas fourni directement par l'entité document
vf.
XML,
mais via un attribut implicite déclaré dans une entité externe. De telles déclarations
pourraient ne pas être lues par un logiciel bâti sur un processeur XML non-validant. De nombreuses applications
XML, vraisemblablement celles sensibles à l'espace de nommage, échouent à demander des processeurs
validants. Pour le déroulement correct des opérations avec ces applications, les déclarations
d'espaces de nommage doivent être fournies soit directement, soit via des attributs implicites déclarés
dans le sous-ensemble interne de la Déclaration de Type de Document
vf..
« errata-NE11 »
Les noms d'élément et les types d'attribut sont aussi donnés comme noms qualifiés quand ils apparaissent dans la DTD vf. :
Les noms qualifiés dans les déclarations | ||||||||||||||||||||||||||||
|
La déclaration d'espace de nommage est sensée s'appliquer à l'élément sur lequel elle
est spécifiée et à tous les éléments contenus dans celui-ci, à moins d'être
surclassée par une autre déclaration d'espace de nommage avec une même partie
NomAttEspNom
« errata-NE07 » :
<?xml version="1.0"?> |
On peut déclarer plusieurs préfixes d'espace de nommage comme attributs d'un seul élément, comme dans l'exemple suivant :
<?xml version="1.0"?> |
Un espace de nommage implicite est censé s'appliquer à l'élément sur lequel il est déclaré (quand cet élément n'a pas de préfixe d'espace de nommage) et à tous les éléments sans préfixe contenus dans celui-ci. Si la référence d'URI dans une déclaration d'espace de nommage est vide, alors les éléments non-préfixés couverts par la déclaration ne sont pas sensés être dans un quelconque espace de nommage. Remarquer que les espaces de nommage implicites ne s'appliquent pas directement aux attributs. « errata-NE07 »
<?xml version="1.0"?> |
<?xml version="1.0"?> |
Un exemple plus complet de portée d'espace de nommage :
<?xml version="1.0"?> |
On peut attribuer la chaîne vide à l'espace de nommage implicite. Ceci produit le même effet, dans la portée de la déclaration, que s'il n'y avait pas d'espace de nommage implicite.
<?xml version='1.0'?> |
Dans les documents XML conformes à cette spécification, aucune balise ne peut contenir d'attributs qui :
Par exemple, aucune des balises ouvrantes faux
qui suivent n'est correcte :
<!-- http://www.w3.org est rattaché à n1 et n2 --> |
Par contre, toutes les balises ouvrantes suivantes sont correctes, la seconde parce que l'espace de nommage implicite ne s'applique pas aux noms d'attributs :
<!-- http://www.w3.org est rattaché à n1 et c'est l'espace de nommage implicite --> |
Pour que les documents XML soient conformes à cette spécification, les types d'élément et
les noms d'attribut doivent correspondre à la production d'un NomQualifié
et doivent satisfaire aux « contraintes des espaces de nommage ».
Un document XML est conforme à cette spécification si tous les autres jetons de ce document, qui doivent
correspondre, pour la conformité XML, à la production XML d'un Nom
vf.,
correspondent aussi à la production d'un NomEspCondensé
dans cette spécification.
Dans un tel document, la conformité entraîne que :
À strictement parler, les valeurs des attributs déclarés de type ID
,
IDREF(S)
, ENTITY(IES)
et NOTATION
étant aussi du type
Nom
, par là-même ne devraient pas
contenir de caractère deux-points. Cependant, le type déclaré des valeurs d'attribut n'est seulement
disponible que pour les processeurs qui lisent les déclarations de balisage, par exemple, les
processeurs de validation
vf..
Ainsi, à moins que
l'emploi d'un processeur de validation n'ait été prescrit, le contenu de ces valeurs d'attribut ne
présente aucune garantie de vérification pour la conformité à cette
spécification.
Dans les disciplines faisant appel au calcul, le terme « espace de nommage » se rapporte par convention à un jeu de noms, c'est-à-dire, une collection ne contenant pas d'éléments en double. Cependant, considérer les noms employés dans un balisage XML comme un tel espace de nommage nuirait grandement à leur utilité. Le premier usage de tels noms dans les documents XML réside dans l'identification de structures logiques dans les documents par des modules logiciels, comme les processeurs de requête, les moteurs de rendus dirigés par des feuilles de style et les validateurs dirigés par des schémas. Considérons l'exemple suivant :
<section><titre>Séance de dédicace</titre> |
Dans cet exemple, le nom titre
apparaît trois fois dans le balisage et celui-ci seul ne fournit
manifestement pas une information suffisante pour permettre son traitement correct par un module logiciel.
Une autre source de problèmes provient de l'emploi d'attributs « globaux », comme illustré dans cet exemple, un fragment de document XML qui doit être rendu à l'aide d'une feuille de style CSS :
<RESERVATION> |
Dans ce cas, l'attribut CLASS
, qui décrit la base tarifaire et prend des valeurs telles que "J", "Y" ou
"C", se distingue à tous les niveaux sémantiques de l'attribut HTML:CLASS
, qui est employé
pour simuler une richesse syntaxique en HTML, comme un moyen de dépasser le répertoire limité de
l'élément par sous-classement.
XML 1.0 ne dispose pas de mécanisme incorporé pour déclarer des attributs « globaux » ;
des items comme l'attribut HTML CLASS
ne sont globaux que dans leur description textuelle et leur interprétation
par des applications HTML. Cependant, de tels attributs, une fonction importante les distinguant étant leur nom unique,
apparaissent couramment dans diverses applications.
En vue de rendre utile à la fois les noms qualifiés et non-qualifiés dans l'accomplissement de leur mission, nous identifions les noms qui apparaissent dans un espace de nommage XML comme appartenant à l'un parmi plusieurs espaces de nommage traditionnels disjoints (c'est-à-dire, structuré en ensembles), appelés partitions d'espace de nommage. Ces partitions sont :
Pour les documents XML conformes à cette spécification, les noms de tous les attributs qualifiés (préfixés) sont assignés à la partition des attributs globaux et les noms de tous les attributs non-qualifiés à la partition par type d'élément appropriée.
Par commodité, pour spécifier les règles et faire des comparaisons, nous définissons une forme développée, exprimée ici dans la syntaxe XML de l'élément, pour chaque type d'élément et chaque nom d'attribut d'un document XML.
[Définition :] Un type d'élément développé
s'exprime comme un élément XML vide de type TypeÉlémDév
. Celui-ci requiert un
attribut type
qui en indique le type PartieLocale
et un attribut
optionnel ns
qui en donne, si l'élément est qualifié, le
nom de l'espace de nommage.
[Définition :] Un nom d'attribut développé
s'exprime comme un éléement XML vide de type NomAttDév
. Celui-ci requiert un attribut
name
qui en donne le nom. Si l'attribut est global, il requiert un attribut ns
qui donne le
nom de son espace de nommage ; sinon, il requiert un attribut eltype
, qui indique le type
de l'élément auquel il se rattache, et, éventuellement, un attribut optionnel elns
,
qui donne le nom de l'espace de nommage de l'élément auquel il se rattache, si ce nom est connu.
Des variations à partir des exemples donnés plus haut illustrent le fonctionnement des types d'élément et des noms d'attribut développés. Chacun des deux fragments suivants est suivi par une table montrant le développement des noms :
<!-- 1 --> <section xmlns='urn:com:les-livres-c-nous'> |
Les noms se développeraient comme ceci :
Ligne | Nom | Développé |
1 | section | <TypeÉlémDév type="section" ns="urn:com:les-livres-c-nous" /> |
2 | titre | <TypeÉlémDév type="titre" ns="urn:com:les-livres-c-nous" /> |
3 | signature | <TypeÉlémDév type="signature" ns="urn:com:les-livres-c-nous" /> |
4 | auteur | <TypeÉlémDév type="auteur" ns="urn:com:les-livres-c-nous" /> |
4 | titre | <NomAttDév name='titre' eltype="auteur" elns="urn:com:les-livres-c-nous" /> |
4 | nom | <NomAttDév name='nom' eltype="auteur" elns="urn:com:les-livres-c-nous" /> |
5 | livre | <TypeÉlémDév type="livre" ns="urn:com:les-livres-c-nous" /> |
5 | titre | <NomAttDév name='titre' eltype="livre" elns="urn:com:les-livres-c-nous" /> |
5 | prix | <NomAttDév name='prix' eltype="livre" elns="urn:com:les-livres-c-nous" /> |
<!-- 1 --> <RESERVATION xmlns:HTML="http://www.w3.org/TR/REC-html40"> |
et comme cela :
1 | RESERVATION | <TypeÉlémDév type="RESERVATION" /> |
2 | NOM | <TypeÉlémDév type="NOM" /> |
2 | HTML:CLASS | <NomAttDév name="CLASS" ns=http://www.w3.org/TR/REC-html40 > « errata-NE02 » « errata-NE03 » |
3 | SIEGE | <TypeÉlémDév type="SIEGE" /> |
3 | CLASS | <NomAttDév name="CLASS" eltype="SIEGE" /> |
3 | HTML:CLASS | <NomAttDév name="CLASS" ns="http://www.w3.org/TR/REC-html40" /> |
4 | HTML:A | <TypeÉlémDév type="A" ns="http://www.w3.org/TR/REC-html40" /> |
4 | HREF | <NomAttDév name="HREF" eltype="A" elns="http://www.w3.org/TR/REC-html40" /> |
5 | DEPART | <TypeÉlémDév type="DEPART" /> |
On peut implémenter facilement la contrainte exprimée plus haut au chapitre « 5.3 L'unicité des attributs » en exigeant qu'aucun élément n'ait deux attributs dont les noms développés soient équivalents, c'est-à-dire ayant les mêmes paires attribut/valeur.
Ce travail reflète les suggestions d'un très grand nombre de personnes, précisément celles des membres du Groupe de Travail XML et du Groupe d'Intérêt Particulier du World Wide Web Consortium et celles des participants à l'Activité sur les Méta-données du W3C. Les contributions de Charles FRANKSTON de la société Microsoft furent particulièrement déterminantes.