Validador XML
Validar XML contra esquema
La validación XML verifica si un documento está bien formado (sintaxis correcta) y opcionalmente es válido (conforme a un esquema). Estar bien formado es obligatorio, ser válido es opcional.
¿Qué es la validación XML?
La validación XML es el proceso de verificar un documento XML contra dos niveles de corrección: buena formación y validez.
La buena formación es el requisito básico. Un documento XML bien formado sigue las reglas de sintaxis definidas por la especificación XML 1.0: cada etiqueta de apertura tiene una etiqueta de cierre coincidente, los elementos están correctamente anidados, los valores de atributos están entre comillas y el documento tiene exactamente un elemento raíz. Si un documento no está bien formado, los analizadores XML lo rechazarán directamente.
La validez es una verificación opcional y más estricta. Un documento XML válido está bien formado y se ajusta a un esquema — una definición formal de qué elementos, atributos y tipos de datos están permitidos y en qué orden. Los esquemas se definen usando XSD (XML Schema Definition), DTD (Document Type Definition) o RelaxNG.
Bien formado vs Válido
Comprender la distinción entre estos dos niveles es fundamental para trabajar con XML:
| Verificación | Alcance | ¿Obligatorio? | Definido por |
|---|---|---|---|
| Bien formado | Reglas de sintaxis | Siempre | Especificación XML 1.0 |
| Válido | Estructura + tipos de datos | Opcional | Esquema XSD, DTD o RelaxNG |
Un documento puede estar bien formado sin ser válido. Por ejemplo, un archivo XML bien formado podría tener la sintaxis correcta pero contener un elemento que el esquema no permite. Sin embargo, un documento no puede ser válido sin estar bien formado — la corrección sintáctica es un prerequisito.
Reglas de buena formación
La especificación XML 1.0 requiere:
- Elemento raíz único: El documento debe tener exactamente un elemento de nivel superior que envuelva todo el contenido.
- Etiquetas coincidentes: Cada etiqueta de apertura (
<element>) debe tener una etiqueta de cierre correspondiente (</element>), o ser auto-cerrada (<element />). - Anidamiento correcto: Los elementos deben estar correctamente anidados —
<a><b></b></a>es válido,<a><b></a></b>no lo es. - Atributos entre comillas: Todos los valores de atributos deben estar encerrados entre comillas simples o dobles (
id="1"oid='1'). - Caracteres especiales escapados: Los caracteres como
<,>,&,'y"deben ser escapados en el contenido de texto (<,>,&,',"). - Declaración XML válida: Si está presente, la declaración
<?xml ?>debe ser lo primero en el documento.
Errores comunes de XML
| Error | Ejemplo | Solución |
|---|---|---|
| Etiquetas no coincidentes | <name>Alice</Name> | XML distingue mayúsculas: <name> debe cerrarse con </name> |
| Ampersand sin escapar | <text>Tom & Jerry</text> | Usa &: <text>Tom & Jerry</text> |
| Comillas faltantes en atributo | <item id=5> | Pon comillas al valor: <item id="5"> |
| Múltiples elementos raíz | <a/><b/> | Envuelve en un único raíz: <root><a/><b/></root> |
| Etiqueta sin cerrar | <br> | Auto-cierre: <br /> (XML no es HTML) |
| Caracteres inválidos | Caracteres de control (0x00-0x08) | Elimínalos o codifícalos |
El error más frecuente para desarrolladores que vienen de HTML es olvidar que XML distingue mayúsculas y minúsculas y es estricto. En HTML, <BR>, <br> y <Br> son lo mismo. En XML, son tres elementos diferentes.
Validación XSD
XSD (XML Schema Definition) es el lenguaje de esquema más utilizado para XML. Un archivo XSD define:
- Qué elementos y atributos están permitidos
- El tipo de datos de cada elemento (string, integer, date, decimal, etc.)
- La cardinalidad (cuántas veces puede aparecer un elemento)
- El orden en que deben aparecer los elementos hijo
- Valores predeterminados y fijos
- Restricciones de enumeración (valores permitidos)
Cuando un documento XML se valida contra un XSD, el validador verifica cada elemento y atributo contra las reglas del esquema. Si se viola alguna regla, el validador reporta el error específico con su ubicación en el documento.
La validación XSD es crítica en sistemas empresariales donde los mensajes XML deben cumplir estándares estrictos — como ISO 20022 para mensajería financiera, HL7 para salud, o UBL para facturación electrónica.
Casos de uso comunes
- Validación de mensajes API: Los servicios web SOAP validan mensajes XML entrantes y salientes contra esquemas WSDL/XSD para asegurar el cumplimiento del contrato
- Mensajería financiera: Los mensajes ISO 20022 (pacs, pain, camt) se validan contra esquemas XSD publicados antes de ser enviados a las redes de pagos
- Archivos de configuración: Los servidores de aplicaciones (Tomcat, Spring, JBoss) validan archivos de configuración XML contra sus DTDs o XSDs al iniciar
- Importación/exportación de datos: Los pipelines ETL validan feeds de datos XML contra esquemas antes de procesarlos para detectar errores de formato tempranamente
- Estándares de documentos: SVG, XHTML, RSS, Atom y EPUB pueden validarse contra sus esquemas respectivos para asegurar conformidad
- Cumplimiento regulatorio: Las agencias gubernamentales y organismos industriales requieren que las presentaciones XML (declaraciones fiscales, registros de salud, declaraciones aduaneras) pasen la validación de esquema
Prueba estos ejemplos
Un documento XML bien formado con una declaración XML correcta, un único elemento raíz (<book>), elementos hijo correctamente anidados y etiquetas de apertura/cierre coincidentes.
<?xml version="1.0" encoding="UTF-8"?>
<book>
<title>The Great Gatsby</title>
<author>F. Scott Fitzgerald</author>
<year>1925</year>
</book> Inválido porque la etiqueta de apertura <author> no coincide con la etiqueta de cierre </autor> (error tipográfico: 'autor' en lugar de 'author'). Los analizadores XML rechazarán este documento completamente ante el primer error de buena formación.
<?xml version="1.0"?>
<book>
<title>The Great Gatsby</title>
<author>F. Scott Fitzgerald</autor>
</book> Un documento XML bien formado con un esquema XSD correspondiente. El esquema define un elemento <product> que contiene <name> (cadena), <price> (decimal) y <quantity> (entero) en secuencia estricta. El XML cumple con todas las restricciones de tipo y estructura.
<?xml version="1.0" encoding="UTF-8"?>
<product>
<name>Laptop Pro 15</name>
<price>1299.99</price>
<quantity>50</quantity>
</product> El XML está bien formado (sintaxis válida), pero viola el esquema XSD de dos formas: <price> contiene 'not-a-number' en lugar de un valor decimal, y <color> no está definido en el esquema mientras que el elemento requerido <quantity> está ausente.
<?xml version="1.0" encoding="UTF-8"?>
<product>
<name>Laptop Pro 15</name>
<price>not-a-number</price>
<color>Silver</color>
</product>