Saltar al contenido principal

Declaración

Para realizar una validación de un documento XML utilizando un XSD, debemos realizar dos pasos:

  • Crear el XSD y definir la estructura a validar en él.
  • Vincular el XSD creado en el documento XML para que se pueda utilizar para su validación.

Creación del XSD

La creación de un XSD también se conoce como la creación de un esquema. Los elementos XML que se utilizan para generar un esquema han de pertenecer al namespace XML Schema, el cual establece el prefijo xs: para todos ellos.

Un fichero XSD base tiene la siguiente estructura:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- El resto de elementos -->
</xs:schema>
Declaración XML

Tanto en el documento XML como en el documento XSD, opcionalmente, podemos incluir la declaración XML:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- El resto de elementos -->
</xs:schema>

En los ejemplos omitiremos la declaración XML por claridad, pero es recomendable incluirla.

El elemento schema siempre será el elemento raíz y contiene declaraciones para todos los elementos y atributos que puedan aparecer en un documento XML que deseemos validar. Además, tendrá definido el atributo xmlns:xs con la URL al namespace de XML Schema.

Algunos elementos hijos posibles son:

  • element
  • attribute
  • simpleType
  • complexType
  • group
  • attributeGroup

Cada uno de estos elementos de XML Schema tiene una función específica en la definición de los tipos de datos y las restricciones de un documento XML.

Vincular el XSD en el documento XML

Una vez creado el documento XSD, debemos indicar en el documento XML que queremos validarlo siguiente el XSD definido. Para ello, debemos añadir unos atributos en el elemento raíz del documento XML:

<raiz 
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="esquema.xsd">
<!-- ... -->
</raiz>

Donde:

  • El atributo xmlns:xs tiene siempre el valor http://www.w3.org/2001/XMLSchema-instance. Es la definición de un namespace, el cual se utiliza para indicar que el documento está siendo validado contra un esquema XSD. El sufijo xs puede ser otro diferente, pero tenemos que utilizar siempre el mismo.
  • El atributo xs:noNamespaceSchemaLocation referencia al fichero XSD donde se encuentra el esquema. En este caso, el archivo es esquema.xsd, el cual se debe encontrar en el mismo directorio que el documento XML. Se está utilizando el prefijo xs:, que forma parte del namespace definido en el atributo anterior. Es decir, se está definiendo un atributo noNamespaceSchemaLocation que forma parte del espacio de nombres xs.
URL de XML Schema

Algunas aplicaciones no validan correctamente los documentos XML si indicamos las URLs en su versión HTTPS. Es decir, debemos evitar las siguientes URLs:

https://www.w3.org/2001/XMLSchema
https://www.w3.org/2001/XMLSchema-instance

En su lugar, utilizamos las siguientes:

http://www.w3.org/2001/XMLSchema
http://www.w3.org/2001/XMLSchema-instance
Creación de un espacio de nombres

Los espacios de nombres se indican en el elemento raíz de un documento XML utilizando el prefijo xlmns: (XML Namespace). A continuación del prefijo, se indica un nombre para el namespace. El valor del atributo es una URL que permite identificarlos de forma única.

Para utilizar el espacio de nombres, únicamente tenemos que añadir como prefijo el nombre elegido para el namespace a un elemento o atributo.

<cartas 
xmlns:baraja="https://www.lmsgi.com/baraja"
xmlns:restaurante="https://www.lmsgi.com/restaurante">
<baraja:carta></baraja:carta>
<restaurante:carta></restaurante:carta>
</cartas>

Consideremos el siguiente documento XML:

alumna.xml
<alumna 
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="alumna.xsd">
Olga Velarde Cobo
</alumna>

Un XML Schema que valida el documento anterior sería:

alumna.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="alumna" type="xs:string"/>
</xs:schema>

El XSD anterior contiene un elemento <xs:element>. Este elemento indica que el documento XML debe tener un elemento con nombre alumna y que su contenido es una cadena de caracteres.