Utilización de espazos de nomes en XML
Utilización de espazos de nomes en XML
Os espazos de nomes XML (XML Namespaces ou xmlns) permiten evitar conflitos entre elementos XML que se chamen igual. Isto ocorre cando misturamos documentos XML que proveñen de diferentes aplicacións. Por exemplo, podemos ter un ficheiro XML de clientes:
<?xml version="1.0" encoding="UTF-8"?>
<clientes>
<cliente>
<nome>Ana Ridao</nome>
<direccion>Rúa Nova 2</direccion>
</cliente>
</clientes>
E outro ficheiro de provedores con elementos que se chamen igual:
<?xml version="1.0" encoding="UTF-8"?>
<provedores>
<provedor>
<nome>Xoán Gallego</nome>
<direccion>Rúa Vella 1</direccion>
</provedor>
</provedores>
Se misturamos ambos os dous ficheiros nun único documento XML de contactos teremos problemas. Para evitalos asignamos un espazo de nomes a cada un dos elementos ou atributos dun documento XML e así, no caso de combinalos, non colisionarán. Poderemos ter unha mesma etiqueta chamada <direccion> para clientes e provedores e non se confundirían, posto que cada unha estará precedida polo identificador do seu espazo de nomes.
Hai dúas formas de asignar espazos de nomes: mediante espazos de nomes por defecto ou mediante prefixos.
Espazo de nomes por defecto
Defínense mediante o atributo xmlns. O espazo de nomes aplicarase ao elemento no que se inclúe o atributo xmlns e a todo o seu contido (sempre que non estea á súa vez asociados a outro espazo de nomes). A sintaxe é a seguinte:
xmlns="URI do espazo de nomes"
Vexámolo cun exemplo:
<?xml version="1.0" encoding="UTF-8"?>
<clientes xmlns="http://www.servidor.com/clientes/">
<cliente>
<nome>Ana Ridao</nome>
<direccion>Rúa Nova 2</direccion>
</cliente>
</clientes>
O obxectivo do URI (Uniform Resource Indentifier) é dar un nome único ao espazo de nomes pero non se usa para buscar información de ningún tipo.
Prefixos
Outra forma de evitar os conflitos é usando prefixos nos espazos de nomes. Neste caso, a sintaxe é a seguinte:
xmlns:prefix="URI do espazo de nomes".
O prefixo e só unha forma curta de facer referencia ao identificador (o URI), que é o que realmente identifica o espazo de nomes. Vexámolo cun exemplo:
<?xml version="1.0" encoding="UTF-8"?>
<prov:provedor xmlns:prov="http://www.servidor.com/provedores">
<prov:nome>Xoán Gallego</prov:nome>
<prov:direccion>Rúa Vella 1</prov:direccion>
</prov:provedor>
O documento anterior sería equivalente, dende o punto de vista dun parser XML, a estoutro declarado mediante un espazo de nomes por defecto:
<?xml version="1.0" encoding="UTF-8"?>
<provedor xmlns="http://www.servidor.com/provedores">
<nome>Xoán Gallego</nome>
<direccion>Rúa Vella 1</direccion>
</provedor>
--Arribi 10:59 5 oct 2010 (BST)