Schematron,用于检查另一个节点的内容是否与值匹配的测试节点

时间:2019-01-11 23:58:53

标签: xml xslt-2.0 schematron

我有一组记录,需要检查以确保节点存在,但前提是该记录不是特定类型。例如:

<record>
  <type>Audio</type>
</record>
<record>
  <type>Video</type>
</record>
<record>
  <type>Text</type>
  <preview>https://website.com/preview.jpg</preview>
</record>

我想说一条没有<preview>字段的记录无效,除非它是音频或视频文件,在这种情况下,没有<preview>字段是可以的。

但是这种方法不起作用:

<pattern>
    <rule context="record/type !='Audio' and record/type !='Video'">
        <assert test="record/preview">Needs preview image</assert>
    </rule>
</pattern>

是否有任何方法可以使一个节点的测试取决于另一个节点的值?

1 个答案:

答案 0 :(得分:1)

您可以编写规则

<rule context="record[not(type = ('Audio', 'Video'))]">
  <assert test="preview">Needs preview image</assert>
</rule>