La importancia de la validación
La validación por DTD
1. El vocabulario utilizado
En las secciones anteriores ha aprendido a diseñar un documento XML según la gramática básica especificada por el W3C. Si sus documentos respetan esta norma, el documento XML estará bien formado. Sin embargo, si el documento respeta una gramática descrita previamente llamada DTD (Document Type Definition), se dice que el documento es válido.
a. Los documentos bien formados
El documento no se considerará "bien formado" si no respetan las siguientes reglas:
-
El documento no cuenta con un prólogo válido.
-
Algunas etiquetas no están cerradas.
-
Los elementos no están anidados correctamente.
-
Los valores de los atributos no están encerrados entre comillas.
-
Los nombres de los elementos contienen caracteres no autorizados.
-
El documento no tiene ningún elemento raíz.
Un documento XML bien formado tiene un prólogo del tipo <?xml version "1.0" standalone="yes"?>. El texto standalone permite especificar si el documento depende de otra gramática diferente de las normas impuestas por XML. Si se establece standalone en "no" quiere decir que el documento no es autosuficiente y depende de un documento en el que se precise la gramática que lo describe: una DTD.
En la actualidad, los navegadores web son capaces de reconocer los documentos bien formados de los mal formados. Si utiliza Microsoft Internet Explorer (versión 5.0 o superior), puede ver sus documentos XML abriendo el archivo XML desde el menú Archivo, introduciendo la URL correspondiente o arrastrando y soltando el documento en la ventana del navegador. Si el documento está bien formado, la información que contiene aparece en forma de árbol, cuyos nodos son dinámicos. Si, por el contrario, el documento contiene errores, el navegador los resalta e indica el primer elemento que contiene un error.
El siguiente documento XML está bien formado. La siguiente pantalla representa el documento XML interpretado por Internet Explorer.
<?xml version "1.0" encoding= ISO-8859-1" standalone="yes"?>
<directorio>
<entrada>
<apellido>Guevara</apellido>
<nombre>Ernesto</nombre> ...
Los diferentes tipos de declaración
Un elemento es un grupo compuesto por varios subgrupos. Estos subgrupos pueden contener otros elementos, datos textuales, nada (EMPTY) o cualquier cosa (ANY). En este ejemplo, el elemento A contiene el elemento B seguido del elemento C:
<!ELEMENT A (B, C)>
El elemento A contiene datos textuales:
<!ELEMENT A (#PCDATA)>
El elemento A no contiene nada:
<!ELEMENT A EMPTY>
El elemento A contiene cualquier cosa (datos textuales, otros elementos, etc.):
<!ELEMENT A ANY>
1. Los grupos
Un grupo está delimitado por paréntesis; está compuesto de referencias a elementos o subgrupos. Los elementos que declaran un grupo son elementos no terminales. Sin embargo, los elementos que contienen datos textuales, nada (EMPTY) o cualquier cosa (ANY) son elementos terminales.
a. Las palabras clave ANY y EMPTY
EMPTY prohíbe a un elemento poseer un elemento secundario o elementos textuales.
ANY permite al elemento contener ninguno o varios elementos secundarios declarados o datos textuales. Esto permite mezclar todos los tipos de elementos declarados.
b. Los operadores ?, + y *
Los operadores de opción (?), una o más (+) y ninguna o más (*) se pueden aplicar a los grupos o a los subgrupos en la definición de un elemento.
-
El operador ? define un componente opcional.
Ejemplo:
<!-- El subelemento móvil es opcional. -->
<!ELEMENT númtel (móvil?, fijo)>0
-
El operador + define un componente presente al menos una vez.
Ejemplo:
<!-- El subgrupo (códigopostal, ciudad) aparece al menos una vez. -->
<!ELEMENT municipiocomarca (nombrecomarca, (códigopostal, ciudad)+)>
-
El operador * define un componente presente ninguna, una o varias veces.
Ejemplo:
<!-- El grupo (direcciónip, nombreequipo) no aparece ninguna vez, una o
varias veces. -->
<!ELEMENT equipos (direcciónip, nombreequipo)*>
c. El operador de elección |
En la declaración de los grupos, puede reemplazar las comas por caracteres | si el orden de aparición de los elementos no es importante.
Por ejemplo, considere la siguiente declaración:
<!ELEMENT artista (nombre, apellido)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellido (#PCDATA)>
El elemento apellido necesariamente deberá suceder al elemento...
Introducción al concepto de esquemas XML
A continuación presentaremos un concepto de XML importante: los esquemas. Los esquemas han surgido recientemente. En el futuro, deberían reemplazar a las DTD. De hecho, estas resultan demasiado limitadas. Los datos no tienen ningún tipo y los únicos elementos terminales son los datos textuales. Los esquemas XML permiten el uso de varios tipos para sus datos.
Con frecuencia, los documentos XML están destinados a ser insertados o extraídos de una base de datos. Conocer los tipos de datos que se manipulan permite llevar a cabo de manera más eficaz determinados procesos (como las inserciones o las extracciones). En el mejor de los casos, los tipos de datos de los documentos XML se corresponden con los tipos utilizados por la base de datos. En este sentido, los esquemas son un activo real y una herramienta esencial para la integración de la solución XML. Además, la inclusión de la especificación del tipo en la gramática no es su única ventaja: los esquemas son más fáciles de leer y entender porque están escritos en lenguaje XML.
En esta sección, mediante un ejemplo concreto, aprenderá a construir esquemas sencillos, entenderá las diferentes declaraciones y los diferentes tipos de información.
Es posible construir un esquema a partir de una DTD. Algunas herramientas disponibles en Internet permiten convertir automáticamente una DTD en XMLSchema. Sin embargo, una vez obtenido el esquema resultante, es necesario añadir la información de tipo que la herramienta no ha podido decidir por sí sola.
1. ¿Qué diferencias hay entre DTD y XMLSchema?
a. La inclusión de la especificación del tipo
Un documento DTD describe la jerarquía de los elementos que componen el documento XML. Las hojas del árbol representan los elementos terminales. Las DTD atribuyen necesariamente el tipo #PCDATA a los valores de estos elementos. Después, ya no se especifica el tipo de los atributos. La integración de esquemas permite diferenciar los elementos terminales y los atributos por su tipo. Podrá utilizar los tipos predefinidos por la gramática o crear los suyos propios de acuerdo con sus necesidades.
b. La contribución de la sintaxis XML
Las DTD se construyen con un lenguaje propio...