XML: características y estructura
Table of Contents
XML es el lenguaje de marcas más conocido y completo, siendo un acrónimo de eXtensible Markup Language, traducido como Lenguaje de Marcado Extensible o Lenguaje de Marcas Extensible, se define como un metalenguaje que permite definir lenguajes de marcas, desarrollado por la W3C (World Wide Web Consortium).
La popularidad de XML se dio gracias a que da soporte a bases de datos, siendo útil cuando varias aplicaciones deben comunicarse entre sí o integrar información.
En este apartado vamos a entrar en los detalles de este reconocidísimo lenguaje de marcas, aunque hoy en día su uso se está viendo desplazado por lenguajes como JSON. No obstante, el estudio de XML sigue siendo muy importante y útil hoy en día, si te quieres dedicar a la programación.
Origen
XML proviene de un lenguaje inventado por IBM en la década de los 70, llamado GML (Generalized Markup Language), que surgió por la necesidad que tenía la empresa de almacenar grandes cantidades de información y compartirla en otros Sistemas Operativos (SO) y plataformas.
Este lenguaje gustó a la ISO, por lo que en 1986 trabajaron para normalizarlo, creando SGML (Standard Generalized Markup Language), capaz de adaptarse a un gran abanico de problemas.
En 1991 se produjo uno de los eventos más destacados en la historia de la informática, Tim Berners-Lee, define en el CERN para el intercambio de información entre científicos el lenguaje HTML basándose en SGML. El problema era que asegurar que las páginas web cumplieran todas las reglas del estándar SGML requería una capacidad de cómputo superior a la de los equipos y navegadores de la época.
A raíz del éxito de HTML la organización W3C crea en 1996 un grupo de trabajo para simplificar la complejidad de SGML, a esta simplificación se le denominó XML, apareciendo la primera versión en 1998 (actualmente se encuentra en la versión 1.1). Las características de esta adaptación son:
- Posibilidad de definición de lenguajes a partir del metalenguaje (XML).
- Creación de analizadores (ver si se ha escrito gramática y sintácticamente de forma correcta un documento) simples, necesitando por tanto poca capacidad de cómputo (comparado con SGML).
- Lenguajes para realizar búsquedas y transformaciones.
Estructura de un documento XML
La tecnología XML busca dar solución al problema de expresar información estructurada de la manera más abstracta y reutilizable posible. Que la información sea estructurada quiere decir que se compone de partes bien definidas, y que esas partes se componen a su vez de otras partes. Entonces se tiene una estructura jerárquica o en árbol que representan la información.
Uno de los ejemplos típicos es el de la factura que vimos al principio de este tema: una factura consta de:
- Un cliente
- Una empresa
- Una serie de productos
Y a su vez cada producto consta de:
- Un nombre
- Un precio
Otro ejemplo es el que podemos ver en la Wikipedia en español, del correo electrónico, que expresado en XML sería tal que así:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Edit_Mensaje SYSTEM "Edit_Mensaje.dtd">
<Edit_Mensaje>
<Mensaje>
<Remitente>
<Nombre>Nombre del remitente</Nombre>
<Mail> Correo del remitente </Mail>
</Remitente>
<Destinatario>
<Nombre>Nombre del destinatario</Nombre>
<Mail>Correo del destinatario</Mail>
</Destinatario>
<Texto>
<Asunto>
Este es mi documento con una estructura muy sencilla
no contiene atributos ni entidades...
</Asunto>
<Parrafo>
Este es mi documento con una estructura muy sencilla
no contiene atributos ni entidades...
</Parrafo>
</Texto>
</Mensaje>
</Edit_Mensaje>
Este XML, representado de forma jerárquica:
Edit_Mensaje (Elemento Raíz)
└── Mensaje
├── Remitente
│ ├── Nombre ──► "Nombre del remitente"
│ └── Mail ────► "Correo del remitente"
├── Destinatario
│ ├── Nombre ──► "Nombre del destinatario"
│ └── Mail ────► "Correo del destinatario"
└── Texto
├── Asunto ──► "Este es mi documento..."
└── Parrafo ─► "Este es mi documento..."
Y, más claramente, en forma de diagrama/gráfico:
En esta representación se pueden percibir varios elementos diferenciales y, es importante, en toda estructura jerárquica o en árbol familiarizarse con las denominaciones, definiciones y conceptos siguientes:
- Nodo: cualquier elemento de ese árbol.
- Nodo raíz: el nodo más alto en la jerarquía.
- Nodo padre: cualquier nodo que tenga debajo de él otros nodos.
- Nodo hijo: cualquier nodo derivado de otro que está justo arriba.
- Nodo hoja: los nodos que no tienen hijos y que son elementos finales de una rama.
Fíjate como el contenido de todo elemento/etiqueta es un nodo hoja.
Introducida la estructura de XML, se abren bastantes incógnitas y elementos de los que hablar y que detallar. En los siguientes apartados los abordamos.
Etiqueta
El elemento base de un documento XML se denomina etiqueta o tag. Las etiquetas tienen la forma básica: <nombre>, donde nombre es el nombre del elemento que se está señalando.
Pero las etiquetas pueden ser más complejas porque podemos encontrar en ellas, aparte del nombre: atributos, contenido y, si hay contenido, también aparece la etiqueta de cierre. Veamos detalladamente las parte de una etiqueta:
- Elemento: a cada etiqueta con su contenido y atributos, se le denomina "elemento".
- Etiqueta de apertura: la etiqueta de apertura empieza por el paréntesis angular de apertura
<seguido del nombre de la etiqueta. Dicha etiqueta puede tener atributos y, siempre, acaba con el paréntesis angular de cierre>. - Atributo: los atributos se encuentran dentro de la etiqueta de apertura y son parejas de clave-valor separadas por el igual
=y, hay que tener presente, que el valor va entre comillas. Se pueden indicar varios atributos separados por un espacio. - Contenido: hay etiquetas que tienen contenido y otras que no.
- Etiqueta de cierre: si una etiqueta tiene contenido entonces, obligatoriamente, debe acabar con la etiqueta de cierre que marca el final del contenido. Esta etiqueta de cierre es como la de apertura pero sin atributos y enmarcado entre
</y>.
A continuación se muestran diferentes tipos y estructuras de etiquetas que podemos encontrar en un documento XML:
Etiqueta estándar con texto (simple): es la estructura más habitual, donde la etiqueta contiene un único valor de texto:
<nombre>Alice</nombre>Etiqueta con atributos: incluye información adicional (atributos) dentro de la etiqueta de apertura mediante parejas clave-valor:
<producto id="P-102" moneda="EUR">Portátil</producto>Etiqueta vacía / de autocierre (*self-closing): si un elemento no tiene contenido (no guarda texto ni otras etiquetas), en lugar de escribir
<foto></foto>, XML permite resumirlo en una sola etiqueta que se cierra a sí misma con/>:<imagen src="logo.png" ancho="100" alto="50" />Etiqueta anidada (elemento contenedor o complejo): no contiene texto directo, sino que incluye otros elementos (etiquetas hijo) dentro. Dicho de otro modo, el contenido son otras etiquetas. Permite construir la jerarquía en árbol:
<cliente activo="true"> <nombre>Juan</nombre> <email>juan@example.com</email> </cliente>Etiqueta con contenido mixto (*mixed content): combina texto libre junto con otras etiquetas anidadas en su interior:
<noticia fecha="2026-08-13"> El módulo de <modulo>Lenguajes de Marcas</modulo> se imparte en el primer curso. </noticia>
Prólogo o cabecera
Además del contenido en sí que comienza con la etiqueta raíz, en un documento XML hay una primera parte que se denomina formalmente prólogo (prolog) y coloquialmente cabecera (header) en la que se añade información variada, como puede ser:
Declaración XML (XML Declaration):
En la primera línea del documento (opcional pero muy recomendada) se especifica la versión de XML en que se encuentra escrito el documento. Se indica la versión y de forma opcional el conjunto de caracteres que puede contener el documento. Normalmente es UTF-8. El formato es:
<?xml version="1.0" encoding="UTF-8"?>
Declaración del tipo de documento (DOCTYPE declaration):
Es donde se enlaza o define la gramática DTD (de la que hablaremos y entraremos a fondo en otro tema).
<!DOCTYPE Edit_Mensaje SYSTEM "Edit_Mensaje.dtd">
Caracteres especiales
En la especificación de XML se utilizan caracteres que si se usan en el contenido o como nombre de los atributos crean ambigüedad y hace que los analizadores devuelven error, por ejemplo ¿qué sucede si el valor de un atributo contiene el símbolo >?
Para solucionar este problema, se definen una serie de caracteres especiales y código asociados para su inclusión en un documento XML.
| Carácter especial | Símbolo | Descripción |
|---|---|---|
< |
< |
Less Than (menor que) |
> |
> |
Greater Than (mayor que) |
& |
& |
Ampersand |
' |
' |
Apostrophe (apóstrofe) |
" |
" |
Quotation mark (comillas) |