2010-01-30 8 views
9

Cuando intento validar un archivo XML contra un XSD en java (see this example), hay algunas incompatibilidades entre las expresiones regulares dadas en el archivo XSD y las expresiones regulares en java.¿Cómo manejar los diferentes dialectos de las expresiones regulares (java vs. xsd)?

Si hay una expresión regular como "[ab-]" en el XSD (es decir, cualquiera de los caracteres "a", "b" o "-", java se queja de un error de sintaxis en la expresión

Esta es una. fallo conocido desde 28-MAR-2005, consulte Sun bug database.

¿Qué puedo hacer para evitar este error? hasta ahora trato al archivo XSD "correcta" mediante la sustitución de la "[ab-]" por "[ab\-]", pero a veces esto no es una opción.


Si tienes problemas con este error, también, por favor vota en el Sun bug database!

+1

Al punto: por lo tanto, ¿quiere un * analizador * para convertir un patrón * regex *? :) Al menos he votado a favor del error en particular, realmente parece bastante molesto. Espero que lo solucionen antes. – BalusC

+0

Un convertidor de expresiones regulares sería una opción. Solo estoy buscando la mejor solución. – tangens

Respuesta

3

Como ya se ha archivado un error, le recomiendo que pruebe con un procesador XML Schema diferente. No habrá mucho que puedas hacer al respecto.

Si puede preprocesar la transmisión de XSD, puede crear un analizador sintáctico que comprenda la estructura de expresión regular básica y pueda arreglar todo lo que se vea en la forma [. * -] (donde .star es no es literal en este caso).

0

Aunque puede que no sea la mejor solución en el mundo, podría considerar usar el analizador de Sax. Lo he usado por más de 3 años, sin embargo no he hecho mucha validación de expresiones regulares con él, así que no puedo hablar de su robustez relacionada con eso.

Aparte de eso, creo que Kaleb es probablemente correcto en el lado de preprocesamiento (que es cualquier cosa menos ideal) - es posible que pueda usar una expresión regular para cualquiera de las expresiones regulares entrantes para hacer un reemplazo .... aunque tiene bastante olor a código al respecto.

Editar: Una idea adicional que acaba de llegar a mí. Si la expresión regular no necesita estar en la xsd, es decir, simplemente porque eso fue "más fácil" en el pasado, podría hacer la validación de expresiones regulares fuera de la xsd. Pero, si otros sistemas usan el xsd, probablemente esa no sea la solución correcta, y puedes olvidar que dije algo.

Cuestiones relacionadas