搜索未包含在元素中的特定文本

时间:2017-12-26 17:05:25

标签: schematron

希望有人可以提供帮助...一直在试图找出如何搜索未包含在特定元素中的特定文本。

案文"图"可以出现在XML文档中的任何位置。单词Figure也可拼写为" Figure" ...

这是我到目前为止所做的......但它没有接受文字文字"图" ...

  <rule context="text()">
      <assert test= "(.,'FIGURE')[not(/GRPHCREF)]" role="error" id="error_grphcref_figure"
      >Figure reference not wrapped in GRPHCREF.</assert>
  </rule>

非常感谢任何建议......

1 个答案:

答案 0 :(得分:1)

如果您要测试text()节点是否包含单词“Figure”,请使用contains()功能。要比较不区分大小写,请使用upper-case()函数,或者使用两个文字字符串“Figure”和“Figure”测试contains()

以下规则断言如果text()节点包含单词“Figure”(不区分大小写),则它必须具有GRPHREC元素祖先。

<rule context="text()[contains(upper-case(.), 'FIGURE')]">
  <assert test= "ancestor::GRPHCREF" role="error" id="error_grphcref_figure"
            >Figure reference not wrapped in GRPHCREF.</sch:assert>
</rule>        

虽然我认为将上下文评估和断言测试的值测试分开会更清晰,正如我上面所做的那样。但是,下面演示了如何在所有text()节点上保持更一般的匹配,并应用断言测试中的所有条件:

<rule context="text()">
  <assert test= "contains(upper-case(.), 'FIGURE') and ancestor::GRPHCREF" role="error" id="error_grphcref_figure"
            >Figure reference not wrapped in GRPHCREF.</sch:assert>
</rule>