Como definir esquemas y vocabularios en XML
Los formatos XML son estructuras muy útiles y flexibles para la transmisión de información y posterior presentación de esta.
Esta flexibilidad en ocasiones puede producir problemas si la consistencia de los datos que contiene el documento XML no está garantizada.
Para minimizar estos problemas usaremos los esquemas y vocabularios que nos permitirán verificar la consistencia de dichos datos.
En el post de hoy veremos los estándares que pueden usarse para definir estos esquemas.
Objetivos de un esquema y vocabulario en XML
Antes de comentar los estándares que podemos utilizar para definir esquemas y vocabularios en XML conviene que tengamos bien claros los dos objetivos que debe cumplir un esquema XML.
Objetivo 1: Un esquema XML debe servir para publicar cómo se deben construir los documentos XML de forma correcta.
Objetivo 2: El segundo objetivo es que dicho esquema sirva para validar que un documento XML es conforme al esquema que se definió, que los datos siguen el formato definido. Este punto es importante pues no es lo mismo que un XML esté bien formado a que sea válido.
Como vemos el esquema sirve tanto para definir como para validar, ambas funciones son fundamentales.
Estándares de esquemas y vocabularios más usados
Se han intentado definir distintos estándares para la especificación de esquemas XML. Hoy en día sobreviven dos estándares, el DTD y el XSD.
En ambos casos, son ficheros independientes del documento XML. La diferencia entre un estándar y otro es básicamente que los esquemas definidos por XSD usan en su definición XML, mientras que los definidos por DTD no.
Es posiblemente por la flexibilidad que da el XML que cada vez se está imponiendo más el estándar XSD sobre el DTD.
El estándar DTD
El esquema DTD nos perite definir qué elementos pueden aparecer en un documento XML y en qué parte de este. De la misma forma, aplica al contenido y atributos de este.
De esta forma garantizamos que el documento XML cumple con las restricciones impuestas en el DTD.
Aunque hemos mencionado que normalmente se utiliza un fichero DTD independiente del fichero XML, es posible que la definición de este esquema esté dentro del propio XML. Para ello, se ubicará entre corchetes. Pese a ser una opción de definición válida pues permite especificar la estructura del documento, los elementos que pueden contener el XML y el anidamiento de etiquetas, este estándar tiene una serie de limitaciones que conviene mencionar.
Las limitaciones principales son:
Su sintaxis no es XML.
No soportan espacios de nombres.
No definen tipos para los datos. Solo hay un tipo de elementos terminales, que son los datos textuales.
No permite las secuencias no ordenadas.
No es posible formar claves a partir de varios atributos o elementos.
Una vez que se define un DTD no es posible añadir nuevos vocabularios.
Este conjunto de limitaciones propició la aparición de un nuevo estándar cada vez utilizado, el XSD o XML Schema.
El estándar XSD o XML Schema
El estándar XML Schema surge para paliar las limitaciones del estándar DTD y dotar a la definición de esquemas de mayor control.
Por ejemplo, permite definir cuando los valores de los elementos y atributos de los ficheros XML han de corresponder a datos de un tipo determinado, o cumplir determinadas restricciones que no pueden reflejarse en los DTD.
Otra ventaja es que se definen en ficheros XML y permite manejar gran variedad de tipos de datos de forma que se puede controlar mejor el dato en el fichero XML.
Como componente fundamental de este tipo de esquemas está el elemento, determinado por xs:element en el archivo XSD. Mediante esta definición, de declararán todos los elementos válidos de un documento XML.
Además, el orden de la definición determina también el orden en que estos elementos deben aparecer en el fichero XML.
Otro componente necesario son los atributos, determinado por xs:attribute. Este componente permite declarar los atributos de los elementos del documento XML. A diferencia de los elementos, los atributos pueden aparecer en cualquier orden y no pueden incluir otros elementos. No obstante, su característica más interesante es que pueden ser opcionales y se les puede asignar un valor por defecto.
Para establecer restricciones se usarán las facetas con el tag xs:restriction. Las facetas solo pueden aplicarse sobre tipos simple. Se expresan como un elemento dentro de una restricción y se pueden combinar para lograr restringir más el valor del elemento.
Para entender con mayor precisión la definición de esquemas, es necesario previamente tener conocimientos de XML. El post de hoy no busca ser un tutorial de cómo definir esquemas y vocabularios ya que para ello deberíamos extendernos en demasía.
El objetivo es conocer qué son los esquemas y qué estándares se deben o pueden utilizar haciendo hincapié en las características principales de estos estándares.
El lector puede, a partir de esta lectura, ampliar su conocimiento con multitud de ejemplos y tutoriales que pueden encontrarse en Internet.
Lo importante del post de hoy es saber que para poder garantizar la validez de un documento XML, deberemos usar esquemas y vocabularios, ya que la correcta estructura de un XML solo nos garantiza que está bien formado, pero no que sea válido.
Curso relacionado: Desarrollo de aplicaciones multiplataforma
Escrito por Carlos Yañez