我还在学习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
我仍然不太明白这些消息,但是向
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>