尝试 RELAX NG 模式方面时,来自 xmllint 的有关“类型”的令人困惑的消息

问题描述 投票:0回答:1

我还在学习RELAX NG,有些输入需要我用模式检查数据内容。 在网上搜索后,我尝试了这个(片段,根据最简单的可能模式方面中的示例建模):

  <define name="DT.Test">
    <a:documentation>Data Type: test</a:documentation>
    <data type="string">
      <param name="pattern">"[0-9]+"</param>
    </data>
  </define>

但是,当使用它运行

xmllint
时,我收到一条错误消息:

元素数据:Relax-NG 解析器错误:类型库“http://relaxng.org/ns/struct/1.0”不允许类型参数

所以我删除了

type
参数并再次尝试使用此定义:

  <define name="DT.Test">
    <a:documentation>Data Type: test</a:documentation>
    <data>
      <param name="pattern">"[0-9]+"</param>
    </data>
  </define>

令人惊讶的是,消息是:

元素数据:Relax-NG 解析器错误:数据没有类型

所以看起来

xmllint
对以下两者都不满意:指定一个
type
属性,而不指定一个属性。 我很困惑。

附录

版本
xmllint

> xmllint --version
xmllint: using libxml version 20904
   compiled with: Threads Tree Output Push Reader Patterns Writer SAXv1 FTP HTTP DTDValid HTML Legacy C14N Catalog XPath XPointer XInclude Iconv ISO8859X Unicode Regexps Automata Expr Schemas Schematron Modules Debug Zlib Lzma
types pattern-matching relaxng
1个回答
0
投票

我仍然不太明白这些消息,但是向

datatypeLibrary
元素添加
data
属性会让
xmllint
高兴:

  <define name="DT.Test">
    <a:documentation>Data Type: Test</a:documentation>
    <data datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
          type="string">
      <param name="pattern">"[0-9]+"</param>
    </data>
  </define>
© www.soinside.com 2019 - 2024. All rights reserved.