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.
L'attribut xmlns possède la syntaxe suivante :
xmlns :préfixe=espace de nom
où 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.
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>
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.
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".
<?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",.
Ce schéma XML ajoute cet attribut :
xmlns:xsd="http://www.w3.org/2001/XMLSchemaCela 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>
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>
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>