Saltar la navegación

2.4.4. Namespaces

Varios documentos XML se pueden combinar entre sí, pudiendo en estos casos coincidir el nombre de algunos elementos.

Por ejemplo: Dos documentos XML podrían contener un elemento llamado “carta”, pero con significados distintos:

<carta>
    <palo>Corazones</palo>
    <numero>7</numero>
</carta>
<carta>
    <carnes>
        <filete_de_ternera precio="12.95"></filete_de_ternera>
        <solomillo_a_la_pimienta precio="13.60"></solomillo_a_la_pimienta>
    </carnes>
    <pescados>
        <lenguado_al_horno precio="16.20"></lenguado_al_horno>
        <merluza_en_salsa_verde precio="15.85"></merluza_en_salsa_verde>
    </pescados>
</carta>

De forma que, si se incluyen ambos elementos en un documento XML, se origina un conflicto de nombres. Para resolverlo, se pueden utilizar espacios de nombres (XML Namespaces). Por ejemplo, escribiendo:

<?xml version="1.0" encoding="UTF-8"?>
<e1:ejemplo xmlns:e1="http://www.mimagnificaweb.com/ejemplo1" xmlns:e2="http://www.mimagnificaweb.com/ejemplo2">
	<e1:carta>
		<e1:palo>Corazones</e1:palo>
		<e1:numero>7</e1:numero>
	</e1:carta>
	<e2:carta>
		<e2:carnes>
			<e2:filete_de_ternera precio="12.95"></e2:filete_de_ternera>
			<e2:solomillo_a_la_pimienta precio="13.60"></e2:solomillo_a_la_pimienta>
		</e2:carnes>
		<e2:pescados>
			<e2:lenguado_al_horno precio="16.20"></e2:lenguado_al_horno>
			<e2:merluza_en_salsa_verde precio="15.85"></e2:merluza_en_salsa_verde>
		</e2:pescados>
	</e2:carta>
</e1:ejemplo>



Sintaxis

Para definir un espacio de nombres se utiliza la siguiente sintaxis:

xmlns:prefijo="URI"

En el ejemplo, obsérvese que, xmlns es un atributo que se ha utilizado en la etiqueta de inicio del elemento y, en este caso, se han definido dos espacios de nombres que hacen referencia a los siguientes URI (Uniform Resource Identifier, Identificador Uniforme de Recurso):

  • http://www.mimagnificaweb.com/ejemplo1
  • http://www.mimagnificaweb.com/ejemplo2

Los prefijos definidos son e1 y e2, respectivamente. Véase que, se han añadido dichos prefijos a las etiquetas que aparecen en el documento: <e1:carta></e1:carta>, <e2:carta></e2:carta>, <e1:palo></e1:palo>, etc.

Los URI especificados en un documento XML no tienen porqué contener nada, su función es ser únicos. No obstante, en un URI se puede mostrar información si se considera oportuno. Véase, por ejemplo:

Ejemplo de nombres de espacio

Ejemplo

El siguiente ejemplo muestra un documento XML con elementos que contienen el mismo tipo de datos de personas, pero se debe diferenciar cuáles pertenecen al profesorado y cuáles al alumnado:

<?xml version="1.0" encoding="UTF-8"?>
<instituto>
  <persona>
    <nombre>Juan</nombre>  
    <apellidos>López</apellidos>
    <edad>35</edad>
  </persona>
  <persona>
  <nombre>María</nombre>
  <apellidos>Ferrer</apellidos>
  <edad>13</edad>
  </persona>
  <persona>
  <nombre>Sara</nombre>
  <apellidos>Pérez</apellidos>
  <edad>28</edad>
  </persona>
  <persona>
  <nombre>Luís</nombre>
  <apellidos>García</apellidos>
  <edad>8</edad>
  </persona>
</instituto>

Se puede observar que, en un principio, no se distingue qué persona pertenece a qué grupo. Aunque podríamos crear una etiqueta para distinguirlo, es más fácil y práctico usar nombres de espacio:

<?xml version="1.0" encoding="UTF-8"?>
<instituto xmlns:p1="https:ciclo.iesnervion.es/profesorado" xmlns:p2="ciclo.iesnervion.es/alumnado">
  <p1:persona>
    <nombre>Juan</nombre>  
    <apellidos>López</apellidos>
    <edad>35</edad>
  </p1:persona>
  <p2:persona>
  <nombre>María</nombre>
  <apellidos>Ferrer</apellidos>
  <edad>13</edad>
  </p2:persona>
  <p1:persona>
  <nombre>Sara</nombre>
  <apellidos>Pérez</apellidos>
  <edad>28</edad>
  </p1:persona>
  <p2:persona>
  <nombre>Luís</nombre>
  <apellidos>García</apellidos>
  <edad>8</edad>
  </p2:persona>
</instituto>

Ahora sí, se distingue que toda persona que pertenezca al espacio de nombres p1 es profesorado y los que pertenezcan al p2 serán alumnado.

Creado con eXeLearning (Ventana nueva)