gpt4 book ai didi

xml - relaxng:模式定义无效?

转载 作者:数据小太阳 更新时间:2023-10-29 02:32:20 25 4
gpt4 key购买 nike

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

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

谁能解释原因并帮助我解决问题?

这是一个示例文档(为简单起见而设计):

列表测试.xml:

<?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>

这是一个工作正常的架构:

列表测试.rnc:

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:

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]*)*" }

}

最佳答案

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

你真的不能比在这里使用文本更好,也许还可以编写一两个 Schematron 规则。

关于xml - relaxng:模式定义无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5044787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com