Espaços de Nomes XML

Um espaço de nomes XML é uma coleta de nomes, identificados por uma referência de URI, que são utilizados em documentos XML como tipos de elementos e nomes de atributos.

Os espaços de nomes XML são definidos por uma recomendação W3C, com data de 14 de janeiro de 1999, chamada Espaços de Nomes em XML. Os nomes de tags XML devem ser globalmente exclusivos, além de serem abreviados por motivo de desempenho. Para resolver este conflito, a recomendação do espaço de nomes W3C define um atributo xmlns, que pode corrigir qualquer elemento XML. Se estiver presente em um elemento, identifica o espaço de nomes para o elemento.

O atributo xmlns possui a seguinte sintaxe:

xmlns:prefix=namespace

em que namespace é um URI exclusivo (como www.ibm.com) e em que prefix representa o espaço de nomes e fornece um ponteiro para ele.

Na definição de elemento de cliente a seguir, um espaço de nomes de contabilidade está definido para poder distinguir as tags de elementos das que aparecem em registros de clientes criados por outros aplicativos de negócios:

<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>  

A definição de espaço de nomes na primeira linha designa o espaço de nomes http://www.my.com/acct-REV10 para o prefixo. Este prefixo é utilizado em nomes de elementos, como um nome para anexá-los ao espaço de nomes. Um segundo aplicativo, por exemplo, um sistema de preenchimento, pode designar um espaço de nomes diferente a seus 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>

Um aplicativo que processa as duas estruturas de dados agora pode tratar a contabilidade e os dados de preenchimento de forma diferente. Existe um espaço de nomes padrão. Ele será configurado se nenhum nome local estiver designado na definição de espaço de nomes:

<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>

Neste exemplo, todas as tags no registro de clientes estão qualificadas para residir no espaço de nomes http://www.my.com/acct-REV10. Nenhum prefixo explícito é requerido, porque é utilizado o espaço de nomes padrão. Observe que o espaço de nomes padrão se aplica a quaisquer definições de atributos.

Esquemas XML e Espaços de Nomes

No esquema XML a seguir, o espaço de nomes padrão para o esquema está definido como o espaço de nomes de esquema XML padrão http://www.w3.org/2001/XMLSchema; existe também um espaço de nomes específico de 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>  

Assumindo que o esquema XML anterior tenha sido salvo como C:\temp\TestSchema.xsd, um arquivo XML de mostra que é validado neste esquema é:

<?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> 

Espaço de Nomes de Destino

O espaço de nomes de destino serve para identificar o espaço de nomes no qual existe a associação entre o elemento e seu nome. No caso de declarações, esta associação determina o espaço de nomes dos elementos em arquivos XML que estão de acordo com o esquema. Um arquivo XML que importa um esquema deve fazer referência a seu espaço de nomes de destino no atributo schemaLocation. Quaisquer incompatibilidades entre o espaço de nomes de destino e o real de um elemento são relatadas como erros de validação de esquema. Em nosso exemplo, o espaço de nomes de destino é http://www.ibm.com; ele está definido no arquivo esquema XML e referido duas vezes no arquivo XML. Qualquer incompatibilidade entre estas três ocorrências do espaço de nomes gera erros de validação.

Os exemplos a seguir mostram como os espaços de nomes de destino e os prefixos de espaço de nomes funcionam em esquemas XML e em seus documentos da instância XML correspondente.

Amostra 1 - Um Esquema com um Espaço de Nomes Padrão e um de Destino e Locais Não Qualificados

O 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>  

Um documento da instância XML válido criado a partir deste esquema é semelhante ao seguinte. Os elementos e atributos locais não não qualificados.

<?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> 

Quando elementos locais (como o elemento "name") e atributos são não qualificados em um arquivo XML, apenas o elemento raiz é qualificado. Portanto, neste exemplo, o prefixo de espaço de nomes "x" é designado ao elemento raiz "MyAddress", associando-o ao espaço de nomes "http://www.ibm.com", mas o prefixo "x" não é designado ao elemento local "name".

Amostra 2 - Um Esquema com um Espaço de Nomes Padrão e um de Destino e Locais Qualificados

<?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>  

Um documento da instância XML válido criado a partir deste esquema é semelhante ao seguinte. Os elementos e atributos locais são qualificados Isto ocorre porque o atributo elementFormDefault está configurado como qualificado no 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>

Neste exemplo, o prefixo de espaço de nomes "x" é designado ao elemento raiz "MyAddress" e ao elemento local "name", associando-os ao espaço de nomes "http://www.ibm.com",.

Amostra 3 - Esquema com Espaço de Nomes de Destino e Define Explicitamente xmlns:xsd

Este esquema XML inclui este atributo:

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

Isto significa que cada uma das construções definidas pela linguagem de esquema XML precisará ser qualificada com o prefixo "xsd". Por exemplo, xsd:complexType e xsd:string

. Observe que é possível escolher outros prefixos como "xs" ou "foobar" em sua declaração e uso.

É possível especificar este prefixo na página de preferências do esquema XML. Para obter informações adicionais, consulte as tarefas relacionadas.

Todos os tipos definidos pelo usuário pertencem ao espaço de nomes http://www.ibm.com, conforme definido pelo atributo targetNamespace e o prefixo é "x", conforme definido pelo 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>

Um documento da instância XML válido criado a partir deste esquema é semelhante ao seguinte. Os elementos e atributos locais não não qualificados. A semântica de qualificação é a mesma da Amostra 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>

Amostra 4 - Esquema com Espaço de Nomes de Destino Não Declarado que Define Explicitamente xmlns:xsd

Este esquema XML não possui um espaço de nomes de destino para ele mesmo. Neste caso, é altamente recomendável que todas as construções de esquema XML sejam explicitamente qualificadas com um prefixo como "xsd". As definições e declarações deste esquema, como AddressType, são referidas sem qualificação de espaço de nomes, pois não existe nenhum prefixo de espaço de nomes.

<?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>

Um documento da instância XML válido criado a partir do esquema é semelhante ao seguinte. Todos os elementos são unqualified.

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

Amostra 5 - Um Esquema em que o Espaço de Nomes de Destino É o Espaço de Nomes Padrão

Este é um esquema XML no qual o espaço de nomes de destino é o espaço de nomes padrão. Além disso, o espaço de nomes não possui nenhum prefixo de espaço de nomes.

<?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>

Um documento da instância XML válido criado a partir do esquema é semelhante ao seguinte:

<?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>  
Tarefas relacionadas
Editando Preferências de Arquivo Esquema XML