2010-01-30 6 views
9

Lorsque je tente de valider un fichier XML contre un XSD en java (see this example) il y a des incompatibilités entre les expressions régulières données dans le fichier XSD et les expressions régulières en java.Comment gérer les différents dialectes des expressions régulières (java vs xsd)?

S'il y a une expression régulière comme "[ab-]" dans le XSD (ce qui signifie l'un des caractères « a », « b » ou « - », java se plaint d'une erreur de syntaxe dans l'expression

C'est un. bogue connu depuis 28-MAR-2005, voir Sun bug database.

Que puis-je faire pour contourner ce bug? Jusqu'à maintenant, j'essaie de « corriger » le fichier XSD en remplaçant le "[ab-]" par "[ab\-]", mais parfois ce est pas une option.


Si vous avez des problèmes avec ce bogue, aussi, s'il vous plaît voter pour le Sun bug database!

+1

Au point: vous voulez donc un analyseur * * pour convertir un * regex pattern *? :) J'ai au moins mis à jour le bogue particulier, il semble en effet assez ennuyeux. J'espère qu'ils l'auront réparé plus tôt. – BalusC

+0

Un convertisseur regex serait une option. Je cherche juste la meilleure solution de contournement. – tangens

Répondre

3

Depuis un bug est déjà déposé, je vous recommande d'essayer un processeur de schéma XML différent. Il n'y aura pas grand-chose à faire à ce sujet. Si vous pouvez pré-traiter le flux sur lequel le XSD arrive, vous pouvez créer un analyseur qui comprend la structure d'expression régulière de base et qui peut réparer tout ce qui ressemble à la forme [. * -] (où le .star est pas un littéral dans ce cas).

0

Bien qu'il ne peut pas être la meilleure solution dans le monde, vous pouvez envisager d'utiliser l'analyseur Sax. Je l'utilise depuis plus de 3 ans maintenant, mais je n'ai pas fait beaucoup de validation regex avec, donc je ne peux pas parler de sa robustesse liée à cela. À part cela, je pense que Kaleb est probablement correct du point de vue du prétraitement (ce qui est loin d'être idéal) - vous pourriez être en mesure d'utiliser une regex pour l'une des regexes entrantes pour faire un remplacement .... Bien que cela a tout à fait l'odeur du code à ce sujet.

Editer: Une pensée supplémentaire qui vient de me venir à l'esprit. Si la regex n'a pas besoin d'être dans le xsd - c'est-à-dire simplement parce que c'était "plus facile" dans le passé - vous pouvez faire la validation de regex en dehors de la xsd. Mais, si d'autres systèmes utilisent le xsd, ce n'est probablement pas la bonne solution, et vous pouvez oublier que j'ai dit n'importe quoi.