gpt4 book ai didi

xml - 如何使用 RelaxNG 检查属性是否唯一?

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

使用 RelaxNG,我可以检查属性值在封闭元素中是否唯一吗?

例如,这个城堡应该验证:

<castle>
<room>
<door to="North" />
<door to="South" />
</room>
<room>
<door to="North" />
</room>
</castle>

但这不应该(在同一 room 中有重复的门):

<castle>
<room>
<door to="Dungeon" />
<door to="Dungeon" />
</room>
</castle>

我正在使用 RelaxNG(紧凑型)。我不知道“提前”的属性值,只知道它们在 room 中应该是唯一的。

谢谢!

最佳答案

据我所知,这不能在纯 RELAX NG 中完成。您可以使用(嵌入式)Schematron,就像我们对 Citation Style Language schema 所做的那样.如果您确实采用这种方式,请注意并非所有 RELAX NG 验证器都解析嵌入式 Schematron,并且对独立 Schematron 模式的支持也是有限的。例如。热门Jing XML 验证器仅支持较旧的 Schematron 1.5 版本,不支持较新的 ISO Schematron。

对于我们使用 Jing 的项目,我们使用 script首先将我们的 RELAX NG Compact 模式转换为 RELAX NG XML 格式(使用 Trang ),然后将 Schematron 规则从 RELAX NG XML 模式提取到独立的 Schematron 模式(使用 SaxonRNG2Schtrn.xsl XSLT 样式表), 最后用 Jing 对提取的 Schematron 模式进行验证。

如果这没有吓到您,我针对您的问题拼凑了以下 Schematron 1.5 模式:

<?xml version="1.0" encoding="UTF-8"?>
<sch:schema xmlns:sch="http://www.ascc.net/xml/schematron">
<sch:pattern name="duplicateAttributeValues">
<sch:rule context="//room/door[@to]">
<sch:report test="preceding-sibling::door/@to = @to">Warning: @to values should be unique for a given room.</sch:report>
</sch:rule>
</sch:pattern>
</sch:schema>

在以下 XML 文档上运行时,

<?xml version="1.0" encoding="utf-8"?>
<castle>
<room>
<door to="North"/>
<door to="South"/>
<door to="West"/>
</room>
<room>
<door to="West"/>
<door to="North"/>
<door to="West"/>
</room>
</castle>

Jing will report

Error: Warning: @to values should be unique for a given room.
From line 11, column 5; to line 11, column 21
th"/>↩ <door to="West"/>↩ </r

关于xml - 如何使用 RelaxNG 检查属性是否唯一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18609355/

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