Los documentos DTD ("Data Type Definition") tienen sus raíces en SGML ("Standard Generalized Markup Language") donde su funcionamiento principal era el de validar si la estructura de un fragmento SGML era correcta antes de ser procesado o manipulado.
Esto mismo tipo de documento fue trasladado al estándar XML para ofrecer el mismo funcionamiento: validar la estructura del documento XML; la necesidad de validar un documento XML se hace con la intención de evitar posibles errores al ser procesado, esto es, antes de entrar al parser ("procesamiento") se intenta saber si al menos los datos de entrada son validos, y fueron los DTD's el primer mecanismo para realizarlo en XML.
Sin embargo, el emplear DTD's para validar documentos XML tiene varias desventajas.
El lenguaje utilizado por DTD's es llamado EBNF("Extended Backus Naur Form") y posee una forma muy críptica por lo que interpretarlo y escribirlo es una ardua labor.
En un DTD no es posible definir un tipo de elemento programático, esto es, declarar un valor como String o Integer, mientras en un Schema si es posible llevar acabo este tipo de declaración.
Cuando se utilizan DTD's no es posible utilizar más de dos para validar un documento, suponga que agrega una nueva sección a su información en XML, el agregar otro DTD para procesar esta información (nueva) no es válido, se tiene que rediseñar el DTD para contemplar esta información adicional, y considerando la estructura de EBNF esto no resulta nada fácil; lo anterior es solucionado através de Namespaces los cuales serán descritos a continuación.
A pesar de las deficiencias que presentan los DTD's , estos están en amplio uso en diversos proyectos y aunado a que la utilización de Schemas aún esta en su infancia, merece que sea ejemplificado un DTD:
Un "Namespace" es un término utilizado en varios contextos de informática, en principio implica: la agrupación de diferentes partes para que sean distinguibles de otros elementos; si esta familiarizado con cualquier ambiente de programación sabe que el utilizar un mismo nombre dentro de un programa esta prohibido al menos que exista un calificador, esto es, no es posible nombrar dos funciones o variables con el mismo nombre al menos que sean distinguibles mediante otro parámetro.
En el mundo de XML surge la misma necesidad de este calificador, observe :
<automóvil> <llantas>4</llantas> <asientos>2<asientos> <automóvil> <llantas> <rin>Momo</rin> <modelo>Raytech</modelo> </llantas> |
En el fragmento anterior se utiliza el elemento llantas
en dos ocasiones, en una para describir el número de éstas y en otro para agrupar elementos más extensos, a simple vista es entendible, sin embargo, cuando se requiere procesar y validar este fragmento surge un problema, cual elemento llanta
es válido, como se diferencian ? , es através de un Namespace que se logra esta distinción. El uso de Namespaces es de gran importancia para diversas herramientas en XML entre ellas Schemas,XSL y SOAP , su uso avanzado será ejemplificado a lo largo de este curso, a continuación se describe una declaración básica:
Schemas es una de las últimas especificaciones desarrolladas por W3C para XML, su funcionamiento es cumplir con la validación de documentos XML en el proceso mejorando el antiguo proceso de validación llevado acabo con DTD's; algunas de las ventajas de Schemas son las siguientes:
Esta es una de las grandes ventajas de Schemas, no es necesario aprender otro formato como EBNF, basta definir otro documento en el mismo lenguaje que se esta validando: XML.
Debido al uso de XML es posible utilizar Namespaces al momento de validar documentos XML, esto elimina la restricción impuesta por DTD's.
A continuación se describe un Schema con los principales elementos empleados en esta estructura de validación :
Además de los elementos descritos en el ejemplo anterior, la especificación de Schemas define otra serie de tags más elaborados que pueden ser empleados en la validación de XML :
Después de hablar sobre todas las estructuras utilizadas para validar un documento XML, aún falta decir: Como se indica que debe ser validado un documento XML ?.
El término validar en la terminología XML puede ser interpretado de dos formas:
En este sentido se entiende como válido un documento que va de acuerdo a las características generales de documentos XML , esta validez no tiene absolutamente nada que ver con Schemas o DTD's y es realizada por el parser automáticamente.
El término validado en este contexto significa que el documento XML cumplió con una estructura especifica ya sea un DTD o Schema;es sumamente importante conocer la diferencia entre estos dos tipos de validaciones.
Mucho parsers en XML son conocidos como "Fully Validating Parsers", esto implica que son capaces de realizar una validación completa, notese el uso de capaces, lo anterior significa que al ser procesado un documento XML se debe indicar que se desea validación completa ("Full-Validation") , esta indicación se hace mediante algún parámetro ("-flag") proporcionado al parser en el programa , por "default" todo parser únicamente valida la forma del documento XML ("Well-Formed").
A continuación dos ejemplos que hacen uso de validación completa, uno através de DTD's y el otro con Schema.
template
, XPath, Condicionales y Ciclos en XSL.