Espaces de nom XML

Un espace de nom XML est une collection de noms, identifiés par une référence URI, et utilisés dans des documents XML comme types d'éléments et noms d'attributs.

Les espaces de nom XML sont définis par une recommandation W3C, datant du 14 janvier 1999, appelée Namespaces in XML. Les noms de balise XML doivent être globalement uniques, et courts pour des raisons de performances. Pour résoudre ce conflit, la recommandation d'espace de nom W3C définit un attribut xmlns capable de modifier tout élément XML. Si celui-ci existe dans un élément, il identifie l'espace de nom de cet élément.

L'attribut xmlns possède la syntaxe suivante :

xmlns :préfixe=espace de nom

espace de nom est un identificateur URI unique (tel que www.ibm.com) et où préfixe représente l'espace de nom et fournit un pointeur le désignant.

Dans la définition d'élément de client suivante, un nom d'espace comptable est défini pour pouvoir distinguer les balises d'élément de celles qui apparaissent dans les archives du client créées via d'autres applications de gestion :

<acct:customer xmlns:acct="http://www.my.com/acct-REV10">
	<acct:name>Corporation</acct:name>
	<acct:order acct:ref="5566"/>
	<acct:status>invoice</acct:status>
</acct:customer>  

La définition d'espace de nom de la première ligne attribue l'espace de nom http://www.my.com/acct-REV10 au préfixe. Celui-ci est utilisé sur les noms d'élément tels que le nom afin de les joindre à l'espace de nom. Une seconde application, par exemple, un système de distribution, peut attribuer un espace de nom différent à ses éléments client :

<ful:customer xmlns:ful="http://www.your.com/ful">
	<ful:name>Corporation</ful:name>
	<ful:order ful:ref="A98756"/>
	<ful:status>shipped</ful:status>
 </ful:customer>

Une application traitant les deux structures de données peut désormais traiter différemment les données comptables et de distribution. Il existe un espace de nom par défaut. Il est défini si aucun nom local n'est affecté dans la définition d'espace de nom :

<acct:customer xmlns="http://www.my.com/acct-REV10" xmlns:acct="http://www.my.com/acct-REV10 ">
<name>Corporation</name>
<order acct:ref="5566"/>
<status>invoice</status>
</customer>

Dans cet exemple, toutes les balises de l'archive du client peuvent être localisées dans l'espace de nom http://www.my.com/acct-REV10. Aucun préfixe explicite n'est requis car l'espace de nom par défaut est utilisé. Notez que l'espace de nom par défaut s'applique à toutes les définitions d'attributs.

Schémas et espaces de nom XML

Dans le schéma XML suivant, l'espace de nom par défaut du schéma est défini comme l'espace de nom standard du schéma XML http://www.w3.org/2001/XMLSchema. Il existe également un espace de nom spécifique au schéma http://www.ibm.com.

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:TestSchema="http://www.ibm.com">
 <simpleType name="ZipCodeType">
 <restriction base="integer">
  <minInclusive value="10000"/>
 <maxInclusive value="99999"/>
</restriction>
 </simpleType> 
 <!--définitions d'élément ignorées -->  
</schema>  

En supposant que le précédent schéma XML est enregistré C:\temp\TestSchema.xsd, le fichier XML échantillon validé par ce schéma est :

<?xml version="1.0"?>
<x:addressList xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://www.ibm.com file:///C:/temp/TestSchema.xsd">
 xsi:schemaLocation="http://www.ibm.com file:///C:/temp/TestSchema.xsd">
<x:address>
 <x:street>x:Vangerowstrasse</x:street>
  <x:zipCode>69115</x:zipCode>
 <x:city>x:Heidelberg</x:city>
 </x:address>
    <x:address> 
<x:street>x:Bernal Road</x:street> 
<x:zipCode>90375</x:zipCode>
     <x:city>x:San Jose</x:city>
 </x:address>
</x:addressList> 

Espace de nom cible

L'espace de nom cible sert à identifier l'espace de nom dans lequel existe l'association entre l'élément et son nom. En cas de déclarations, cette association détermine l'espace de nom des éléments dans des fichiers XML correspondant au schéma. Un fichier XML important un schéma doit désigner son espace de nom cible dans l'attribut schemaLocation. Toute disparité entre l'espace de nom cible et l'espace de nom réel d'un élément sera considérée comme une erreur de validation du schéma. Dans notre exemple, l'espace de nom cible est http://www.ibm.com. Il est défini dans le fichier de schéma XML et désigné deux fois dans le fichier XML. Toute disparité entre ces trois occurrences de l'espace de nom entraînent des erreurs de validation.

Les exemples suivants démontrent comment des espaces de nom cibles et des préfixes d'espace de nom sont utilisés dans des schémas XML et leurs documents d'instance XML correspondants.

Exemple 1 : Un schéma comportant à la fois un nom d'espace par défaut et cible et des éléments locaux non qualifiés

Le schéma XML :

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com">
<complexType name="AddressType">
<sequence>
<element name="name" type="string"></element>
</sequence>
</complexType>
<element name="MyAddress" type="x:AddressType"></element>
</schema> 

