Fundamentos de la Verificación Estructural en XML
El lenguaje de marcado extensible (XML) está diseñado para organizar y transportar información, delegando la representación visual a otras capas. Debido a su naturaleza flexible, que permite definir etiquetas personalizadas, es necesario implementar mecanismos de validación que salvaguarden la coherencia sintáctica y semántica según las necesidades de cada sistema. Estos mecanismos se denominan restricciones o esquemas de validación.
Definiciones de Tipo de Documento (DTD)
Los archivos con extensión .dtd establecen reglas básicas para comprobar la jerarquía y el contenido de un documento XML. Su implementación puede realizarse mediante dos estrtaegias:
Inclusión Directa en el Archivo
La declaración de validación se inserta inmediatamente después del prólogo XML y antes de la etiqueta raíz:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT colaborador (codigo, rol, sede)>
<!ELEMENT codigo (#PCDATA)>
<!ELEMENT rol (#PCDATA)>
<!ELEMENT sede (#PCDATA)>
]>
<personal>
<colaborador>
<codigo>C-101</codigo>
<rol>Desarrollador</rol>
<sede>Valencia</sede>
</colaborador>
<colaborador>
<codigo>C-102</codigo>
<rol>Arquitecto</rol>
<sede>Sevilla</sede>
</colaborador>
</personal>
Referencia a Recursos Externos
Se vincula a un archivo .dtd independiente mediante la cláusula SYSTEM (almacenamiento local) o PUBLIC (recurso accesible vía red). La etiqueta que sigue a DOCTYPE debe coincidir exactamente con la raíz del documento:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Alternativa para distribución pública -->
Aunque DTD cumple su función, presenta limitaciones inherentes: imposibilidad de validar tipos de datos específicos, soporte único por archivo y falta de integración con espacios de nombres modernos.
Esquemas XML (XSD)
Para abordar las deficiencias de DTD, el consorcio W3C estandarizó XML Schema (XSD). Este formato utiliza la misma sintaxis XML para describir estructuras, permitiendo la validación estricta de tipos de datos, cardinalidad, secuencia de nodos y atributos.
Un documento XSD requiere la extensión .xsd y debe declarar el espacio de nombres oficial en su elemento principal:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://demo.org/almacen"
elementFormDefault="qualified">
<xs:element name="inventario">
<xs:complexType>
<xs:sequence>
<xs:element name="articulo" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="descripcion" type="xs:string"/>
<xs:element name="proveedor" type="xs:string"/>
<xs:element name="valor" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Para asociar un archivo XML a este esquema, se deben definir atributos de espacio de nombres en la etiqueta raíz. El prefijo xsi hace referencia al vocabulario de instancias de esquema:
<?xml version="1.0" encoding="UTF-8"?>
<inventario xmlns="http://demo.org/almacen"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://demo.org/almacen stock.xsd">
<articulo>
<descripcion>Teclado Mecánico</descripcion>
<proveedor>PeriféricosPlus</proveedor>
<valor>89.50</valor>
</articulo>
</inventario>
El atributo xsi:schemaLocation establece un par clave-valor donde la clave es el espacio de nombres y el valor es la ruta relativa o absoluta al archivo XSD. El analizador de XML utiliza esta información para obtener las reglas de validación. Es imperativo que el prefijo utilizado (como xsi) coincida con la declaración de su espacio de nombres; un desajuste provocará una excepción de prefijo no declarado.
Composición de Múltiples Esquemas
A diferencia del enfoque DTD, XML Schema permite integrar varias definiciones de validación en un único documento. Esta práctica es frecuente en archivos de configuración de entornos empresariales:
<aplicacion xmlns="http://framework.com/nucleo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://framework.com/nucleo base.xsd
http://framework.com/modulos seguridad.xsd">
...
</aplicacion>
En este modelo, la validación se activa mediante la declaración de espacios de nombres y la resolución de rutas especificada en xsi:schemaLocation. El motor de procesamiento recuperará los archivos necesarios (desde caché local o red) y aplicará las restricciones de tipo y estructura correspondientes a cada vocabulario vinculado.