对于性能和准确性,您可以推荐哪些XML验证工具,其中每个都是我们系统中的一个关键问题?我们有以下要求:
为什么不呢?(这是背景,你可以跳过它,如果你愿意)
我们有一个大型的Perl系统,它使用RelaxNG来验证我们的XML。我们使用紧凑RelaxNG格式和三郎将其转换为标准的RelaxNG格式。然后通过xmllint进行实际验证。
这时问题就开始出现了。xmllint经常出现错误报告验证错误的问题。它不会给出假阳性或否定,但是如果文档无法验证,xmllint通常会为给定的错误报告错误的元素或属性。有时错误是正确的(“没想到会看到元素'bar'),但仅仅是因为以前没有报告错误(因为'bar‘应该遵循必需的但缺失的元素'foo',但xmllint没有告诉我们这一点)。请注意,这是xmllint长期存在的问题,即使最新版本也有相同的问题。我们经常有大量的XML文档,错误报告错误会给客户端和开发人员带来很大的痛苦。
发布于 2008-11-03 16:03:41
我认为JDrago有正确的想法,您需要避免使用基于libxml2 2的RNG验证工具,至少目前是这样。我在我的项目中也发现了这一点。最近,我在libxml2上记录了两个关于RNG验证的bug。
我推荐静。它是由James编写的,他是Relax的创建者,也是XML世界的领军人物之一。他也是trang的作者,你已经在使用它了。此代码(和trang)的开发最近在我链接到的Google站点上恢复。
我们的内容和模式一直被证明是正确的,并且提供了比libxml2更好的错误消息,尽管在这方面还有很大的改进余地。
pointing 2/xmllint的一个缺点是,它目前没有使用OASIS XML目录来解析公共和系统标识符,并且URI指向模式。如果您包含了由'http‘URI引用的模式,这将是一个问题--这些模式总是通过网络获取的。
发布于 2010-01-11 20:14:54
Hamcrest模式允许您使用RelaxNG匹配器根据RelaxNG验证XML文档。
发布于 2008-11-03 15:16:26
我怀疑xmllint使用与其他任何东西相同的底层库(libxml2等)。认为同一个库的另一个前端会给出不同的结果是违反直觉的。
https://stackoverflow.com/questions/258462
复制相似问题