El API JAXP

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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO