gpt4 book ai didi

xml - 使用 Relax NG 允许附加属性

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

我正在编写一个放松 NG 模式来验证一些 XML 文件。对于大多数元素,有一些必需的属性,并且此 XML 模式的实例还可以添加任何额外的属性。

例如,这是一个有效的文档:

<?xml version="1.0" encoding="utf-8" ?>
<root xmlns:param="some-uri#params">
<someElement
param:requiredAttribute1="foo"
param:requiredAttribute2="bar"
param:freeExtraParam="toto"
param:freeExtraParam="titi" />
</root>

在我的 Relax NG 模式中,我是这样表达的:

<?xml version="1.0" encoding="utf-8" ?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<element name="someElement" >
<attribute name="requiredAttribute1" />
<attribute name="requiredAttribute2" />

<!-- Any extra param -->
<zeroOrMore>
<attribute>
<nsName ns="some-uri#params" />
</attribute>
</zeroOrMore>
</element>
</start>
</grammar>

但是,当我尝试使用 jing 验证我的文档时,它提示我的架构无效:

 error: duplicate attribute "requiredAttribute1" from namespace "some-uri#params"

我猜这是因为 requiredAttribute1 也匹配“任何属性”规则。这样做的正确方法是什么?

提前致谢,拉斐尔

最佳答案

第一点 start 元素是定义 XML 根元素的地方。不能在此开始元素中包含属性。

关于您的属性:以下架构,使用 except 应该是您的答案:

<grammar 
xmlns="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<element name="root">
<ref name="someElement"/>
</element>
</start>
<define name="someElement">
<element name="someElement">
<zeroOrMore>
<attribute ns="some-uri#params">
<anyName>
<except>
<name>requiredAttribute1</name>
<name>requiredAttribute2</name>
</except>
</anyName>
</attribute>
</zeroOrMore>
<attribute ns="some-uri#params" name="requiredAttribute1"/>
<attribute ns="some-uri#params" name="requiredAttribute2"/>
</element>
</define>
</grammar>

关于xml - 使用 Relax NG 允许附加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330524/

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