gpt4 book ai didi

xml - 在 Schematron 规则中,如何访问当前元素的父元素?

转载 作者:行者123 更新时间:2023-12-02 11:06:16 25 4
gpt4 key购买 nike

我正在使用 ISO Schematron 来验证 XML 文档。我设置的规则按要求工作,但我想从触发断言的上下文中报告父元素的名称。示例文档可能包含 XML 片段:

<Name>Alan Smith<br/></Name>

我的 Schematron 规则测试 <br/>元素只允许作为 <title> 的子元素出现元素。规则如下:

<rule context="br">
<assert test="parent::title"
>The "br" element is not allowed as a child of the '<iso:value-of select=".."/>' element.'</assert>
</rule>

当我对片段运行此规则时,断言被正确触发,但是我希望消息告诉我“不允许“br”元素作为“Name”元素的子元素”。相反,它实际上显示“不允许“br”元素作为“Alan Smith”元素的子元素”。所以<iso:value-of select=".."/>表达式实际上是选择文本节点而不是我预期的父元素?有人可以帮助解释我应该在 select 语句中使用什么 XPpath 表达式来在错误消息中显示父元素的名称吗?谢谢。

更新:我通过删除 select 语句并将其替换为名称元素来实现所需的结果,如下所示:

<rule context="br">
<assert test="parent::title"
>The "br" element is not allowed as a child of the '<name path=".."/>' element.'</assert>
</rule>

所以我的问题解决了,但如果有人能解释为什么我的第一次尝试不起作用,那将非常有帮助。

最佳答案

这就是value-of元素的工作原理。来自 http://www.schematron.com/iso/P8.html#GEN16

value-of element

Finds or calculates values from the instance document to allow clearer assertions and diagnostics. The required select attribute is an expression evaluated in the current context that returns a string.

Variable references in the select attribute are resolved in the scope of the current schema, phase, pattern and rule.

An implementation which does not report natural-language assertions is not required to make use of this element.

您可以使用此 XPath 表达式获取上下文节点的父级名称。

name(..)

关于xml - 在 Schematron 规则中,如何访问当前元素的父元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5622491/

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