我正在尝试制作xmllint来验证这个架构。不幸的是,我遇到了一些奇怪的问题。看起来,xmllint错误的可选参数没有包含交织标记。下面是一些带有拼写错误的标记person的测试模式,应该由xmllint发出信号。不幸的是,xmllint正在攻击其他一些不存在的bug。请看一看也许我做错了什么:
<?xml version="1.0" encoding="ISO-8859-1"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<define name="testproject">
<element name="testproject">
<ref name="overview"/>
<ref name="tests"/>
</element>
</define>
<define name="overview">
<element name="overview">
<ref name="title"/>
<oneOrMore>
<ref name="person"/>
</oneOrMore>
</element>
</define>
<define name="tests">
<element name="tests">
<choice>
<attribute name="file"/>
<group>
<ref name="title"/>
<optional>
<ref name="field"/>
</optional>
<optional>
<ref name="field2"/>
</optional>
<optional>
<ref name="field3"/>
</optional>
<choice>
<zeroOrMore>
<ref name="test"/>
</zeroOrMore>
<zeroOrMore>
<ref name="tests"/>
</zeroOrMore>
</choice>
</group>
</choice>
</element>
</define>
<define name="test">
<element name="test">
<attribute name="name"/>
<interleave>
<optional>
<ref name="title"/>
</optional>
<ref name="field"/>
<zeroOrMore>
<ref name="person"/>
</zeroOrMore>
</interleave>
</element>
</define>
<define name="title">
<element name="title">
<text/>
</element>
</define>
<define name="field">
<element name="field">
<text/>
</element>
</define>
<define name="field2">
<element name="field2">
<text/>
</element>
</define>
<define name="field3">
<element name="field3">
<text/>
</element>
</define>
<define name="person">
<element name="person">
<text/>
</element>
</define>
<start>
<ref name="testproject"/>
</start>
</grammar>和xml文件内容:
<?xml version="1.0" encoding="ISO-8859-1"?>
<testproject>
<overview>
<title>
some title
</title>
<person>J33nn</person>
</overview>
<tests>
<title>
Some title test
</title>
<field>as</field>
<test name="TestName">
<title>Some title</title>
<field>
dasdasd
</field>
<peron>J33nn</peron>
</test>
</tests>
</testproject>它没有报告拼写错误的标签,而是报告了如下内容:
元素字段:Relax有效性错误:元素测试有额外的内容:字段
发布于 2014-02-25 16:14:25
当我使用模式在您的XML文件上运行xmllint时,我会得到您报告的相同错误。但是,请注意,<field>as</field>报告了错误,这完全没有意义,因为该元素在该位置上应该是可接受的。
如果我使用jing来执行验证,我会得到:
test.xml:23:16: error: element "peron" not allowed anywhere; expected the element end-tag or element "person"这是一个更明智的结果。我确信jing是对的,xmllint是错的。
https://stackoverflow.com/questions/22017164
复制相似问题