Em
XML, o autor dos documentos tem liberdade para criá-los com a estrutura que quiser e os nomes de elementos que quiser. Dependendo dos nomes escolhidos, pode ser que haja confusão para um possível leitor do documento ou até mesmo causar comportamentos inesperados em aplicações. Portanto, para evitar confusões, é preciso contextualizar o documento.
A contextualização é feita por um recurso chamado
namespace. Trata-se de um prefixo para os elementos (e/ou atributos), separado por dois pontos (:). Por exemplo:
<pessoa:nome>Fulano de Tal</pessoa:nome>
Ao acrescentar o prefixo "pessoa", eu estou deixando claro que o nome não é um nome de qualquer coisa. É o nome de uma pessoa.
Contextos são especialmente importantes quando há, dentro do mesmo documento, elementos iguais com significados diferentes. Retomando o exemplo acima, vamos supor que haja no documento um outro elemento "nome", que se refira ao nome fantasia da empresa onde essa pessoa trabalha, por exemplo. Com o uso de prefixos, essa situação fica resolvida:
<pessoa:nome>Fulano de Tal</pessoa:nome>
<empresa:nome>Companhia XPTO</empresa:nome>
Namespaces são caracterizados não apenas pelo uso de um prefixo, mas também por sua identificação. Essa identificação é feita por um atributo especial chamado xmlns, que serve para declarar um nome único para o namespace. Frequentemente esse nome é um endereço Web onde é possível encontrar informações sobre a terminologia utilizada no documento. No exemplo a seguir os namespaces estão identificados (com endereços fictícios):
<pessoa:nome xmlns:pessoa="http://www.cadastros.com.br/pessoas">Fulano de Tal</pessoa:nome>
<empresa:nome xmlns:empresa="http://www.cadastros.com.br/empresas">Companhia XPTO</empresa:nome>
A identificação de namespaces pode ser feita no próprio elemento onde há o prefixo ou em um nível superior. A vantagem de fazer essa especificação em um nível superior é a possibilidade de usar o mesmo prefixo em vários elementos sem necessidade de especificá-lo várias vezes. Por exemplo:
<cadastro xmlns:pessoa="http://www.cadastros.com.br/pessoas" xmlns:empresa="http://www.cadastros.com.br/empresas">
<pessoa:nome>Fulano de Tal</pessoa:nome>
<pessoa:idade>40<pessoa:idade>
<empresa:nome>Companhia XPTO</empresa:nome>
</cadastro>
Muitas das tecnologias que são construídas sobre o XML fazem uso deste recurso. Alguns exemplos são: XLink (padrão para hiperlinks em documentos XML), XQuery (linguagem para consulta de dados estruturados em XML), XSLT (folha de estilos avançada para XML), entre muitas outras.