使用 RelaxNG 进行 XML 模式验证

2024-01-19

您可以推荐哪些 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(使用前将#替换为@)

使用 RelaxNG 进行 XML 模式验证 的相关文章

  • 使用字符串数组填充 Spinner

    当谈到 Android 应用程序时 我属于新手联盟 我希望用数组或字符串填充 Spinner 它是一个转换器应用程序 下面是我的 XML 文件的摘录 我希望填充 Spinner
  • Java SWT 用户输入验证

    在 SWT 中进行用户输入验证时 Java 约定是什么 我读到有 FieldEditors 它们是非常方便的字段 但遗憾的是仅适用于首选项和对话框 我还了解到有一个 IValidator 接口 但它经常与数据绑定一起使用 就我而言 我的大多
  • JQuery 验证代码不允许删除输入的文本

    我从这个问题借用了一些代码 见回复4 如何使用 jquery 阻止或限制输入字段中的特殊字符 https stackoverflow com questions 895659 how do i block or restrict speci
  • 膨胀类片段 InflateException 二进制 XML 文件时出错

    我正在使用 Material Design 和 NavigationDrawer 布局等设计我的第一个应用程序 但我遇到了一个问题 该应用程序非常简单 它只显示文本 并且基于 Android Studio 中提供的模板 尝试启动我的应用程序
  • 如何使用 SAX Java 解析器读取注释文本

    我只想使用 Java 中的 SAX 解析器读取 XML 文件中对象标记的注释 这是我的文件的摘要
  • 如何在 Go 中解组具有多个项目的简单 xml?

    我想从以下 xml 中获取人物 People 的一部分
  • Django 和自定义表单验证

    我正在尝试创建一个自定义表单字段并对其进行验证 这是 Django 1 0 版本 这是我的表单对象 class UsernameField forms CharField def clean self values print 我是这样称呼
  • 我想使用对话框显示两个数字选择器

    我试图仅使用 java 在对话框上显示两个数字选择器 代码正在工作 但我无法将其排列为相等的宽度 这是我的代码 RelativeLayout relative new RelativeLayout mContext final Number
  • 根据 MVC 中的文化的日期时间格式

    我有一个 MVC 视图 其中列出了一个名为 CreatedOn 的日期时间类型列 值的格式如下 日 月 年 时 分 秒 当我单击编辑链接修改值时 我获得相同的格式 当我修改编辑值时 出现验证错误 字段 CreatedOn 必须是日期 我的
  • 无法安装 WWW::Curl::Easy: SZBALINT/WWW-Curl-4.17.tar.gz : make NO

    我正在尝试在我的 Fedora 26 机器上安装 WWW Curl Easy gcc c I usr include D REENTRANT D GNU SOURCE O2 g pipe Wall Werror format securit
  • 允许 .NET WebApi 忽略 DOCTYPE 声明

    我正在尝试通过 WebApi 方法将 XML 反序列化为对象 我有以下课程 XmlRoot IsNullable false public class MyObject XmlElement Name public string Name
  • 在没有 validate-plugin 的情况下使用 jQuery 验证 url?

    我需要验证一个网址variable使用 jQuery 但不能使用 validate plugin 有没有一种简单的方法可以做到这一点 您可以使用与验证插件相同的正则表达式 已于 2015 年 5 月 23 日更新为最新正则表达式 funct
  • 如何将数据库查询的行转换为 XML 文件?

    我正在开发一个 Delphi 应用程序 该应用程序需要从一段工作中获取行并将其转换为单个 XML 文件 以便上传到第三方 Web 服务 有没有可用的组件或库可以做到这一点 如果不是 那么构建 DB2XML 转换器的最佳代码方法是什么 我注意
  • 在 XSD 中哪里放置版权信息?

    将版权信息放入 XML 架构定义 XSD 时 是否有官方 或半官方 普遍接受的 位置 基于在哪里将版本添加到 XSD 架构 https stackoverflow com questions 2138705 where to add a v
  • JAXB - 忽略元素

    有什么方法可以忽略 Jaxb 解析中的元素吗 我有一个很大的 XML 文件 如果我可以忽略其中一个大而复杂的元素 那么它的解析速度可能会快很多 如果它根本无法验证元素内容并解析文档的其余部分 即使该元素不正确 那就更好了 例如 这应该只生成
  • ASCII“../”是 PHP 中指示目录遍历的唯一字节序列吗?

    我有一个 PHP 应用程序 它使用 GET参数来选择文件系统上的 JS CSS 文件 如果我拒绝输入字符串包含的所有请求 或者可见 7 位 ASCII 范围之外的字节 当路径传递到 PHP 的底层 基于 C 文件函数时 这是否足以防止父目录
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • 具有挑战性的问题 - 使用 PHP 对 XML 数据进行排序

    我有 xml 文件 其中包含大量产品数据 我需要根据我的字段 ProductRange 的数据对我的产品进行排序 ProductRange urldecode GET Range XML 文件数据
  • 在 FOR 循环中打印唯一值

    我有两个文件 myresult 和 annotation 两个文件中的数据似乎是范围 但事实并非如此 这就是为什么我无法将其存储在数组中 我需要使用拆分运算符 以便我可以在 for 循环中使用它并进行比较 现在我需要打印 i myresul
  • 角度 4 单击按钮功能未触发

    我正在尝试检查文本输入是否为空或不在角度 4 中 我没有为此使用表单 这只是一个输入字段 当我在下面的按钮中执行 addLocaton 函数时 需要进行检查 我的输入字段

随机推荐