首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >relaxng:无效的模式定义?

relaxng:无效的模式定义?
EN

Stack Overflow用户
提问于 2011-02-19 01:54:43
回答 1查看 615关注 0票数 3

我正在尝试使用RELAX-NG为一些XML文档编写模式,当我将其与jing一起使用时,我得到了一条我不理解的错误消息:

代码语言:javascript
复制
C:\tmp\xml>java -jar jing.jar -c list-test2.rnc list-test.xml
C:\tmp\xml\list-test2.rnc:6:10: error: repeat of "string" or "data" element

有人能解释一下原因并帮助我解决这个问题吗?

下面是一个示例文档(为简单起见):

list-test.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<list-test>
    <list name="list1">
        foo.bar.baz
        quux
        be.bop.a.loo.bop
        <hole name="somename" />
        tutti.frutti
        abc678.foobar
    </list>
    <list name="list2">
        test1
        test2
        test3
        <hole name="hole1" />
        <hole name="hole2" />
        test4
        <hole name="hole3" />
    </list>
</list-test>

下面是一个工作正常的模式:

list-test.rnc:

代码语言:javascript
复制
grammar {

start = element list-test { list-test-content }

list-test-content = 
    (element list { list-content })*

list-content =
    attribute name { text },
    (text | hole-element)*

hole-element = 
    element hole { hole-content }

hole-content =
    attribute name { text }

}

但是,当我尝试用特定的文本模式替换通用的text节点时,我得到了错误。

list-test2.rnc:

代码语言:javascript
复制
grammar {

start = element list-test { list-test-content }

list-test-content = 
    (element list { list-content })*

list-content =
    attribute name { identifier },
    (qualified-identifier | hole-element)*

hole-element = 
    element hole { hole-content }

hole-content =
    attribute name { identifier }

identifier =
    xsd:token { pattern="[A-Za-z_][A-Za-z_0-9]*" }

qualified-identifier =
    xsd:token { pattern="[A-Za-z_][A-Za-z_0-9]*(\.[A-Za-z_][A-Za-z_0-9]*)*" }   

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-19 07:12:41

您遇到了RELAX NG的一个基本限制:元素的内容可以是复杂的(包含文本模式、元素模式、序列模式、交错模式和量词模式),也可以是简单的(包含数据模式、值模式和列表模式),但不能同时包含这两种模式。(当然,可以在复杂和简单的内容之间进行选择。)

在这里使用文本,或者编写一两条Schematron规则,真的是再好不过了。

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

https://stackoverflow.com/questions/5044787

复制
相关文章

相似问题

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