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.