Validación de XML con XSD

1. ¿Qué significa validar un XML con XSD?

La validación es el proceso de comprobar que un documento XML:

  • Está bien formado (cumple las reglas de sintaxis XML).
  • Además, cumple con las reglas definidas en un XML Schema (XSD).

La gran diferencia con DTD es que XSD permite definir tipos de datos, restricciones y estructuras más complejas.

2. Pasos básicos para validar un XML con XSD

  1. Crear el archivo XSD que defina las reglas.
  2. Crear el archivo XML con los datos.
  3. Indicar en el XML qué esquema usar (xsi:noNamespaceSchemaLocation).
  4. Usar un editor o una herramienta de validación para comprobar que el XML es válido.

3. Ejemplo básico

Archivo persona.xsd

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="persona">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="nombre" type="xs:string"/>
        <xs:element name="apellido" type="xs:string"/>
        <xs:element name="edad" type="xs:integer"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>

Archivo persona.xml válido

<?xml version="1.0" encoding="UTF-8"?>
<persona xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="persona.xsd">
    <nombre>Laura</nombre>
    <apellido>Pérez</apellido>
    <edad>30</edad>
</persona>

Aquí:

  • xmlns:xsi habilita el uso de atributos de esquema.
  • xsi:noNamespaceSchemaLocation="persona.xsd" indica qué archivo XSD usar.

Archivo persona.xml inválido

<?xml version="1.0" encoding="UTF-8"?>
<persona xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="persona.xsd">
    <nombre>Laura</nombre>
    <apellido>Pérez</apellido>
    <edad>treinta</edad>
</persona>

Este XML es bien formado pero no válido, porque el XSD exige que <edad> sea un número entero (xs:integer).

4. Validación en herramientas

a) Editores de texto

b) Validadores online

Permiten cargar el XML y el XSD para comprobar si es válido.

c) Validación en consola con xmllint

Si tenés instalado xmllint (Linux, Mac o Windows con Cygwin), podés validar así:

xmllint --noout --schema persona.xsd persona.xml
  • --schema: indica el archivo XSD.
  • --noout: evita que imprima el XML completo.

Si es válido, no muestra nada. Si es inválido, muestra los errores.

Ejemplo de error detectado:

persona.xml:7: element edad: Schemas validity error : Element 'edad': 'treinta' is not a valid value of the atomic type 'xs:integer'.

5. Ejemplo con restricciones

Archivo empleado.xsd

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="empleado">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="nombre" type="xs:string"/>
        <xs:element name="edad">
          <xs:simpleType>
            <xs:restriction base="xs:integer">
              <xs:minInclusive value="18"/>
              <xs:maxInclusive value="65"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <xs:element name="estadoCivil">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="soltero"/>
              <xs:enumeration value="casado"/>
              <xs:enumeration value="divorciado"/>
              <xs:enumeration value="viudo"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>

Archivo empleado.xml válido

<empleado xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation="empleado.xsd">
    <nombre>Ana</nombre>
    <edad>35</edad>
    <estadoCivil>casado</estadoCivil>
</empleado>

Archivo empleado.xml inválido

<empleado>
    <nombre>Ana</nombre>
    <edad>70</edad> <!-- Error: fuera de rango 18-65 -->
    <estadoCivil>union libre</estadoCivil> <!-- Error: no permitido -->
</empleado>

6. Buenas prácticas en validación con XSD

  • Siempre usar UTF-8 para evitar problemas de codificación.
  • Declarar explícitamente el XSD en el XML (xsi:noNamespaceSchemaLocation).
  • Usar validadores durante el desarrollo para evitar inconsistencias.
  • Documentar las restricciones en el XSD para que otros desarrolladores entiendan las reglas.

7. Resumen didáctico

  • La validación con XSD garantiza que los datos XML cumplan reglas estrictas de tipo, formato y estructura.
  • Se hace enlazando el XML con un .xsd.
  • Herramientas: editores (VS Code, Eclipse), validadores online y consola (xmllint).
  • Diferencia clave con DTD: XSD permite tipos de datos avanzados y restricciones precisas.