|
Buscador
Secciones
Otras zonas
Foros
Ganamos
Registro
|
Para usar el analizador con validación, hacemos los cambios en negrita que hay abajo:
public static void main (String argv [])
{
if (argv.length != 1) {
...
}
// Use the default (non-validating) parser
// Use the validating parser
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
try {
...
Aquí, hemos configurado la factoría para que producta un analizador con validación cuando se llame a newSAXParser. También podemos configurarlo para que devuelva un analizador que se preocupa el espacio de nombres usando setNamespaceAware(true). La implementación de referencia soporta cualquier combinación de opciones de configuración.
|
|
Nota:
La salida mostrada aquí está en Echo10-01.log. |
El resultado se podría parecer a esto:
<?xml version='1.0' encoding='UTF-8'?> ** Warning, line 5, uri file: ... Valid documents must have a <!DOCTYPE declaration. ** Parsing error, line 5, uri file: ... Element type "slideshow" is not declared.
Ahora que sabemos que un DTD es necesario para validar un documento. Esto tiene sentido. (Observa, que la falta de la declaración de tipo sólo genera un aviso, como se especifica en el estándard. Por otro lado, cualquier intento de analizar realmente el documento es inmediatamente gratificado con un error!).
Por eso ¿qué sucede cuando ejecutamos el analizador sobre nuestra versión actual de la presentación slide, con el DTD especificado?
|
Nota:
La salida mostrada aquí está en Echo10-07.log. |
Esta vez, el analizador nos da el siguiente mensaje de error:
** Parsing error, line 28, uri file:... Element "slide" does not allow "item" here.
Este error ocurre porque la definición del elemento slide requiere un title. Este elemento no es opcional, y el slide de copyright no tiene uno. Para corregir el problema, añadimos una interrogación para hacer que el title sea un elemento opcional:
<!ELEMENT slide (image?, title?, item*)>
¿Qué sucede ahora cuando ejecutamos el programa?
|
Nota:
También podríamos eleminar el slide de copyright, que produce el mismo efecto, como se refleja en Echo10-06.log. |
La respuesta es que todo funciona correctamente, hasta que el analizador ejecuta la etiqueta <em> contenida en el slide overview. Como esta etiqueta no está definida en el DTD, el intento de validar el documento falla. La salida se parece a esto:
...
ELEMENT: <title>
CHARS: Overview
END_ELM: </title>
ELEMENT: <item>
CHARS: Why ** Parsing error, line 24, uri file:...
Element "item" does not allow "em" -- (#PCDATA|item)
org.xml.sax.SAXParseException: Element "item" does not allow "em"
-- (#PCDATA|item)
at com.sun.xml.parser.Parser.error(Parser.java:2798)
...
El mensaje de error identifica la parte del DTD que hizo que fallara la validación. En este caso es la línea que define un elemento item como (#PCDATA | item).
|
Ejercicio:
Haz una copia del fichero y elimina todas las ocurrencias de <em>. ¿Se puede validar el fichero ahora? (En la siguiente página aprenderemos como definir entradas de parámetros para poder usar XHTML en los elementos que se están definiendo como parte de la presentación de diapositivas.) |
Manejo de Errores en el Analizador con ValidaciónEs importante reconocer que la única razón de que se lance una excepción cuando falla la validación de un fichero es como resultado de un código de manejo de errores que introdujimos en pasos anteriores de este tutorial. Este código se reproduce aquí:
static class MyErrorHandler extends HandlerBase
{
public void error (SAXParseException e)
throws SAXParseException
{
throw e;
}
...
}
Si no se lanza esta excepción, los errores de validación son simplemnete ignorados.
|
Ejercicio:
Intenta comentar la línea que lanza la excepción. ¿Qué sucede ahora cuando ejecutamos el analizador? |
En general, un error del analizador SAX es un error de validación, aunque hemos visto que también puede generarse si el fichero especifica una versión de XML que el analizador no está preparado para manejar. Lo que hay que recordar es que nuestra aplicación no genera excepciones de validación a menos que suministremos un manejador de errores como el que hemos visto arriba.
| Leer comentarios (25) | |
| Escribir comentario | |
| Puntuación: |
|
| Votar | |
| Recomendar este tutorial | |
| Estadísticas |
Copyright © 1999-2007
Programación en castellano.
Todos los derechos reservados.
Formulario de Contacto -
Datos legales -
Publicidad
Mantenida por: Claudio y
Dani.
Hospedaje web y servidores dedicados linux por Ferca Network
red internet: jugar gratis | amor | navidad 2009 | registro de dominios |
servidores dedicados
más internet: comprar | gratis | posicionamiento en buscadores | decoración libre | gifs animados