首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RelaxNG:在<interleave>中有多个类似的元素

RelaxNG:在<interleave>中有多个类似的元素
EN

Stack Overflow用户
提问于 2022-04-08 10:41:07
回答 1查看 77关注 0票数 0

所需经费如下:

  • A提要将有多个链接
  • A "B“类型链接必须至少出现一次
  • "A”类型链接可能出现0次或更多次
  • “A”类型链接也可能出现在其他地方,因此需要保持定义独立的

我从代码中得到以下错误

lxml.etree.RelaxNGParseError: Element or text conflicts in interleave, line 6

下面的示例代码

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-09 15:10:01

我担心这是Relax规范禁止的典型案例

7.4.对交织的限制

对于模式p1 p2,

  • 不能同时属于由p1中的ref模式引用的元素模式的名称类和由p2中的ref模式引用的元素模式的名称类,文本模式不能同时出现在p1和p2.

中。

https://www.oasis-open.org/committees/relax-ng/spec-20011203.html#interleave-restrictions

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71795580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档