Проверка схемы XML с помощью RelaxNG - PullRequest
16 голосов
/ 03 ноября 2008

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

  • Это , а не xmllint (см. Ниже)
  • Поддерживает RelaxNG
  • Может легко интегрироваться с Perl (это необязательно, но было бы неплохо)

Почему бы не xmllint? (Это фон, и вы можете пропустить его, если хотите)

У нас есть большая система Perl, которая использует RelaxNG для проверки нашего XML. Мы используем компактный формат RelaxNG и trang , чтобы преобразовать его в стандартный формат RelaxNG. Затем мы делаем фактическую проверку через xmllint .

Вот тогда-то и возникают проблемы. У xmllint обычно возникают проблемы с неправильным сообщением об ошибках проверки. Он не дает ложных положительных или отрицательных результатов, но если документ не проходит проверку, xmllint часто сообщает о неверном элементе или атрибуте для данной ошибки. Иногда ошибка является правильной («не ожидал увидеть элемент« bar »), но только потому, что не сообщалось о предыдущей ошибке (потому что« bar »должен был следовать за обязательным, но отсутствующим элементом« foo », а xmllint не делает» не говорите нам об этом). Обратите внимание, что это давняя проблема с xmllint, и даже в самой последней версии есть те же проблемы. У нас часто бывают огромные XML-документы, и неправильная отчетность об ошибках вызывает много горя как у клиентов, так и у разработчиков.

Ответы [ 5 ]

14 голосов
/ 03 ноября 2008

Я думаю, что у JDrago правильная идея, что вам нужно избегать основанных на libxml2 инструментов для проверки ГСЧ, по крайней мере, на данный момент. Я обнаружил это и в моем проекте. Недавно я зарегистрировал две ошибки в libxml2, касающиеся проверки ГСЧ.

Я рекомендую Цзин . Он был написан Джеймсом Кларком, создателем Relax NG и одним из ведущих разработчиков в мире XML. Он также является автором транга, который вы уже используете. Разработка этого кода (и Trang) недавно возобновилась на сайте Google Code, на который я ссылаюсь выше.

Jing доказал свою корректность в отношении нашего контента и схемы и дал гораздо лучшие сообщения об ошибках, чем libxml2, хотя в этом отношении еще многое можно улучшить.

Единственный недостаток jing в отношении libxml2 / xmllint заключается в том, что в настоящее время он не использует XML-каталоги OASIS для разрешения общедоступных и системных идентификаторов и URI, указывающих на схемы. Это может быть проблемой в случае, если вы включили схемы, на которые ссылается URI «http» - они всегда будут выбираться по сети.

3 голосов
/ 11 января 2010

Схема Hamcrest позволяет проверять XML-документы на соответствие RelaxNG с использованием Hamcrest Matchers.

2 голосов
/ 23 декабря 2008

Я автор RNV. Он поддерживается на sourceforge.net, и есть сопровождающий, который заботится о сборках пакетов как sourceforge, так и debian. Дело в том, что код не изменился из-за стабильности кода. Об ошибках не сообщается.

2 голосов
/ 23 декабря 2008

rnv очень быстрый, бесплатный (как в свободе слова) и запускается в командной строке (поэтому Perl может легко вызывать его). В большинстве случаев сообщения в порядке. К сожалению, похоже, больше не поддерживается.

2 голосов
/ 03 ноября 2008

Я подозреваю, что xmllint использует те же базовые библиотеки (libxml2 и т. Д.), Что и все остальное. Противоречиво думать, что другой интерфейс той же библиотеки даст другие результаты.

...