Schematron / preceding-sibling 和 following-sibling 是同一个元素
Schematron / preceding-sibling and following-sibling are the same element
拼命想让 Schematron 仅在 EFFECT 元素位于两个 SUBTASK 元素之间时才发出警报 - 它们彼此是兄弟。非常感谢任何帮助,如果需要更多信息,请告诉我。
下面是一些简单的示例代码:
<TOPIC>
<SUBTASK></SUBTASK>
<EFFECT></EFFECT>
<SUBTASK></SUBTASK>
</TOPIC>
这是我的两个 Schematron 尝试 - 问题是它对文档中的每个 EFFECT 发出警报,而不是仅在两个 SUBTASK 之间发出警报。 *注意 - EFFECT 是一个通配符,在任何地方都可以使用。
<rule context="EFFECT">
<assert test="preceding-sibling::*[position()[1]][SUBTASK] = following-sibling::*[position()[1]][SUBTASK]" role="error" id="error_EFFECT_between_SUBTASK"
>EFFECT not allowed between two SUBTASKs</assert>
</rule>
<rule context="EFFECT">
<assert test="count(preceding-sibling::*[position()>0]) and preceding-sibling::*[position()[1]][SUBTASK] = following-sibling::*[position()[1]][SUBTASK]" role="error" id="error_EFFECT_between_SUBTASKs"
>EFFECT not allowed between two SUBTASK</assert>
</rule>
您拥有大部分作品,但缺少 'self' 轴的 self::
。尝试(未测试):
<rule context="EFFECT">
<assert test="preceding-sibling::*[1][self::SUBTASK] and
following-sibling::*[1][self::SUBTASK]"
role="error" id="error_EFFECT_between_SUBTASKs"
>EFFECT not allowed between two SUBTASK</assert>
</rule>
如果有 SUBTASK
个子元素,[SUBTASK]
为真,如果上下文元素为 SUBTASK
.
,则不为真
[position()[1]]
可能是 XPath 1.0 的错误,但在 XPath 2.0 或 XPath 3.0 中,每次都是正确的,因为 position()
returns 是一个非零数字, [1]
将单项数字序列减少到序列中的第一个(也是唯一一个)数字。
拼命想让 Schematron 仅在 EFFECT 元素位于两个 SUBTASK 元素之间时才发出警报 - 它们彼此是兄弟。非常感谢任何帮助,如果需要更多信息,请告诉我。
下面是一些简单的示例代码:
<TOPIC>
<SUBTASK></SUBTASK>
<EFFECT></EFFECT>
<SUBTASK></SUBTASK>
</TOPIC>
这是我的两个 Schematron 尝试 - 问题是它对文档中的每个 EFFECT 发出警报,而不是仅在两个 SUBTASK 之间发出警报。 *注意 - EFFECT 是一个通配符,在任何地方都可以使用。
<rule context="EFFECT">
<assert test="preceding-sibling::*[position()[1]][SUBTASK] = following-sibling::*[position()[1]][SUBTASK]" role="error" id="error_EFFECT_between_SUBTASK"
>EFFECT not allowed between two SUBTASKs</assert>
</rule>
<rule context="EFFECT">
<assert test="count(preceding-sibling::*[position()>0]) and preceding-sibling::*[position()[1]][SUBTASK] = following-sibling::*[position()[1]][SUBTASK]" role="error" id="error_EFFECT_between_SUBTASKs"
>EFFECT not allowed between two SUBTASK</assert>
</rule>
您拥有大部分作品,但缺少 'self' 轴的 self::
。尝试(未测试):
<rule context="EFFECT">
<assert test="preceding-sibling::*[1][self::SUBTASK] and
following-sibling::*[1][self::SUBTASK]"
role="error" id="error_EFFECT_between_SUBTASKs"
>EFFECT not allowed between two SUBTASK</assert>
</rule>
如果有 SUBTASK
个子元素,[SUBTASK]
为真,如果上下文元素为 SUBTASK
.
[position()[1]]
可能是 XPath 1.0 的错误,但在 XPath 2.0 或 XPath 3.0 中,每次都是正确的,因为 position()
returns 是一个非零数字, [1]
将单项数字序列减少到序列中的第一个(也是唯一一个)数字。