在RelaxNG中,我想描述一个类似于以下内容的结构:
<parent>
<subelem1>
<subelem1>
<subelem1>
...
</parent>或者:
<parent>
<subelem2>
<subelem2>
<subelem2>
...
</parent>我尝试使用以下rng:
<rng:element name="parent">
<rng:choice>
<rng:zeroOrMore>
<rng:ref name="subelem1"/>
</rng:zeroOrMore>
<rng:zeroOrMore>
<rng:ref name="subelem2"/>
</rng:zeroOrMore>
</rng:choice>
</rng:element>但是在Python语言中使用lxml进行验证时,我只得到了错误消息Did not expect element subelem1 there。
这是怎么回事?
发布于 2011-10-26 22:33:17
我使用的模式与您的略有不同,但它的功能应该是相同的:
<rng:grammar
xmlns:rng="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<rng:start>
<rng:ref name="dparent"/>
</rng:start>
<rng:define name="dparent">
<rng:element name="parent">
<rng:choice>
<rng:zeroOrMore>
<rng:element name="subelem2">
<rng:empty/>
</rng:element>
</rng:zeroOrMore>
<rng:zeroOrMore>
<rng:element name="subelem1">
<rng:empty/>
</rng:element>
</rng:zeroOrMore>
</rng:choice>
</rng:element>
</rng:define>
使用jing和xmllint (如果我没记错的话,它使用libxml2和python中的lxml )都可以很好地验证您的示例文档。我建议将你的完整语法(我假设你只发表了其中的一部分)与上面的比较。此外,我还更正了您的名称空间( choice元素不在其中)。如果你仍然不能验证,我建议问题出在lxml而不是语法上。
https://stackoverflow.com/questions/7901195
复制相似问题