Programación en castellano
Inicio > Tutoriales > Java y XML > El API JAXP
-Tutoriales

El API JAXP


Efectos del DTD en el Analizador sin Validación

En la última página, definimos un tipo de documento rudimentario y lo usamos en nuestro fichero XML. En esta página, usaremos el programa Echo para ver como aparecen los datos en el analizador SAX cuando se incluye un DTD.

Nota:

La salida mostrada en esta sección está en Echo07-05.log.

Al ejecutar el programa Echo sobre nuestra última versión de slideSample.xml nos muestra que muchas de las llamadas superflúas al método characters han desparecido.

ELEMENT: <slideshow
   ATTR: ...
>
PROCESS: ...
    ELEMENT: <slide
       ATTR: ...
    >
        ELEMENT: <title>
        CHARS:   Wake up to ...
        END_ELM: </title>
    END_ELM: </slide>
    ELEMENT: <slide
        ATTR: ...
    >
    ...

Es evidente que los caracteres en blanco que se usaron para formatear los elementos slide no aparecen más, porque el DTD declara que el slideshow sólo consta de elementos slide.

<!ELEMENT slideshow (slide+)>

. Seguir los Espacios en Blanco Ignorables

Ahora que está presente el DTD, el analizador no usa más el método characters con los espacios en blanco que sabe que son irrelevantes. Desde este punto la aplicación está sólo interesada en procesar los datos XML. La aplicación nunca se preocupará de espacios en blanco que sólo existen para hacer más leíble el fichero XML.

Por otro lado, si estuvieramos escribiendo una aplicación que filtrara un fichero de datos XML, y quisieramos que la salida fuera igualmente leíble, los espacios en blanco no serían irrelevantes -- serían esenciales. Para obtener dichos caracteres, necesitamos añadir el método ignorableWhitespace a nuestra aplicación. Lo haremos más adelante.

Nota:

El código escrito en esta sección está en Echo08.java. Y la salida está en Echo08-05.log.

Para procesar los espacios ignorables (generalmente) que el analizador está viendo, añadimos el código en negrita de abajo para implementar el manejador de eventos ignorableWhitespace en nuestra versión del programa Echo.

    public void characters (char buf [], int offset, int len)
      ...     
    }

    public void ignorableWhitespace (char buf [], int offset, int len)
    throws SAXException
    {
        nl(); emit("IGNORABLE");
    }
  
    public void processingInstruction (String target, String data)

Este código simplemente genera un mensaje que nos permite saber que se han visto espacios en blanco ignorables.

Si ejecutamos la aplicación Echo ahora, la salida se parecería a ésto.

ELEMENT: <slideshow
   ATTR: ...
>
IGNORABLE
IGNORABLE
PROCESS: ...
IGNORABLE
IGNORABLE
    ELEMENT: <slide
       ATTR: ...
    >
    IGNORABLE
        ELEMENT: <title>
        CHARS:   Wake up to ...
        END_ELM: </title>
    IGNORABLE
    END_ELM: </slide>
IGNORABLE
IGNORABLE
    ELEMENT: <slide
       ATTR: ...
    >
    ...

Aquí es evidente que el método ignorableWhitespace está siendo invocado antes y después de los comentarios y de los elementos Slide , donde antes era invocado characters.

. Limpieza

Ahora que hemos visto los espacios en blanco ignorables, eleminamos el código de nuestra versión del programa Echo -- no será necesario en ningún ejercicio más.

. Documentos y Datos

Antes, aprendimos que una razón por la que habíamos oído sobre documento XML, por un lado, y datos XML por otro lado, es que XML maneja los dos confortablemente, dependiendo de si se permite o no texto entre los elementos de la estructura.

En el fichero de ejemplo con el que hemos trabajado, el elemento slideshow es un ejemplo de elemento de dato -- contiene sólo subelementos sin intervención de texto. El elemento item, por otro lado, podría ser un elemento documento, porque está definido para incluir tanto texto como subelementos.

. Elementos Vacíos, Redefinición

Ahora que hemos entendido que ciertos ejemplares de espacios en blanco pueden ser ignorables, es tiempo de revisar la definición de un elemento "vacío". Esta definición pueden expandirse para incluir:

<foo>   </foo>

Donde hay un espacio en blanco entre las dos etiquetas y el DTD define que el espacio en blanco es ignorable.

 
Patrocinados
 

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

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados