|
XML Schema y DTDs |
Introducción
Objetivo
XML se ha consolidado definitivamente como un lenguaje estándar de información, tanto como medio de persistencia como medio de intercambio de información. En estas aplicaciones es de mucha relevancia qué posibilidades nos ofrece esta tecnología de cara al modelado y la validación de la información.
En primer lugar es importante insistir en la necesidad, cada vez mayor, de poder estructurar correctamente, y de un modo más intuitivo, la información. Al igual que con la creación de la programación estructurada y posteriormente el almacenamiento relacionado de la información, actualmente está claro que ya no basta con almacenar la información identificando con que otros elementos está relacionada, sino que empieza a ser necesario, al igual que en el paradigma de la orientación a objetos, jerarquizar y estructurar la información.
Para proceder a esta estructuración dentro de un documento XML se han propuesto distintas soluciones dentro del entorno de W3C, todas enfocadas a definir un patrón externo al documento propiamente dicho que nos permita decir si el documento se adhiere a la estructura esperada o no; de las soluciones propuestas a lo largo del tiempo vamos a estudiar que diferencias y cambios hay en las dos principales – en un último apartado trataremos la idea de poner en juego una tercera proposición, RELAX NG –, la primera en aparecer fue el uso de las DTDs y posteriormente surgió la idea de los XML Schemas.
Historia
Antes de iniciar la exposición de las diferencias entre las DTDs y los XML Schemas es importante echar un rápido vistazo a de dónde y cómo surgieron las dos principales soluciones que aquí tratamos.
Inicialmente el uso de las DTDs se debe a SGML, en el cual describían no sólo el vocabulario necesario para identificar todos los elementos de que iba a constar nuestro documento, si no que también expresaba la estructura que dichos elementos debía respetar. Con la creación de XML, que recordemos que no es más que un subconjunto de SGML, fue necesario mantener la posibilidad de describir los elementos necesarios, al igual que en SGML, por ello se importaron las DTDs y todo su comportamiento.
Posteriormente, y debido al uso principalmente, se vio la necesidad de emplear otros métodos para describir esas necesidades inherentes a XML, con esta idea se creó XML Schema, se pretendía mejorar y ampliar la utilidad de las DTDs, para ello se necesitaban ciertas mejorías que pasaremos a comentar más adelante.
¿QUÉ SON LAS DTDS?
Como hemos indicado antes, una DTD es una especificación y estructuración necesaria que permite validar el contenido estructural y formal de un documento de SGML (y XML). Las DTDs se pueden usar para la definición de modelos de contenido, es decir, en que orden y que elementos pertenecen a un elemento de orden superior en la jerarquía del documento; además permiten, aun que de modo muy limitado, imponer ciertas restricciones sobre el tipo de los elementos.
<!ELEMENT Articulo (Cabecera, Contenido, Final)> <!ELEMENT Cabecera (Titulo, Autor)> <!ELEMENT Titulo ANY> <!ELEMENT Autor ANY> <!ELEMENT Contenido (Estracto, Cuerpo)> ................
¿QUÉ ES XML SCHEMA?
Al igual que las DTDs, los Schemas describen la estructura de la información. El motivo de la creación de este nuevo estándar para realizar la labor de las DTDs es, básicamente, la utilidad. Durante un tiempo, y a falta de otra solución más ajustada, se emplearon los mecanismos que proporcionaba SGML para modelizar la información en XML. Pero el descubrimiento de nuevas aplicaciones de XML al margen de la estructuración de documentos forzó la creación de otras soluciones que ayudasen a solventar los nuevos problemas a los que se enfrentaba el mercado. En el apartado siguiente veremos la principales diferencias que existen entre las DTDs y los XML Schemas.
<schema targetNamespace=”http://www.aqs.es/Schema_y_DTDs” xmlns=”http://www.w3.org/2001/XMLSchema” xmlns:AQS=”http://www.aqs.es/Schema_y_DTDs” > <element name=”Articulo” type=”AQS:tArticulo” /> <complexType name=”tArticulo”> <element name=”Cabecera” type=”AQS:tCabecera”/> <element name=”Cuerpo” type=”AQS:tCuerpo”/> <element name=”Final” type=”AQS:tFinal”/>f </complezType> <complexType name=”tCabecera”> <element name=”Titulo” type=”string”/> <element name=”Autor” type=”string”/> </complexType> ................















































