Val or añadid o Danys oft | www.d any sof t.com 1
Estudio de un caso
Análisis de esquemas XML [2]
Dirigido a: Administradores de Bases de Datos | Área: Bases de Datos Autor: Pablo F. Dueñas | Servicios Profesionales Danysoft
Resumen
En nuestro anterior artículo vimos la importancia de los esquemas dentro de las definiciones XML. Comenzamos con la introducción de qué es un esquema y nos pusimos manos a la obra con un caso real. Para mejorar la comprensión de dicho esquema nos guiamos por una de las herramientas líderes del mercado: XMLSpy. Nos queda terminar de ver en profundidad el caso en estudio para comprender los esquemas XML.
Introducción
Vamos a continuar con nuestro estudio de un caso real. La ventaja de usarlo es que vamos a ir aprendiendo qué es un esquema, qué componentes tiene, cómo analizarlo, etc. Todo esto no como algo teórico, sino como producto del análisis progresivo del esquema real del Certificado de Empresa, por lo que va a ser más fácil aprender XML Schema. El anterior artículo lo terminamos viendo gráficamente un elemento complejo, por lo que este lo iniciaremos con los elementos simples que lo componen.
Elementos
simples
Los elementos dentro de Datos_Representante, ¿cómo están definidos? Muy fácil, hacemos clic en uno de ellos, por ejemplo CIF_NIF y vemos sus detalles:
La ventana detalles nos muestra que es obligatorio que aparezca una y sólo una vez, es del tipo CIF_NIF_SIMPLETYPE definido más adelante en el esquema, y es de contenido simple. ¡Por fin hemos llegado a un elemento simple! Por lo tanto, sólo puede contener texto, nada de otros elementos o atributos. Un elemento simple puede estar restringido mediante lo que se llama facetas, por ejemplo el elemento Nombre:
Puede tener una longitud mínima de 1 carácter y máxima de 15. También podemos ver otro elemento simple en la pestaña rejilla: En la imagen vemos que es de tipo simple, que el texto que caracteriza a un elemento simple en este caso es una cadena de caracteres, y que dicha cadena no puede ser cualquiera sino que obedece a un patrón. Luego veremos cómo interpretarlo. En la ventana anterior, Facets, también se pueden ver los patrones en una pestaña: Patterns. Como podemos esperar de un editor tan potente, es muy fácil elegir el tipo de datos de un elemento. En la ventana de propiedades: Podemos «restringir» el tipo de datos simplemente seleccionando entre los que nos ofrece el estándar del esquema. La definición de un elemento simple puede tener más facetas, aunque en el presente caso ninguno de los elementos definidos las tiene.
Editor
de
texto
Obviamente la definición del esquema la podemos ver en texto, debidamente formateada:
Val or añadid o Danys oft | www.d any sof t.com 3 En la ventana texto podemos apreciar, no sólo el texto debidamente formateado, como hemos dicho, con sangrías y botones para colapsar cada elemento, sino con líneas para unir el principio y fin de los elementos y coloreado de sintaxis que permite ver inmediatamente cada parte de una definición. Para la edición de estos elementos contamos además con una ventana Elementos donde están los definidos por el estándar XSD, los atributos que puede tener la definición de un elemento y, también importante, hay varios caracteres que están prohibidos en el texto de un elemento y que podemos escoger en la ventana Entidades.
Aquí podemos ver completo el patrón que se le exige a un elemento CIF_NIF_SIMPLETYPE, y que analizaremos a continuación.
Patrones
Por fin vamos a ver esta restricción o faceta. El valor de este elemento es una expresión regular. Hay varios elementos que la tienen, por ejemplo el tipo CIF_NIF_SIMPLETYPE: Tiene dos restricciones, una que debe ser una cadena de caracteres y la otra el patrón que ha de seguir. Como veremos, hay una tercera, y es que la cadena tiene que tener única y exclusivamente 9 caracteres y que se infiere del patrón. Los paréntesis se usan para agrupar expresiones regulares. La pleca (barra vertical) indica que la expresión anterior o la siguiente valen. Por lo tanto, en este caso encontramos tres grupos, cualquiera de los cuales puede usarse. Los corchetes especifican una lista de caracteres que son válidos en la cadena. Se pueden poner individualmente o se puede indicar un rango de caracteres separando el primero y el último mediante un guión. Por último las llaves son un cuantificador. En esta ocasión, al haber un solo número, indican el número exacto de veces que debe aparecer la definición anterior.
números y terminado por una letra mayúscula o un número. Un caso que nos puede extrañar es en la definición: Vemos que se dice que el grupo puede aparecer un mínimo de una vez y un máximo de una vez. Es equivalente a {1}. Otro caso especial lo vemos en la definición: En este caso se usa una Clase de Caracteres marcados por la barra inversa y que representan un dígito. Por lo tanto la cuenta de cotización es una cadena (no un número) que consta de 15 dígitos (por ende siempre debe tener una longitud de 15). Por último tenemos un caso especial complejo que queremos comentar: En este caso no se usa el tipo fecha estándar definido en los esquemas. Vemos que primero se define el siglo como 19 o 20, seguido de los dos dígitos del año. Luego viene el mes que puede empezar por cero seguido de un dígito o por uno seguido de 0, 1 o 2. El último grupo es el mes. Es decir, es el formato «aaaammdd». Como podemos esperar, XMLSpy nos ayuda con la generación de patrones permitiéndonos elegir éstos caracteres y grupos de caracteres por su significado:
Val or añadid o Danys oft | www.d any sof t.com 5
Elementos
complejos
en
el
texto
Si revisamos el texto del esquema, veremos que la definición de los elementos complejos usa tipos. Esta complejidad nos la evita XMLSpy, que nos muestra los esquemas como si todos los elementos tuviesen la definición en línea. Pero en este esquema se usan dos formas para la definición de los elementos complejos. La primera es usar un atributo Tipo que refiere el nombre del tipo complejo que se usa. De esta manera, varios elementos se pueden referir al la misma definición. Por ejemplo: El elemento cuenta de cotización usa tres Tipos, el que define el representante, el que define la empresa y el que define el trabajador. Además, estos tipos deben aparecer en el orden definido, al usarse el elemento secuencia para rodearlos. También encontramos ejemplos donde se usa extensión para añadir elementos a un tipo definido: Todo esto, como hemos podido ver, está en la definición del esquema, pero XMLSpy lo simplifica mucho, especialmente sus gráficos.