Подтвердить что ты не робот

Проверка схемы XML с помощью RelaxNG

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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