Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
-Tutoriales

El API JAXP


Analizar el DTD Parametrizado

Esta sección usa el programa Echo para ver qué sucede cuando referenciarmos xhtml.dtd en slideshow.dtd. También cubre los tipos de avisos que genera el analizador SAX cuando hay presente un DTD.

Nota:

La salida descrita en esta sección está en Echo10-08.log.

Cuando probamos a mostrar la presentación encontramos que ahora contiene un nuevo error. La parte relevante de la salida la hemos formateado para mejor lectura.

<?xml version='1.0' encoding='UTF-8'?>
** Parsing error, line 22, 
   uri file:.../slideshow.dtd
Element "title" was already declared.
org.xml.sax.SAXParseException: ...

Parece que xhtml.dtd define un elemento title que es completamente diferente del elemento title definido en el DTD slideshow. Como no hay herencia en el DTD, estas dos definiciones están en conflicto.

Nota:

El DTD XHTML Modularizado también define un elemento title que se espera que sea el título del documento, por eso podemos evitar el conflicto cambiando xhtml.dtd -- el problema nos volverá más adelante.

También usamos el espacio de nombres XML para resolver el conflicto, o usamos una de las muchas proposiciones de esquemas de árbol definidas en Proposiciones de Esquemas. Por ahora, simplemente renombraremos el elemento title en slideshow.dtd.

Nota:

El XML mostrado aquí está en slideshow3.dtd y slideSample09.xml, que referencia copyright.xml. El resultado del procesamiento está en Echo10-09.log.

Para mantener separados los dos elementos title, hemos resuelto utilizar una "hyphenation hierarchy". Hacemos los cambios en negrita de abajo al nombre del elemento title en slideshow.dtd a slide-title:

<!ELEMENT slide (image?, slide-title?, item*)>
<!ATTLIST slide 
            type   (tech | exec | all) #IMPLIED
>

<!-- Defines the %inline; declaration -->
<!ENTITY % xhtml SYSTEM "xhtml.dtd">
%xhtml;

<!ELEMENT slide-title (%inline;)*>

El siguiente paso es modificar el fichero XML para usar el nuevo nombre de elemento. Para hacer esto, hacemos los cambios en negrita de abajo.

...
<slide type="all">
<slide-title>Wake up to ... </slide-title>
</slide>

...
<!-- OVERVIEW -->
<slide type="all">
<slide-title>Overview</slide-title>
<item>...

Ahora ejecutamos el programa Echo sobre esta versión de la presentación. Debería ejecutarse completamente y mostrar una salida como la mostrada en Echo10-09.log.

¡Felicidades! Acabamos de leer un documento XML completamente validado. Los cambios realizados tienen el efecto de poner nuestro elemento title del DTD dentro de un "nombre de espacio" de slideshow que hemos construido artificialmente poniendo guiones al nombre.

. Aviso del DTD

Como se mencionó anteriormente en este tutorial, los avisos se generan sólo cuando el analizador SAX está procesando un DTD. Algunos avisos sólo son generados por el analizador con validación. El objetivo principal del analizador sin validación es operar tan rápidamente como sea posible, pero esto genera algunos avisos. La especificación XML sugiere que los avisos deberían ser generados como resultado de.

  • Proporcionar declaraciones adicionales para entidades, atributos o notaciones.
    (Dichas declaraciones son ignoradas. Sólo se utiliza la primera. Observa también que las definiciones duplicadas de elementos siempre producen un error fatal cuando se validan.)

  • Referenciar un tipo de elemento no declarado.
    (Un error de validación ocurre sólo si el tipo no declarado es usado realmente en el documento XML. El aviso resulta cuando el elemento no declarado es referenciado en el DTD.)

  • Declarar atributos para tipos de elementos no declarados

El Analizador SAX Java XML también emite avisos en otros casos, como.

  • No hay un <!DOCTYPE ...> cuando se valida.

  • Referenciar una entidad de parámetro no definida cuando no está validada.
    (Cuando se valida, ocurre un error. Aunque el analizador sin validación no necesita leer las entidades de parámetro, el analizador Java XML lo hace. Como no es requerido, genera un aviso, en vez de un error.)

  • Ciertos casos donde la declaración de codificación de caracteres no parece correcta.

Hasta este punto, hemos digerido muchos conceptos XML, incluyendo DTDs, entidades externas. También hemos aprendido nuestra propia forma de evitar el analizador SAX. El resto del tutorial SAX cubre los tópicos avanzados que sólo necesitaremos si escribimos aplicaciones basadas en SAX. Si nuestro objetivo primario es escribir aplicaciones basadas en DOM, podemos saltar a Manipular Contenidos de Documentos con un Modelo de Objeto Documento.

 
Patrocinados
 

Copyright © 1999-2010 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

diseño y desarrollo web por Color Vivo Internet. Un proyecto de los Hermanos Carrero