You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用xmllint验证RELAX NG模式约束时遇type属性矛盾报错

解决RELAX NG 元素的类型参数报错问题

问题根源

你遇到的两个报错本质是RELAX NG默认结构命名空间不支持带参数的类型定义,但<data>元素又必须指定数据类型:

  • 带type="string"和<param>时,默认的http://relaxng.org/ns/structure/1.0命名空间下的<data>不允许使用类型参数,因此触发报错;
  • 移除type后,<data>元素缺少必填的类型定义,所以出现“data无类型”错误。

解决方案

要在RELAX NG XML语法中使用带参数的<data>,必须先导入数据类型模块,步骤如下:

  1. 在RELAX NG模式文档的根<grammar>元素中,添加数据类型模块的导入:
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
  <!-- 导入RELAX NG标准数据类型模块 -->
  <include href="http://relaxng.org/ns/structure/1.0/datatypes.rng"/>
  
  <!-- 自定义模式规则 -->
  <start>
    <element name="demo">
      <data type="string">
        <!-- 现在可合法添加类型参数 -->
        <param name="minLength">2</param>
        <param name="maxLength">20</param>
      </data>
    </element>
  </start>
</grammar>
  1. 确保<data>的type属性使用RELAX NG标准数据类型(如string、integer、date等),<param>的name对应该类型的合法参数(比如string类型支持minLength、pattern等参数)。

校验命令

用xmllint重新校验时,执行以下命令(假设模式文件为schema.rng,待校验XML为test.xml):

xmllint --relaxng schema.rng test.xml

内容的提问来源于stack exchange,提问作者U. Windl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:37:02