Voici un exemple de document d'instance XML valide créé à partir de ce schéma. Les éléments et attributs locaux sont non qualifiés.

<?xml version="1.0"?>
<x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com x.xsd ">
<name>Peter Smith</name>
</x:MyAddress> 

Lorsque des éléments (tels que l'élément "name") et des attributs locaux ne sont pas qualifiés dans un fichier XML, seul l'élément principal est alors qualifié. Ainsi, dans cet exemple, le préfixe d'espace de nom "x" est affecté à l'élément principal "MyAddress", ce qui l'associe à l'espace de nom "http://www.ibm.com", mais le préfixe "x" n'est pas affecté à l'élément local "name".

Exemple 2 : Un schéma comportant à la fois un nom d'espace par défaut et cible et des éléments locaux qualifiés

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com" elementFormDefault="qualified">
<complexType name="AddressType">
<sequence>
<element name="name" type="string"></element>
</sequence>
</complexType>
<element name="MyAddress" type="x:AddressType"></element>
 </schema>  

Voici un exemple de document d'instance XML valide créé à partir de ce schéma. Les attributs et éléments locaux sont qualifiés car l'attribut elementFormDefault est défini sur la valeur "qualifié" dans le schéma XML.

<?xml version="1.0"?>
  <x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.ibm.com x.xsd "> 
<x:name>Peter Smith</x:name>
 </x:MyAddress>

Dans cet exemple, le préfixe d'espace de nom "x" est affecté à l'élément principal "MyAddress" et à l'élément local "name", ce qui les associe à l'espace de nom "http://www.ibm.com",.

Exemple 3 : Schéma comportant un espace de nom cible et définissant de façon explicite xmlns:xsd

Ce schéma XML ajoute cet attribut :

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

Cela signifie que chaque construction définie par le langage du schéma XML devra être qualifiée par le préfixe "xsd". Par exemple, xsd:complexType et xsd:string

. Notez que vous pouvez choisir d'autres préfixes, tels que "xs" ou "foobar" dans votre déclaration et utilisation.

Vous pouvez spécifier ce préfixe dans la page des préférences du schéma XML. Pour plus d'informations, voir Tâches associées.

Tous les types définis par l'utilisateur appartiennent à l'espace de nom http://www.ibm.com tel que défini par l'attribut targetNamespace, et le préfixe est "x" tel que défini dans l'attribut xmlns:x.

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com">
<xsd:complexType name="AddressType">
		<xsd:sequence>
		 <xsd:element name="name" type="xsd:string"></xsd:element>
				</xsd:sequence>
 </xsd:complexType>
 <xsd:element name="MyAddress" type="x:AddressType"></xsd:element>
</xsd:schema>

Voici un exemple de document d'instance XML valide créé à partir de ce schéma. Les éléments et attributs locaux sont non qualifiés. La sémantique de qualification est la même que celle de l'exemple 1.

<?xml version="1.0"?>
 <x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.ibm.com x.xsd ">
<name>Peter Smith</name>
 </x:MyAddress>

Exemple 4 : Schéma comportant un espace de nom cible non déclaré définissant de façon explicite xmlns:xsd

Ce schéma XML ne possède aucun espace de nom cible. Dans ce cas, il est fortement recommandé que toutes les constructions du schéma XML soient explicitement qualifiées par un préfixe tel que "xsd". Les définitions et les déclarations issues de ce schéma telles que AddressType sont désignées sans aucune qualification d'espace de nom car il n'existe aucun préfixe d'espace de nom.

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="AddressType">
		<xsd:sequence>
<xsd:element name="name" type="xsd:string"></xsd:element>
<xsd:element name="name" type="xsd:string"></xsd:element>
<xsd:element name="name" type="xsd:string"></xsd:element> 
				</xsd:sequence> 
</xsd:complexType>
<xsd:element name="MyAddress" type="AddressType"></xsd:element> 
</xsd:schema> 

Voici un exemple de document d'instance XML valide créé à partir du schéma. Tous les éléments sont non qualifiés.

<?xml version="1.0"?>
<MyAddress xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="x.xsd">
<name>name</name>
</MyAddress>

Exemple 5 : Un schéma où l'espace de nom cible est l'espace de nom par défaut

Voici un schéma XML où l'espace de nom cible est l'espace de nom par défaut. L'espace de nom n'a également aucun préfixe d'espace de nom.

<?xml version="1.0"?>
 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns="http://www.ibm.com">
<xsd:complexType name="AddressType">
		<xsd:sequence>
<xsd:element name="name" type="xsd:string"></xsd:element>
				</xsd:sequence>
</xsd:complexType>
 <xsd:element name="MyAddress" type="AddressType"></xsd:element>
 </xsd:schema> 

Voici un exemple de document d'instance XML valide créé à partir du schéma :

<?xml version="1.0" encoding="UTF-8"?>
<MyAddress xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com NewXMLSchema.xsd">
<name>name</name>
 </MyAddress>  
Tâches associées
Edition des préférences de fichier de schéma XML