Documentos XML bien formados y válidos

7. Documentos XML bien formados y válidos
Los documentos XML bien formados y válidos son elementos fundamentales en el mundo de la programación y la gestión de datos. Veamos cuáles son sus características.
7.1. Documentos XML bien formados
En XML, un documento bien formado (well-formed document) es aquel que sigue las reglas de sintaxis y estructura del lenguaje XML. A lo largo del tutorial se han explicado las características que deben tener los documentos XML, veamos los requisitos más importantes:
- Declaración XML (XML declaration): El documento debe comenzar con una declaración XML que indique la versión de XML utilizada y la codificación de caracteres, por ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
. - Elemento raíz único (single root element): El documento debe tener un elemento raíz único que englobe a todos los demás elementos. Este elemento raíz debe abrirse y cerrarse correctamente, es decir, debe tener una etiqueta de apertura y una etiqueta de cierre.
- Etiquetas de apertura y cierre (opening and closing tags): Todas las etiquetas de apertura deben tener su correspondiente etiqueta de cierre, y deben estar anidadas correctamente. Por ejemplo:
<etiqueta>contenido</etiqueta>
. - Atributos entre comillas (quoted attributes): Si un elemento tiene atributos, los valores de los atributos deben estar entre comillas, tanto comillas simples (») como comillas dobles («») son aceptadas.
- Entidades de caracteres (character entities): Los caracteres especiales como
<
,>
,&
,'
y"
deben ser reemplazados por entidades de caracteres correspondientes. Por ejemplo,<
se reemplaza por<
,>
por>
,&
por&
, entre otros. - Comentarios (comments): Se pueden incluir comentarios dentro del documento XML utilizando la sintaxis
<!-- comentario -->
. Los comentarios no deben interferir con la estructura del documento. - Espacios en blanco (blank spaces): Los espacios en blanco, como tabulaciones, espacios y saltos de línea, se consideran insignificantes en XML, a menos que estén dentro del contenido de un elemento que se defina como tipo «mixed» en un esquema XML.
- Elementos vacíos (empty elements): Si un elemento no tiene contenido, debe utilizarse la forma abreviada de etiqueta de cierre. Por ejemplo:
<elemento/>
en lugar de<elemento></elemento>
. - Anidamiento adecuado (proper nesting): Los elementos deben estar anidados de manera adecuada, es decir, un elemento no puede abrirse dentro de otro elemento y cerrarse fuera de él.
7.2. Documentos XML válidos
Un documento válido (valid document) es aquel que además de estar bien formado, cumple con un conjunto de reglas adicionales definidas en un DTD (Document Type Definition, Definición de Tipo de Documento) o en un esquema XML (XSD). Aquí tienes un ejemplo de un documento XML bien formado y válido:
<?xml version="1.0" encoding="UTF-8"?> <libreria xmlns="http://www.example.com/libreria" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/libreria libreria.xsd"> <libro> <titulo>El Gran Gatsby</titulo> <autor>F. Scott Fitzgerald</autor> <anio>1925</anio> </libro> <libro> <titulo>1984</titulo> <autor>George Orwell</autor> <anio>1949</anio> </libro> </libreria>
En este ejemplo, el documento XML está bien formado porque cumple con las reglas de sintaxis, como el uso de etiquetas de apertura y cierre, el uso de comillas para delimitar los valores de atributos y el uso de entidades para los caracteres especiales.
Además, el documento es válido si se valida contra un esquema XML llamado «libreria.xsd» que define la estructura y restricciones para los elementos y atributos del documento. La declaración del espacio de nombres, xmlns, y la referencia al esquema en el atributo xsi:schemaLocation son utilizados para asociar el documento con el esquema y validar su conformidad.
Es importante mencionar que los detalles exactos de un documento válido dependerán del esquema o DTD específico utilizado y las reglas definidas en él.
Comprueba tu aprendizaje
Corrige el siguiente documento XML para que esté bien formado:
<?xml version="1.0" encoding="UTF-8" <catalogo> <producto> <nombre>Camisa de manga corta</nombre> <precio moneda="euros">19.99<precio> <disponible>true</disponible> <producto> <producto> <nombre>Pantalón vaquero</nombre> <precio moneda="euros" moneda="dolar">29.99</precio> <disponible>false</disponible> </producto> <producto> <nombre moneda="euros">Zapatos de cuero</nombre> <precio>79.99</precio> <disponible>true</disponible> </producto> </catalogo>
Correcciones realizadas:
- Se cerró la etiqueta de declaración XML.
- Se cerró la etiqueta de cierre
</precio>
en la primera entrada de producto. - Se corrigió la etiqueta de apertura
<producto>
que no estaba cerrada en la segunda entrada. - Se eliminó el atributo repetido moneda, debe ser único en cada elemento.
- Se agregó la etiqueta de cierre
</producto>
al final de la segunda entrada de producto.
El documento corregido queda de la siguiente manera:
<?xml version="1.0" encoding="UTF-8"?> <catalogo> <producto> <nombre>Camisa de manga corta</nombre> <precio moneda="euros">19.99</precio> <disponible>true</disponible> </producto> <producto> <nombre>Pantalón vaquero</nombre> <precio moneda="dolar">29.99</precio> <disponible>false</disponible> </producto> <producto> <nombre>Zapatos de cuero</nombre> <precio moneda="euros">79.99</precio> <disponible>true</disponible> </producto> </catalogo>
Ahora el documento XML está bien formado y listo para ser procesado correctamente.
Veamos ahora los espacios de nombres en XML y cómo nos permiten organizar y distinguir elementos con el mismo nombre en diferentes contextos.