XML Schema Definition (XSD) es un lenguaje que se utiliza para definir la estructura, el contenido y, hasta cierto punto, la semántica de los documentos XML. Los esquemas XSD permiten especificar qué elementos y atributos pueden aparecer en un documento XML, en qué combinaciones, con qué estructura, y con qué tipos de datos. En esencia, un XSD actúa como un contrato para los documentos XML, asegurando que sigan un formato específico y contengan datos válidos según las reglas definidas.
Tipos de Datos: A diferencia de DTD (Document Type Definition), XSD soporta tipos de datos primitivos como int, string, date, etc., y también permite crear tipos complejos personalizados. Esto proporciona una validación más precisa y un control más estricto sobre el contenido de los elementos y atributos en un documento XML.
Espacios de Nombres (Namespaces): XSD utiliza espacios de nombres para evitar conflictos de nombres y para permitir la definición de esquemas en diferentes contextos sin ambigüedad.
Validación: Los esquemas XSD son utilizados por los procesadores XML para validar documentos XML, asegurando que los datos que contienen siguen las reglas especificadas en el esquema. Esto es crucial en aplicaciones empresariales donde la precisión de los datos es fundamental.
Herencia y Polimorfismo: XSD permite la herencia entre tipos complejos, lo que significa que puedes definir un tipo base y luego extenderlo o restringirlo para crear nuevos tipos. Esto facilita la reutilización y la organización lógica de las definiciones de esquema.
Riqueza Expresiva: XSD ofrece una riqueza expresiva superior a la de DTD, incluyendo restricciones sobre el número de veces que un elemento puede aparecer, especificaciones de secuencia y elección para los elementos, y restricciones sobre los valores de los elementos y atributos.
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="nota">
<xs:complexType>
<xs:sequence>
<xs:element name="para" type="xs:string"/>
<xs:element name="de" type="xs:string"/>
<xs:element name="asunto" type="xs:string"/>
<xs:element name="mensaje" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Este esquema define un documento XML simple que podría contener un mensaje de nota, con elementos para el destinatario (para), el remitente (de), el asunto (asunto) y el cuerpo del mensaje (mensaje). Cada uno de estos elementos se espera que contenga texto (xs:string).
XSD es una herramienta poderosa para definir las reglas y estructuras que deben seguir los documentos XML. Proporciona una forma detallada y precisa de especificar cómo deben ser los datos, asegurando que los documentos XML sean válidos y consistentes. Esto es especialmente importante en entornos donde los datos se intercambian entre sistemas y aplicaciones, permitiendo una interoperabilidad efectiva.
Para enlazar o validar un documento XML con un esquema XML Schema (XSD), debes seguir estos pasos básicos:
Para que un documento XML sea validado con un XSD, primero debes asegurarte de que el XML referencia correctamente al esquema XSD. Esto se hace incluyendo el atributo xmlns:xsi y xsi:schemaLocation o xsi:noNamespaceSchemaLocation (si el esquema no utiliza un espacio de nombres) en el elemento raíz del documento XML.
Con Espacio de Nombres:
xml
<?xml version="1.0" encoding="UTF-8"?>
<miElementoRaiz xmlns="http://www.ejemplo.com/miespacio"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ejemplo.com/miespacio miesquema.xsd">
<!-- Contenido del XML aquí -->
</miElementoRaiz>
xmlns define el espacio de nombres del documento XML.
xmlns:xsi declara el espacio de nombres XSI que es necesario para usar xsi:schemaLocation.
xsi:schemaLocation asocia el espacio de nombres del XML con la ubicación del XSD. Debe incluir un par de valores: el espacio de nombres y la ubicación del XSD, separados por un espacio.
Si tu XML no utiliza un espacio de nombres, puedes usar xsi:noNamespaceSchemaLocation para especificar directamente la ubicación del XSD.
<?xml version="1.0" encoding="UTF-8"?>
<miElementoRaiz xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="miesquema.xsd">
<!-- Contenido del XML aquí -->
</miElementoRaiz>
Para poder realizar una validación online es posible utilizar el siguiente validador on-line:
https://www.liquid-technologies.com/online-xsd-validator