Schematrion不区分大小写的sqf:stringReplace

时间:2016-07-08 13:54:01

标签: xml xslt schematron

我创建了一个schematron规则,以不区分大小写的方式搜索变量给出的特定文本(由" i"标志提供):

<sch:report test="matches(.,concat('(^|\W)',$phrase,'(\W|$)'),'i')" role="error" 
sqf:fix="replaceWithKey">...</sch:report>

其中$ phrase =&#39;(词组)&#39;

我希望用户能够使用快速修复并替换文本,但我不知道如何在快速修复中提供不区分大小写的解决方案。我的初始版本如下:

<sqf:fix id="replaceWithKey">
<sqf:stringReplace regex="{$phrase}">
...
</sqf:stringReplace>

只有在文本的一部分与$ phrase具有完全相同的大小写时,快速修复才有效,尽管在每种情况下都会识别规则违规。有没有办法利用&#34; i&#34;正则表达式属性中的标志功能?

2 个答案:

答案 0 :(得分:0)

我没有使用过SQF,但我认为你最后一个问题的答案是“不”。根据{{​​3}},from traits.api import Button, HasStrictTraits, Int, List from traitsui.api import Group, Item, ListEditor, UItem, View class DynamicListOfInts(HasStrictTraits): integer_list = List(Int) add_int = Button('Add integer') def default_traits_view(self): view = View( Group( UItem('add_int'), Item('integer_list', editor=ListEditor()), ), width=300, height=500, ) return view def _add_int_changed(self): self.integer_list.append(0) if __name__ == '__main__': list_of_ints = DynamicListOfInts() list_of_ints.configure_traits() 不允许<sqf:stringReplace>属性,正如flags在XSLT中所做的那样。

并且reference docs没有提供在正则表达式本身内传递这些标志的方法。

最简单的方法可能是修改SQF以向<xsl:analyze-string>添加flags属性,或者要求SQF作者进行更改。

答案 1 :(得分:0)

关于此主题的两个更新:

  1. flags中对sqf:stringReplace的支持将在未来添加到SQF
  2. 解决方法是使用sqf:replace功能与xsl:analyze-string结合使用,如下所示:

    <sqf:replace>
      <xsl:analyze-string select="." regex="{$phrase}" flags="i">
        <xsl:matching-substring>...</xsl:matching-substring>
        <xsl:non-matching-substring>
          <xsl:value-of select="."/>
        </xsl:non-matching substring>
      </xsl:analyze-string>
    </sqf:replace>