Para evitar conflitos gerados pela ambiguidade de
nomes de tags e atributos XML, o conceito de namespace foi
incorporado à linguagem. Essa característica permite que
dois elementos com mesmo nome definidos por entidades diferentes
possam coexistir em um documento XML. Para esclarecer esse
conceito, um exemplo meramente ilustrativo foi escrito:
<raiz xmlns:a="http://www.definicao1.com"
xmlns:b="http://www.definicao2.com">
<a:elemento>
<a:subelemento>Conteudo</a:subelemento>
</a:elemento>
<b:elemento>
<b:outro_subelemento1>Valor1</b:outro_subelemento1>
<b:outro_subelemento2>Valor2</b:outro_subelemento2>
</b:elemento>
</raiz>
O exemplo anterior possui dois nós-filho do
nó raiz - ambos com nome "elemento". Cada um deles se refere a
uma tag diferente; o primeiro se refere a um elemento que possui
apenas um nó-filho e o segundo, a um elemento com dois
nós-filho. Para indicar essa diferença e evitar a
ambiguidade, usa- se namespace. Isso é feito com a
associação de prefixos (no caso, "a" e "b") aos
endereços das definições dos elementos, na primeira
linha do exemplo. Assim, sempre que o um nó xyz for antecedido
do prefixo "a", estará indicado o uso do elemento xyz descrito
no documento para o qual "a" aponta. Assim, "a:elemento" e
"b:elemento" são entendidos como coisas diferentes.