Un espacio de nombres XML es una colección de nombres, identificados mediante una referencia de URI que se utiliza en documentos XML como tipos de elementos y nombres de atributos.
El atributo xmlns tiene la sintaxis siguiente:
xmlns:prefijo=espacionombres
donde espacionombres es un URI exclusivo como, por ejemplo, www.ibm.com y prefijo representa el espacio de nombres y proporciona un puntero al mismo.
En la siguiente definición del elemento de cliente, se define un espacio de nombres de cuentas para poder diferenciar los códigos de los elementos de los códigos que aparecen en los registros de clientes creados mediante otras aplicaciones de la empresa:
<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>
namespace definition en la primera línea asigna el espacio de nombres http://www.my.com/acct-REV10 al prefijo. Este prefijo se utiliza en los nombres de elementos como, por ejemplo, para poder asignarles el espacio de nombres. Una segunda aplicación, por ejemplo, un sistema de formalización de pedidos, puede asignar un espacio de nombres diferente a sus elementos de clientes:
<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>
Una aplicación que procese ambas estructuras de datos ahora puede tratar los datos de cuentas y los datos de formalización de pedidos de forma diferente. Hay un espacio de nombres predeterminado. Se establece si no hay ningún nombre local asignado en la definición del espacio de nombres:
<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>
En este ejemplo, todos los códigos del registro de clientes están calificados para poder residir en el espacio de nombres http://www.my.com/acct-REV10. No es necesario ningún prefijo explícito debido a que se utiliza el espacio de nombres predeterminado. Tenga en cuenta que el espacio de nombres predeterminado se aplica a cualquier definición de atributos.
En el siguiente esquema XML, el espacio de nombres predeterminado para el esquema se define mediante el espacio de nombres del esquema XML http://www.w3.org/2001/XMLSchema. También hay un espacio de nombres específico del esquema 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> <!--element definitions skipped --> </schema>
Presuponiendo que el esquema XML anterior se guarde como C:\temp\TestSchema.xsd, un archivo XML que se valide con este esquema será:
<?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>
El espacio de nombres de destino sirve para identificar el espacio de nombres en el que la asociación entre el elemento y el nombre existen. En el caso de las declaraciones, esta asociación determina el espacio de nombres de los elementos de los archivos XML que se ajustan al esquema. Un archivo XML que importe un esquema debe hacer referencia a su espacio de nombres de destino en el atributo schemaLocation. Cualquier falta de coincidencia entre el espacio de nombres real y el de destino de un elemento genera errores de validación del esquema. En nuestro ejemplo, el espacio de nombres es http://www.ibm.com. Está definido en el archivo del esquema XML y se hace referencia al mismo dos veces en el archivo XML. Cualquier falta de coincidencia entre estas tres apariciones del espacio de nombres conducen a errores de validación.
Los ejemplos siguientes muestran cómo los prefijos de espacio de nombres y los espacios de nombres de destino funcionan en los esquemas XML y sus documentos de instancia XML correspondientes.
El esquema 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>
Un documento de instancia XML válido creado a partir de este esquema es similar al siguiente. Los elementos y atributos locales no están calificados.
<?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>
Cuando los elementos locales como, por ejemplo, el elemento "name") y los atributos no están calificados en un archivo XML, únicamente el elemento raíz está calificado. Por lo tanto, en este ejemplo, el prefijo de espacio de nombres "x" se asigna al elemento raíz "MyAddress", asociándolo con el espacio de nombres "http://www.ibm.com",, pero el prefijo "x" no se asigna al elemento 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>
Un documento de instancia XML válido creado a partir de este esquema es similar al siguiente. Los elementos y atributos locales están calificados. Esto es debido a que el atributo elementFormDefault se ha establecido como calificado en el esquema 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>
En este ejemplo, el prefijo de espacio de nombres "x" se asigna al elemento raíz "MyAddress" y al elemento local "name", asociándolos al espacio de nombres "http://www.ibm.com",.
Este esquema XML se añade a este atributo:
xmlns:xsd="http://www.w3.org/2001/XMLSchemaLo que esto significa es que cada una de las construcciones definidas mediante el lenguaje del esquema XML se tendrá que calificar con el prefijo "xsd". Por ejemplo, xsd:complexType y xsd:string
. Tenga en cuenta que puede seleccionar otros prefijos como, por ejemplo, "xs" o "foobar" en la declaración y el uso.
Puede especificar este prefijo en la página de preferencias del esquema XML. Para obtener más información, consulte las tareas relacionadas.
Todos los tipos definidos por el usuario pertenecen al espacio de nombres http://www.ibm.com como se ha definido mediante el atributo targetNamespace y el prefijo es "x" como se ha definido mediante el atributo 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>
Un documento de instancia XML válido creado a partir de este esquema es similar al siguiente. Los elementos y atributos locales no están calificados. La semántica de la calificación es la misma que en el Ejemplo 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>
Este esquema XML no tiene un espacio de nombres de destino para él mismo. En este caso, se recomienda que todas las construcciones de esquemas XML se califiquen de forma explícita mediante un prefijo como "xsd". Se hace referencia a las definiciones y declaraciones de este esquema como, por ejemplo AddressType sin la calificación del espacio de nombres ya que no hay ningún prefijo de espacio de nombres.
<?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>
Un documento de instancia XML válido creado a partir del esquema es similar al siguiente. Todos los elementos están sin calificar.
<?xml version="1.0"?> <MyAddress xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="x.xsd"> <name>name</name> </MyAddress>
Este es un esquema XML en el que el espacio de nombres de destino es el espacio de nombres predeterminado. Del mismo modo que el espacio de nombres, no tiene un prefijo de espacio de nombres.
<?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>
Un documento de instancia XML válido creado a partir del esquema es similar al siguiente:
<?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>