Что вы используете для проверки по схеме XML?

Когда я хочу проверить свои XML-документы на соответствие схеме в моей серверной Java, я использую встроенную реализацию JRE Xerces и javax.xml.validation.Schema. Он работает нормально, но при сбое проверки Xerces выдает сообщения об ошибках, которые очень близки к бесполезным, например:

cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type 'PopulatedStringType'

Для диагностики и отслеживания конкретной части XML-документа, не прошедшей проверку, может потребоваться время, и все из-за плохого сообщения об ошибке.

Итак, мой вопрос: используете ли вы альтернативные средства проверки XML по схеме, которые дают более полезный результат при неудачной проверке?

Обратите внимание, что это серверная Java, поэтому, пожалуйста, не говорите «использовать XML Spy» или что-то подобное.

звучит для меня довольно ясным сообщением об ошибке: оно указывает на то, что тип PopulatedStringType, указанный в вашей схеме XML, имеет аспект minLength, который был нарушен вашим экземпляром XML?

toolkit 30.09.2008 20:44

+1 @toolkit Вы можете подумать о том, чтобы потратить немного времени на изучение сообщений об ошибках Xerces. Я сомневаюсь, что другой валидатор был бы намного понятнее.

ykaganovich 30.09.2008 21:54

Я прекрасно понимаю сообщение, но вы пытаетесь найти, какая часть 10-мегабайтного XML-документа нарушает схему, если в сообщении об ошибке вам ничего не сказано. Эти документы содержат тысячи элементов PopulatedStringType с множеством разных имен элементов. Найти подходящую практически невозможно.

skaffman 30.09.2008 23:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
1 111
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Мы используем Oracle XDK (комплект разработчика XML), который включает xmlparserv2.jar с проверяющим парсером и XSLT 2.0. Он использует JAXB API, поэтому вам нужно только добавить его в свой путь к классам и изменить свой импорт. Он выдает ошибки, которые не идеальны, но я бы сказал, что их легче понять, чем ваш пример.

xmlstarlet (xmlstar.sourceforge.net/) - это набор инструментов командной строки. вы можете запустить его с помощью Runtime.exec () для заданного xml (пока xml находится в файле).

Мы используем Кастор.

Castor is an Open Source data binding framework for Java[tm]. It's the shortest path between Java objects, XML documents and relational tables. Castor provides Java-to-XML binding, Java-to-SQL persistence, and more.

Почему вы используете Castor и как это помогает в моей проблеме?

skaffman 03.10.2008 11:22
Ответ принят как подходящий

В вашем обработчике для проверки вы должны получить SAXParseException с этим сообщением, а также номер столбца и номер строки в XML-файле. Разве это не так?

Если у вас возникли проблемы с интерпретацией ошибок Xerces и вы хотите что-то, что поможет выделить, где в вашем документе вы нарушили правила, ознакомьтесь с некоторыми инструментами создания XML, такими как кислород.

alt text
(source: oxygenxml.com)

После того, как вы свяжете схему с вашим экземпляром XML-документа, редактор выделит проблемную область документа и предоставит вам описание нарушения.

Кроме того, вы можете использовать разные механизмы для выполнения проверки:

oXygen has built-in support for: Xerces, LIBXML, XSV, Saxon SA, MSXML4.0, MSXML .NET and SQC.

Другие вопросы по теме