使用RelaxNG进行XML模式验证

前端之家收集整理的这篇文章主要介绍了使用RelaxNG进行XML模式验证前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
您可以为性能和准确性推荐哪些XML验证工具,其中每个都是我们系统的关键问题?我们有以下要求:

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

为什么不xmllint? (这是背景,你可以跳过它,如果你喜欢)

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

那就是问题的发生。xmllint在错误地报告验证错误时常常有问题。它不会给出错误的肯定或否定,但如果文档无法验证,xmllint会经常为给定的错误报告错误的元素或属性。有时错误是正确的(“没想到看到元素’bar’),但只是因为以前的错误没有报告(因为’bar’应该是遵循所需但缺少的元素’foo’,但是xmllint不’请注意,这是xmllint的一个长期存在的问题,即使是最新版本也有同样的问题,我们经常有巨大的XML文档,并且错误地报告错误对客户端和开发人员造成了很大的伤害。

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

我推荐jing.它是由放松NG的创始人詹姆斯·克拉克(James Clark)和XML世界的领先灯之一撰写的。他也是tranG的作者,你已经在使用它了。最近在Google代码网站上恢复了此代码(和trang)的开发,我链接到上面。

Jing已经证明我们的内容和架构一直是正确的,并给出比libxml2更好的错误信息,尽管在这方面还有很大的改进空间。

关于libxml2 / xmllint的一个缺点是它目前没有使用OASIS XML目录来解析指向模式的公共和系统标识符和URI。这将是一个问题,如果您已经包含由“http”URI引用的模式 – 那些将始终通过网络获取

猜你在找的XML相关文章