放松:在Interleave>
要求是这样的:
- 一个提要将有多个链接
- “B”类型链接必须至少出现一次
- “A”类型链接可以出现零次或多次
- “A”类型链接也可以出现在其他地方,因此需要保留定义独立
我的代码出现以下错误
lxml.etree.RelaxNGParseError:交错中的元素或文本冲突,第 6 行
下面的示例代码
from io import StringIO
from lxml import etree
XML = StringIO('''
<root xmlns="http://www.w3.org/2005/Atom">
<link rel="a1" />
<link rel="b1" />
<link rel="a2" />
<link rel="b2" />
</root>
''')
RNG = StringIO('''
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="root" ns="http://www.w3.org/2005/Atom">
<interleave>
<zeroOrMore>
<ref name="aLink"/>
</zeroOrMore>
<oneOrMore>
<ref name="bLink"/>
</oneOrMore>
</interleave>
</element>
</start>
<define name="aLink" ns="http://www.w3.org/2005/Atom">
<element name="link">
<choice>
<attribute name="rel">
<value>a1</value>
</attribute>
<attribute name="rel">
<value>a2</value>
</attribute>
</choice>
</element>
</define>
<define name="bLink" ns="http://www.w3.org/2005/Atom">
<element name="link">
<choice>
<attribute name="rel">
<value>b1</value>
</attribute>
<attribute name="rel">
<value>b2</value>
</attribute>
</choice>
</element>
</define>
</grammar>
''')
rng_tree = etree.parse(RNG)
rng_schema = etree.RelaxNG(rng_tree)
rng_schema.validate(XML)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我担心这是一个典型的情况,被放松的规格禁止
I fear that it's a typical case that is forbidden by the specification of Relax NG
https://www.oasis-open.org/committees/relax-ng/spec-20011203.html#interleave-restrictions