2008-11-03 21 views
16

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

  • Es no xmllint (ver más abajo)
  • Soporta RelaxNG
  • puede integrarse 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 compact RelaxNG format y trang para convertirlo al formato estándar RelaxNG. Luego hacemos la validación real a través de xmllint.

Entonces comienzan los problemas. Xmllint tiene problemas para informar los errores de validación de forma incorrecta. 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 ' Esto nos dice 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.

+0

Dado que esto se solicitó hace más de 7 años (ahora es 2015): ¿xmllint sigue siendo demasiado defectuoso para su propósito? – Jens

+0

Jens: eso fue en la BBC y no he trabajado allí durante años, ni he usado xmllint desde entonces. – Ovid

Respuesta

14

Creo que JDrago tiene la idea correcta, que necesita evitar las herramientas basadas en libxml2 para la validación de RNG, en 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.

La única deficiencia de jing vis a vis libxml2/xmllint es que actualmente no utiliza catálogos OASIS XML para resolver los identificadores públicos y del sistema y los URI que apuntan a los 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.

2

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

2

rnv es muy rápido, libre (como en la voz libre) 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.

2

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.

+1

Eso no es cierto. Por ejemplo, el error xsd: anyURI que informé en febrero de 2006 fue completamente ignorado. El error es que el URI con @ o, como http://www.lemonde.fr/web/article/0,[email protected],[email protected],0.html están equivocados rechazado http://www.w3.org/TR/xmlschema-2/#anyURI – bortzmeyer

3

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

Cuestiones relacionadas