Какие инструменты проверки XML вы можете порекомендовать с точки зрения производительности и точности, каждый из которых является критической проблемой в нашей системе? У нас есть следующие требования:
- Это не xmllint (см. ниже)
- Поддерживает RelaxNG
- Может легко интегрироваться с Perl (это необязательно, но было бы неплохо)
Почему не xmlint? (Это фон, и вы можете пропустить его, если хотите)
У нас есть большая система Perl, которая использует RelaxNG для проверки нашего XML. Мы используем компактный формат RelaxNG и trang, чтобы преобразовать его в стандартный формат RelaxNG. Затем мы выполняем фактическую проверку через xmllint.
Вот когда начинаются проблемы. xmllint обычно имеет проблемы с неправильным сообщением об ошибках проверки. Он не дает ложных положительных или отрицательных результатов, но если документ не проходит проверку, xmllint часто сообщает о неправильном элементе или атрибуте для данной ошибки. Иногда ошибка верна («не ожидал увидеть элемент «bar»), но только потому, что о предыдущей ошибке не сообщалось (поскольку «bar» должен был следовать за обязательным, но отсутствующим элементом «foo», но xmllint не не говорите нам об этом). Обратите внимание, что это давняя проблема с xmllint, и даже в последней версии есть те же проблемы. У нас часто есть огромные XML-документы, и неправильное сообщение об ошибках причиняет много страданий как клиентам, так и разработчикам.