En esta página

Introducción a los espacios de nombres

Algunas partes de la documentación del módulo Qt XML presuponen que está familiarizado con los espacios de nombres XML. Aquí presentamos una breve introducción; salte a las convenciones de la documentación deQt XML si ya conoce este material.

Los espacios de nombres son un concepto introducido en XML para permitir un diseño más modular. Con su ayuda, el software de procesamiento de datos puede resolver fácilmente conflictos de nombres en documentos XML.

Considere el siguiente ejemplo:

<document>
<book>
  <title>Practical XML</title>
  <author title="Ms" name="Eris Kallisti"/>
  <chapter>
    <title>A Namespace Called fnord</title>
  </chapter>
</book>
</document>

Aquí encontramos tres usos diferentes del nombre título. Si desea procesar este documento, se encontrará con problemas, ya que cada uno de los títulos debe mostrarse de una manera diferente, aunque tengan el mismo nombre.

La solución sería disponer de algún medio para identificar la primera aparición de title como el título de un libro, es decir, utilizar el elemento title de un espacio de nombres de libro para distinguirlo de, por ejemplo, el título del capítulo:

<book:title>Practical XML</book:title>

book en este caso es un prefijo que denota el espacio de nombres.

Antes de poder aplicar un espacio de nombres a los nombres de elementos o atributos, debemos declararlo.

Los espacios de nombres son URI, como http://www.example.com/fnord/book/. Esto no significa que los datos deban estar disponibles en esta dirección; el URI se utiliza simplemente para proporcionar un nombre único.

Los espacios de nombres se declaran del mismo modo que los atributos; en sentido estricto, son atributos. Para hacer, por ejemplo, de http://www.example.com/fnord/ el espacio de nombres XML xmlns por defecto del documento escribimos

xmlns="http://example.com/fnord/"

Para distinguir el espacio de nombres http://www.example.com/fnord/book/ del predeterminado, debemos proporcionarle un prefijo:

xmlns:book="http://example.com/fnord/book/"

Un espacio de nombres así declarado puede aplicarse a los nombres de elementos y atributos anteponiendo el prefijo apropiado y un delimitador ":". Ya lo hemos visto con el elemento book:title.

Los nombres de elementos sin prefijo pertenecen al espacio de nombres por defecto. Esta regla no se aplica a los atributos: un atributo sin prefijo no pertenece a ninguno de los espacios de nombres XML declarados. Los atributos siempre pertenecen al espacio de nombres "tradicional" del elemento en el que aparecen. Un espacio de nombres "tradicional" no es un espacio de nombres XML, simplemente significa que todos los nombres de atributos pertenecientes a un elemento deben ser diferentes. Más adelante veremos cómo asignar un espacio de nombres XML a un atributo.

Debido al hecho de que los atributos sin prefijos no están en ningún espacio de nombres XML no hay colisión entre el atributo title (que pertenece al elemento author ) y por ejemplo el elemento title dentro de un capítulo.

Aclaremos esto con un ejemplo:

<document xmlns:book = 'http://example.com/fnord/book/'
          xmlns      = 'http://example.com/fnord/' >
<book>
  <book:title>Practical XML</book:title>
  <book:author xmlns:fnord = 'http://example.com/fnord/'
               title="Ms"
               fnord:title="Goddess"
               name="Eris Kallisti"/>
  <chapter>
    <title>A Namespace Called fnord</title>
  </chapter>
</book>
</document>

Dentro del elemento documento tenemos declarados dos espacios de nombres. El espacio de nombres por defecto http://www.example.com/fnord/ se aplica al elemento libro, al elemento capítulo, al elemento título correspondiente y, por supuesto, al propio documento.

Los elementos book:author y book:title pertenecen al espacio de nombres con la URI http://www.example.com/fnord/book/.

Los dos atributos book:author title y name no tienen asignado ningún espacio de nombres XML. Sólo son miembros del espacio de nombres "tradicional" del elemento book:author, lo que significa que, por ejemplo, dos atributos title en book:author están prohibidos.

En el ejemplo anterior eludimos la última regla añadiendo un atributo title del espacio de nombres http://www.example.com/fnord/ a book:author: el fnord: title procede del espacio de nombres con el prefijo fnord que se declara en el elemento book:author.

Es evidente que el espacio de nombres fnord tiene el mismo URI de espacio de nombres que el espacio de nombres por defecto. Entonces, ¿por qué no utilizamos simplemente el espacio de nombres por defecto que ya habíamos declarado? La respuesta es bastante compleja:

  • los atributos sin prefijo no pertenecen a ningún espacio de nombres XML, ni siquiera al espacio de nombres por defecto;
  • además, omitir el prefijo provocaría un conflicto título-título;
  • escribirlo como xmlns:title declararía un nuevo espacio de nombres con el prefijo title en lugar de aplicar el espacio de nombres xmlns por defecto.

Con las clases Qt XML se puede acceder a los elementos y atributos de dos formas: bien haciendo referencia a sus nombres cualificados, compuestos por el prefijo del espacio de nombres y el nombre "real" (o nombre local ), o bien mediante la combinación de nombre local y URI del espacio de nombres.

Encontrará más información sobre los espacios de nombres XML en http://www.w3.org/TR/REC-xml-names/.

Convenciones utilizadas en la documentación de Qt XML

Los siguientes términos se utilizan para distinguir las partes de los nombres en el contexto de los espacios de nombres:

  • El nombre cualificado es el nombre tal y como aparece en el documento. (En el ejemplo anterior book:title es un nombre cualificado).
  • Un prefijo de espacio de nombres en un nombre cualificado es la parte a la izquierda del ":".(book es el prefijo de espacio de nombres en book:title.)
  • La parte local de un nombre (también denominada nombre local) aparece a la derecha del ":". (Así, title es la parte local de book:title.)
  • El espacio de nombres URI ("Uniform Resource Identifier") es un identificador único para un espacio de nombres. Se parece a una URL (por ejemplo, http://www.example.com/fnord/ ), pero no requiere que los datos sean accesibles por el protocolo dado en la dirección indicada.

Los elementos sin ":" (como chapter en el ejemplo) no tienen prefijo de espacio de nombres. En este caso, la parte local y el nombre cualificado son idénticos (por ejemplo, chapter).

Véase también Aplicación de marcadores DOM.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.