2010-01-30 4 views
9

Podczas próby sprawdzenia poprawności pliku XML na XSD w java (see this example) istnieją pewne niezgodności między wyrażeniami regularnymi podanymi w pliku XSD i wyrażeniami regularnymi w java.Jak radzić sobie z różnymi dialektami wyrażeń regularnych (java vs. xsd)?

Jeśli jest wyrażenie regularne jak "[ab-]" w XSD (czyli każdy ze znaków „a”, „b” lub „-”, Java narzeka błąd składni w wyrażeniu

To. znany bug od 28-Mar-2005, patrz Sun bug database.

Co mogę zrobić, aby obejść ten błąd? do tej pory staram się „prawidłowy” plik XSD zastępując "[ab-]" przez "[ab\-]", ale czasami nie jest opcją


Jeśli masz problemy z tym błędem, zagłosuj na niego na Sun bug database!

+1

Do rzeczy: chcesz, aby * parser * konwertował wzór * regex *? :) Mam co najmniej przegłosowany konkretny błąd, wygląda to naprawdę dość denerwująco. Mam nadzieję, że uda się to naprawić wcześniej. – BalusC

+0

Konwerter regex byłby opcjonalny. Po prostu szukam najlepszego obejścia. – tangens

Odpowiedz

3

Ponieważ błąd został już zgłoszony, zalecamy wypróbowanie innego procesora schematu XML. Nie da się wiele z tym zrobić.

Jeśli możesz wstępnie przetworzyć strumień, do którego przychodzi XSD, możesz utworzyć parser, który rozumie podstawową strukturę wyrażenia regularnego i może naprawić wszystko, co wygląda na formularzu [. * -] (gdzie .star jest nie literał w tym przypadku).

0

Chociaż może nie być najlepszym rozwiązaniem na świecie, można rozważyć użycie parsera Sax. Używam go od ponad 3 lat, jednak nie zrobiłem z nim wiele weryfikacji poprawności, więc nie mogę mówić o jego solidności z tym związanej.

Poza tym, myślę, że Kaleb jest prawdopodobnie poprawny na stronie preprocessingu (co nie jest idealne) - możesz użyć wyrażenia regularnego dla każdego przychodzącego wyrażenia regularnego, aby zastąpić .... chociaż to ma dość nieprzyjemny zapach.

Edytuj: Dodatkowa myśl, która właśnie przyszła do mnie. Jeśli regex nie musi być w xsd - tzn. Jest po prostu dlatego, że było to "najłatwiejsze" w przeszłości - można wykonać walidację wyrażenia regularnego poza xsd. Ale jeśli inne systemy używają xsd, to prawdopodobnie nie jest to właściwe rozwiązanie i możesz zapomnieć, że powiedziałem cokolwiek.

Powiązane problemy