[XSD, XSLT] Валидация XMLки

kill-still

есть XSD-схема, по ней сгенерены через JAXB ворох классов, по которым распиханы данные и через JAXB машаллер сгенерена XML-ка. Надо вывести список несоответствий этой XML-ки схеме в человекочитабельном формате.
например:

<xs:simpleType name="eMailType">
<xs:annotation>
<xs:documentation>Адрес электронной почты</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:maxLength value="200"/>
<xs:minLength value="1"/>
<xs:pattern value=".+@.+\..+"/>
</xs:restriction>
</xs:simpleType>

"Некорректно заполнено поле «Адрес электронной почты». Поле необходимо заполнить по маске *@*.* Оно не должно быть короче 1 символа и длиннее 200 символов."
или

<xs:simpleType name="innType">
<xs:annotation>
<xs:documentation>ИНН</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="\d{10}"/>
</xs:restriction>
</xs:simpleType>

"Некорректно заполнено поле «ИНН». Поле должно содержать 13 цифр."
Для каких-то полей возможно придётся прописать отдельные предустановленные сообщения.
Нашёл такую штуку как javax.xml.validation.Validator но он выдаёт только первую ошибку и в неудобном формате с недостаточными данными для дальнейшего выведения лога.
Я так понимаю, это можно как-то сделать через XSLT?
В общем посоветуйте пожалуйста в какую сторону копать.

kill-still

Также рассматривается возможность чтобы из XSD генерились более кошерные классы чтобы они сами могли валидировать информацию, которая по ним распихивается. Или более придирчивый маршаллер, который будет обращать внимание на атрибуты, которые вставляет в генеримые классы JAXB.

psm-home

Нашёл такую штуку как javax.xml.validation.Validator но он выдаёт только первую ошибку и в неудобном формате с недостаточными данными для дальнейшего выведения лога.
Ну что только первую, это можно побороть.
 validator.setErrorHandler(new ErrorHandler{.../* из реализаций методов ничего не бросать! */}) 

kill-still

Тут ошибки выдаются в виде:
cvc-complex-type.2.4.a: Invalid content was found starting with element 'rbs'. One of '{"http://******.ru/types/1":ogrn}' is expected.
cvc-complex-type.2.4.b: The content of element 'okato' is not complete. One of '{"http://******.ru/types/1":code}' is expected.
Откуда узнать где там это произошло - невозможно.
Так что пока что вижу несколько способов решения:
1) написать самому парсер схемы на яве, который будет проверять XML.
2) то же самое но на XSLT
3) найти валидатор с открытым исходным кодом и допилить его.
Подскажите пожалуйста есть ли отрытая реализация javax.xml.validation.Validator? Если нет, то где почитать про алгоритм по которому там валидация происходит (чтобы велосипед не придумывать).

hiper-hoper

Подскажите пожалуйста есть ли отрытая реализация javax.xml.validation.Validator? Если нет, то где почитать про алгоритм по которому там валидация происходит (чтобы велосипед не придумывать).
т.е. ты даже по jdk поискать не удосужился?

kill-still

www.forumlocal.ru/negative
http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/valid...
Абзаца с "Direct Known Subclasses" как видишь нет.
Сейчас пользую валидатор от апача: org.apache.xerces.jaxp.validation.ValidatorImpl.
Он в бинарниках.

hiper-hoper

дебилушка, напишу ещё раз - поищи по jdk.

kill-still

hiper-hoper

спасибо, блеванул.
что ты этим вырвиглазием хотел сказать?

hiper-hoper

Сейчас пользую валидатор от апача: org.apache.xerces.jaxp.validation.ValidatorImpl.
Он в бинарниках.
кстати неумение или нежелание находить исходники открытой библиотеки тебя тоже характерно классифицирует.
Оставить комментарий
Имя или ник:
Комментарий: