您可以推荐哪些 XML 验证工具来提高性能和准确性,而这两个工具对于我们的系统来说都是一个关键问题?我们有以下要求:
- It is notxmllint(见下文)
- 支持RelaxNG
- 可以轻松地与 Perl 集成(这是可选的,但它会很好)
为什么不使用 xmllint? (这是背景,喜欢的可以跳过)
我们有一个大型 Perl 系统,它使用 RelaxNG 来验证我们的 XML。我们使用紧凑的RelaxNG格式 http://www.relaxng.org/compact-tutorial-20030326.html and trang http://www.thaiopensource.com/relaxng/trang.html将其转换为标准 RelaxNG 格式。然后我们通过以下方式进行实际验证xmllint http://xmlsoft.org/xmllint.html.
这就是问题出现的时候。xmllint 通常会出现错误报告验证错误的问题。它不会给出误报或漏报,但如果文档无法验证,xmllint 通常会报告给定错误的错误元素或属性。有时错误是正确的(“没想到会看到元素‘bar’),但只是因为未报告先前的错误(因为‘bar’应该遵循必需但缺少的元素‘foo’,但 xmllint 没有’请不要告诉我们这一点)。请注意,这是 xmllint 的一个长期存在的问题,甚至最新版本也存在同样的问题。我们经常有巨大的 XML 文档,误报错误会给客户和开发人员带来很大的痛苦。
我认为 JDrago 的想法是正确的,您需要避免使用基于 libxml2 的工具进行 RNG 验证,至少现在是这样。我在我的项目中也发现了这一点。我最近记录了两个有关 RNG 验证的 libxml2 错误。
我建议jing http://code.google.com/p/jing-trang/。它是由 Relax NG 的创建者和 XML 世界的领军人物之一 James Clark 编写的。他也是 trang 的作者,您已经在使用它了。这段代码(以及 trang)的开发最近在我上面链接到的 Google 代码网站上恢复了。
Jing 已证明我们的内容和模式始终正确,并且提供比 libxml2 更好的错误消息,尽管在这方面仍有很大的改进空间。
jing 相对于 libxml2/xmllint 的一个缺点是它目前不使用 OASIS XML 目录来解析公共和系统标识符以及指向模式的 URI。如果您包含由“http”URI 引用的模式,这将是一个问题——这些模式始终通过网络获取。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)