UP | HOME

XML: validez y espacios de nombre

Table of Contents

Documentos XML bien formados

Los documentos denominados como bien formados son aquellos que cumplen con todas las definiciones básicas de formato y pueden, por lo tanto, analizarse correctamente por cualquier analizador sintáctico (parser) que cumpla con la norma. Recordemos las normas básicas e importantes:

  • Los documentos XML solamente permiten un elemento raíz del que todos los demás sean parte, es decir, solo pueden tener un elemento inicial.
  • Los documentos han de seguir una estructura estrictamente jerárquica con lo que respecta a las etiquetas que delimitan sus elementos.
  • Los elementos con contenido deben estar correctamente cerrados.
  • Una etiqueta debe estar correctamente incluida en otra, es decir, las etiquetas deben estar correctamente anidadas.
  • Los valores de los atributos en XML siempre deben estar encerrados entre comillas simples o dobles.
  • El XML es sensible a mayúsculas y minúsculas.
  • Existe un conjunto de caracteres llamados espacios en blanco (espacios, tabuladores, retornos de carro, saltos de línea) que los procesadores XML tratan de forma diferente en el marcado XML.

Ejemplos de documentos mal formados

Ejemplo 1: varios elementos raíz

Motivo: un documento XML válido debe tener un único elemento raíz que contenga a todos los demás. Para corregirlo, ambos deberían estar dentro de un elemento contenedor como <datos>...</datos>.

<cliente>
    <nombre>Alice</nombre>
</cliente>
<empresa>
    <razon_social>ACME S.A.</razon_social>
</empresa>

Ejemplo 2: solapamiento o mal anidamiento de etiquetas

Motivo: las etiquetas deben seguir un orden LIFO (Last In, First Out). La última etiqueta en abrirse debe ser la primera en cerrarse (en este caso, <email> debió cerrarse antes que <contacto>).

<contacto>
    <email>alice@example.com</contacto>
</email>

Ejemplo 3: etiqueta sin cerrar o error de cierre

Motivo: en XML todos los elementos con contenido deben cerrarse obligatoriamente y <precio> no se ha cerrado la etiqueta de cierre </precio>.

<producto>
    <nombre>Teclado Mecánico</nombre>
    <precio>49.99
</producto>

Ejemplo 4: valor de atributo sin comillas

Motivo: en XML es una regla sintáctica estricta que todos los valores de los atributos vayan encerrados entre comillas dobles o simples y, como se ve, el valor del atributo id no lo cumple.

<usuario id=104 activo="true">
    <nombre>Bob</nombre>
</usuario>

Ejemplo 5: discrepancia de mayúsculas y minúsculas (case sensitivity)

Motivo: XML es estrictamente sensible a mayúsculas y minúsculas. <modulo> y </Modulo> son consideradas etiquetas totalmente distintas, por lo que el parser considera que el elemento no se ha cerrado.

<modulo>
    <nombre>Lenguajes de Marcas</nombre>
</Modulo>

Ejemplo 6: caracteres especiales no escapados dentro del contenido

Motivo: el carácter < está reservado en XML para iniciar etiquetas. Para usarlo como contenido de texto debe usarse la entidad predefinida &lt; (5 &lt; 10).

<comparativa>
    <resultado> 5 < 10 </resultado>
</comparativa>

Documento XML válido (validez)

Que un documento esté "bien formado" solamente se refiere a su estructura sintáctica básica, es decir, que se componga de elementos, atributos y comentarios como XML especifica que se escriban. Ahora bien, cada aplicación de XML, es decir, cada lenguaje definido con esta tecnología, necesitará especificar cuál es exactamente la relación que debe verificarse entre los distintos elementos presentes en el documento.

Esta relación entre elementos se especifica en un documento externo o definición (expresada como DTD o como XML Schema). Crear una definición equivale a crear un nuevo lenguaje de marcado, para una aplicación específica.

Los DTD y XML Schema los estudiaremos más adelante, en otro tema. Así pues, de momento, no te preocupes por los detalles de estas tecnologías.

En estos DTD o XML Schema se indican los elementos permitidos, los atributos válidos y cómo se relacionan los diferentes elementos. Piensa en el formato SVG que permite definir imágenes vectoriales en un documento XML: evidentemente no todo elemento es válido y se establecerán de alguna forma los elementos permitidos (a través de los DTC y XML Schema).

Espacios de nombres

Los espacios de nombres en XML (XML namespaces) son una forma de evitar conflictos de nombres cuando se usan elementos o atributos de diferentes vocabularios XML en un mismo documento. Sirven para distinguir entre elementos o atributos que pueden tener el mismo nombre pero significados diferentes.

Cuando se combinan vocabularios o esquemas XML de distintas fuentes, pueden surgir conflictos de nombres. Por ejemplo, en un mismo documento puedes tener elementos llamados <title>, uno que pertenezca a un esquema que describe libros y otro que describa películas. Sin un mecanismo para distinguir entre estos usos, XML no podría diferenciarlos.

En este ejemplo, sacado de la Wikipedia en español, se muestra claramente la necesidad de los espacios de nombre: se hace referencia un elemento cliente y a un elemento producto y, en ambos casos, se tiene presente un elemento hijo llamado numero_ID. Con los espacios de nombre somos capaces de romper la ambigüedad (los diferenciamos):

<?xml version="1.0"?>
<cli:cliente xmlns:cli='http://es.wikipedia.org/wiki/Espacio_de_nombres_XML/cliente'
             xmlns:ped='http://es.wikipedia.org/wiki/Espacio_de_nombres_XML/pedido'>
    <cli:numero_ID>1232654</cli:numero_ID>
    <cli:nombre>Fulanito de Tal</cli:nombre>
    <cli:telefono>99999999</cli:telefono>
    <ped:pedido>
        <ped:numero_ID>6523213</ped:numero_ID>
        <ped:articulo>Caja de herramientas</ped:articulo>
        <ped:precio>187,91</ped:precio>
    </ped:pedido>
</cli:cliente>

Un espacio de nombres se declara usando el atributo XML reservado xmlns, cuyo valor debe ser un identificador uniforme de recurso (URI). Por ejemplo:

xmlns="http://www.w3.org/1999/xhtml"

Un espacio de nombres es simplemente una URI (Uniform Resource Identifier), que actúa como identificador único para un conjunto de nombres. Aunque las URIs en espacios de nombres parecen URLs, no tienen que apuntar a un recurso específico en la web, solo actúan como identificadores. El hecho de usar una URL (tal como "http://www.w3.org/1999/xhtml") para identificar un espacio de nombres, en lugar de una simple cadena (como "xhtml"), reduce la posibilidad de que diferentes espacios de nombres usen identificadores iguales. Los identificadores de los espacios de nombres no necesitan seguir las convenciones de las direcciones de Internet, aunque a menudo lo hagan.

El alcance de la declaración de un prefijo de espacio de nombres comprende desde la etiqueta de inicio de un elemento XML, en la que se declara, hasta la etiqueta final de dicho elemento XML. En las etiquetas vacías, correspondientes a elementos sin "hijos", el alcance es la propia etiqueta.

Author: Román Ginés Martínez Ferrández

Created: 2026-09-23 mié 15:57

Validate