首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RelaxNG:包含<zeroOrMore>的<choice>

RelaxNG:包含<zeroOrMore>的<choice>
EN

Stack Overflow用户
提问于 2011-10-26 18:02:22
回答 1查看 429关注 0票数 1

在RelaxNG中,我想描述一个类似于以下内容的结构:

代码语言:javascript
复制
<parent>
    <subelem1>
    <subelem1>
    <subelem1>
    ...
</parent>

或者:

代码语言:javascript
复制
<parent>
    <subelem2>
    <subelem2>
    <subelem2>
    ...
</parent>

我尝试使用以下rng:

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

这是怎么回事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-26 22:33:17

我使用的模式与您的略有不同,但它的功能应该是相同的:

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

使用jingxmllint (如果我没记错的话,它使用libxml2和python中的lxml )都可以很好地验证您的示例文档。我建议将你的完整语法(我假设你只发表了其中的一部分)与上面的比较。此外,我还更正了您的名称空间( choice元素不在其中)。如果你仍然不能验证,我建议问题出在lxml而不是语法上。

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

https://stackoverflow.com/questions/7901195

复制
相关文章

相似问题

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