Wenn ich versuche, eine XML-Datei gegen eine XSD in Java zu validieren ( siehe dieses Beispiel ) Es gibt einige Inkompatibilitäten zwischen den regulären Ausdrücken in der XSD-Datei und den regulären Ausdrücken in Java.
Wenn im XSD ein regulärer Ausdruck wie "[ab-]"
vorhanden ist (was eines der Zeichen "a", "b" oder "-" bedeutet), beschwert sich Java über einen Syntaxfehler im Ausdruck.
Dies ist ein bekannter Bug seit dem 28. März 2005, siehe Sun Bug-Datenbank .
Was kann ich tun, um diesen Fehler zu umgehen? Bisher habe ich versucht, die XSD-Datei durch Ersetzen von "[ab-]"
by "[ab\-]"
zu "korrigieren", aber manchmal ist dies keine Option .
Wenn Sie auch Probleme mit diesem Fehler haben, stimmen Sie bitte dafür im Sun Bug ab Datenbank !
Da bereits ein Fehler vorliegt, würde ich Ihnen empfehlen, einen anderen XML-Schema-Prozessor auszuprobieren. Es gibt nicht viel, was du dagegen tun kannst.
Wenn Sie den Stream vorab verarbeiten können, an dem das XSD ankommt, dann könnten Sie einen Parser erstellen, der die grundlegende Struktur des regulären Ausdrucks versteht und alles, was aussieht, in der Form [. * -] (wo .star nicht ist) reparieren kann ein Literal in diesem Fall).
Obwohl es möglicherweise nicht die beste Lösung der Welt ist, könnten Sie den Sax Parser verwenden. Ich habe es jetzt seit über 3 Jahren benutzt, aber ich habe nicht viel Regex-Validierung damit gemacht, so dass ich nicht mit seiner Robustheit in Bezug darauf sprechen kann.
Abgesehen davon denke ich, dass Kaleb wahrscheinlich auf der Vorverarbeitungsseite korrekt ist (was alles andere als ideal ist) - Sie könnten vielleicht eine Regex für eine der eingehenden Regexen verwenden, um eine Ersetzung durchzuführen .... obwohl das hat ziemlich den Code daran riechen.
Bearbeiten: Ein zusätzlicher Gedanke, der gerade zu mir kam. Wenn die Regex nicht in der xsd sein muss - d. H. Es ist einfach da, weil das in der Vergangenheit "am einfachsten" war - könnten Sie die Regex-Validierung außerhalb der xsd durchführen. Aber wenn andere Systeme das xsd verwenden, ist das wahrscheinlich nicht die richtige Lösung, und Sie können vergessen, dass ich etwas gesagt habe.