Los espacios de nombres en XML son una característica que permite diferenciar elementos y atributos que pueden tener el mismo nombre pero diferentes significados. Son especialmente útiles en documentos XML que combinan marcado de diferentes fuentes XML, evitando conflictos de nombres.
Varios documentos XML se pueden combinar entre sí, pudiendo en estos casos coincidir el nombre de algunos elementos.
Por ejemplo:
<mazo>
<carta tipo:"magic">Anillo único</carta>
<carta tipo:"magic">Triunfo amargo</carta>
</mazo>
<herramienta>
<mazo>
<modelo>T300</modelo>
<modelos>T500</modelos>
</mazo>
<herramienta>
Un espacio de nombres se declara utilizando el atributo xmlns en un elemento, seguido de un URI que identifica el espacio de nombres. A menudo, se utiliza un prefijo para hacer referencia al espacio de nombres en elementos y atributos.
<?xml version="1.0" encoding="UTF-8"?>
<libreria xmlns:lib="http://www.ejemplo.com/libros">
<lib:libro>
<lib:titulo>El Principito</lib:titulo>
<lib:autor>Antoine de Saint-Exupéry</lib:autor>
</lib:libro>
<lib:libro>
<lib:titulo>1984</lib:titulo>
<lib:autor>George Orwell</lib:autor>
</lib:libro>
</libreria>
En este ejemplo, xmlns:lib="http://www.ejemplo.com/libros" declara un espacio de nombres con el prefijo lib. Este prefijo se utiliza luego para calificar elementos como libro, titulo y autor, indicando que pertenecen al espacio de nombres http://www.ejemplo.com/libros.
La sintaxis para definir un espacio de nombres (namespace) en XML es relativamente simple y directa. Un espacio de nombres es utilizado en XML para proporcionar un contexto único a los elementos y atributos, especialmente en documentos donde pueden coexistir elementos de diferentes fuentes y con el mismo nombre. Aquí está cómo se define:
<elemento xmlns:prefijo="URI_del_espacio_de_nombres">
elemento: Es el nombre del elemento donde estás definiendo el espacio de nombres.
xmlns: Es el prefijo reservado para definir espacios de nombres en XML.
prefijo: Es el prefijo que eliges para asociar a los elementos o atributos que pertenecen a este espacio de nombres. Puede ser cualquier nombre que consideres adecuado, siempre y cuando siga las reglas de nomenclatura de XML.
URI_del_espacio_de_nombres: Es un identificador único para el espacio de nombres, normalmente un URI (Uniform Resource Identifier). Este URI no tiene que apuntar a un recurso real en la web; su propósito es ser un identificador único.
Cuando se define un espacio de nombres por defecto en un documento XML, todos los elementos y atributos que no tengan un prefijo de espacio de nombres explícito se consideran parte de ese espacio de nombres por defecto. Esto simplifica la estructura del documento al evitar la necesidad de etiquetar cada elemento con un prefijo de espacio de nombres.
<libro xmlns="http://ejemplo.com/ns">
<titulo>Contenido del elemento 1</titulo>
<autor>Contenido del elemento 2</autor>
</libro >
En XML, puedes indicar que un elemento no pertenece a ningún espacio de nombres utilizando el atributo xmlns con un valor vacío ("") o un espacio de nombres nulo. Aquí te muestro cómo se vería un ejemplo de un elemento sin espacio de nombres utilizando el atributo xmlns con un valor vacío:
<libro xmlns="http://ejemplo.com/ns">
<titulo>Contenido del elemento 1</titulo>
<autor xmlns="">Contenido del elemento 2</autor>
</libro >