17

对于性能和准确性,您可以推荐哪些 XML 验证工具,每一个都是我们系统的关键问题?我们有以下要求:

  • 不是xmllint(见下文)
  • 支持RelaxNG
  • 可以轻松地与 Perl 集成(这是可选的,但它会很好)

为什么不是 xmllint?(这是背景,喜欢的可以跳过)

我们有一个大型 Perl 系统,它使用 RelaxNG 来验证我们的 XML。我们使用紧凑的 RelaxNG 格式trang将其转换为标准的 RelaxNG 格式。然后我们通过xmllint进行实际验证。

这就是问题出现的时候。xmllint 通常在错误地报告验证错误方面存在问题。它不会给出错误的肯定或否定,但如果文档验证失败,xmllint 经常会报告给定错误的错误元素或属性。有时错误是正确的(“没想到会看到元素'bar'),但这只是因为没有报告先前的错误(因为'bar'应该遵循必需但缺少元素'foo',但xmllint没有' t 告诉我们那一点)。请注意,这是 xmllint 长期存在的问题,甚至最新版本也有同样的问题。我们经常有巨大的 XML 文档,误报错误会给客户和开发人员带来很大的痛苦。

4

5 回答 5

15

我认为 JDrago 的想法是正确的,您需要避免使用基于 libxml2 的工具进行 RNG 验证,至少目前是这样。我也在我的项目中发现了这一点。我最近记录了两个关于 RNG 验证的针对 libxml2 的错误。

我推荐。它是由 Relax NG 的创建者和 XML 世界的领军人物之一 James Clark 编写的。他也是 trang 的作者,您已经在使用它。这段代码(和 trang)的开发最近在我上面链接到的 Google 代码网站上恢复了。

Jing 已经证明我们的内容和架构始终是正确的,并且提供比 libxml2 更好的错误消息,尽管在这方面仍有很大的改进空间。

jing 相对于 libxml2/xmllint 的一个缺点是它目前不使用 OASIS XML 目录来解析公共和系统标识符以及指向模式的 URI。如果您包含由“http”URI 引用的模式,这将是一个问题——这些模式总是会通过网络获取。

于 2008-11-03T16:03:41.167 回答
3

Hamcrest Schema允许您使用 Hamcrest 匹配器针对 RelaxNG 验证 XML 文档。

于 2010-01-11T20:14:54.810 回答
2

我怀疑 xmllint 使用与其他任何东西相同的底层库(libxml2 等)。认为同一个库的另一个前端会给出不同的结果是违反直觉的。

于 2008-11-03T15:16:26.317 回答
2

rnv非常快速、免费(就像在言论自由中一样)并且在命令行上运行(因此 Perl 可以轻松调用它)。大多数情况下,消息都可以。不幸的是,它似乎不再维护。

于 2008-12-23T09:05:22.667 回答
2

我是 RNV 的作者。它在 sourceforge.net 上维护,并且有一个维护者负责 sourceforge 和 debian 包的构建。事实是代码没有改变是因为代码是稳定的。没有报告错误。

于 2008-12-23T10:07:08.597 回答