xml perl validation schema relaxng

Validación de esquema XML con RelaxNG



perl validation (5)

¿Qué herramientas de validación XML puede recomendar tanto para el rendimiento como para la precisión, cada una de las cuales es un problema crítico en nuestro sistema? Tenemos los siguientes requisitos:

  • No es xmllint (ver abajo)
  • Admite RelaxNG
  • Se puede integrar fácilmente con Perl (esto es opcional, pero sería agradable)

¿Por qué no xmllint? (Este es el fondo y puede omitirlo si lo desea)

Tenemos un gran sistema Perl que utiliza RelaxNG para validar nuestro XML. Usamos el formato compacto RelaxNG y trang para convertirlo al formato estándar RelaxNG. Luego hacemos la validación real a través de xmllint .

Ahí es cuando comienzan los problemas. Xmllint tiene problemas para informar incorrectamente los errores de validación. No da falsos positivos o negativos, pero si el documento no puede validar, xmllint a menudo informará el elemento o atributo incorrecto para un error dado. A veces el error es correcto ("no esperaba ver el elemento ''barra''), pero solo porque no se informó un error anterior (porque se suponía que ''bar'' estaba siguiendo el elemento requerido pero faltante ''foo'', pero xmllint doesn '' Eso nos dice un poco). Tenga en cuenta que este es un problema de larga data con xmllint e incluso la última versión tiene los mismos problemas. A menudo tenemos enormes documentos XML y el error de notificación de los errores causa mucha pena tanto para los clientes como para los desarrolladores.


Creo que JDrago tiene la idea correcta de que debe evitar las herramientas basadas en libxml2 para la validación de RNG, al menos por ahora. Estoy descubriendo esto también en mi proyecto. Recientemente registré dos errores contra libxml2 con respecto a la validación de RNG.

Recomiendo jing . Fue escrito por James Clark, el creador de Relax NG y una de las principales luces del mundo XML. Él es también el autor de Trang, que ya estás usando. El desarrollo de este código (y de trang) se reanudó recientemente en el sitio de Google Code al que me he dirigido anteriormente.

Jing ha demostrado ser consistentemente correcto con nuestro contenido y esquema, y ​​para dar mensajes de error mucho mejores que libxml2, aunque todavía hay mucho margen de mejora en ese sentido.

El único inconveniente de jing vis a vis libxml2 / xmllint es que actualmente no utiliza catálogos OASIS XML para resolver identificadores públicos y de sistema y URI que apuntan a esquemas. Esto sería un problema en caso de que haya incluido esquemas a los que se hace referencia mediante el URI ''http''; estos siempre se buscarán en la red.


Sospecho que xmllint usa las mismas bibliotecas subyacentes (libxml2, etc.) que cualquier otra cosa. Es contrario a la intuición pensar que otro front-end a la misma biblioteca daría resultados diferentes.


soy el autor de RNV. Se mantiene en sourceforge.net, y hay un responsable que se ocupa de los builts de paquetes de sourceforge y de Debian. El hecho es que el código no se cambia debido a que el código es estable. No hay errores reportados.


rnv es muy rápido, libre (como en la libertad de expresión) y se ejecuta en la línea de comandos (por lo que Perl puede invocarlo fácilmente). La mayoría de las veces, los mensajes están bien. Desafortunadamente, parece que ya no se mantiene.


Hamcrest Schema le permite validar documentos XML contra RelaxNG utilizando Hamcrest Matchers.