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.