2016-07-08 29 views
2

私が(「I」フラグが提供する)大文字と小文字を区別しない方法で変数によって与えられた特定のテキストを検索したSchematron規則を作成しました:Schematrionの大文字と小文字を区別しないSQF:stringReplace

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

$フレーズ= '(フレーズ)'

ユーザーはクイックフィックスを使用してテキストを置き換えることができますが、クイックフィックスで大文字と小文字を区別しない方法を提供する方法はわかりません。私の最初のバージョンは、次のようになります。

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

クイックフィックスは、ルール違反がすべての場合には認識されているものの、テキストの一部は、$フレーズとまったく同じ時価総額を持っている場合にのみ機能します。正規表現属性に "i"フラグ機能を利用する方法はありますか?

+0

"作品"を明確にすることはできますか?クイックフィックスが動作した場合の結果と、そうでない場合の結果の違いは何ですか? – LarsH

+1

例えば$ phrase = '(phrase)'の場合、schematronは「フレーズ」、「フレーズ」、「Phrase」などのテキストをハイライトします。クイックフィックスオプションは、これらのケースごとに提供されますが、stringReplace関数は "phrase"だけを置き換えます。 「フレーズ」と「Phrase」の場合は何も行いません。 $句に[Ph] [Hh] [Rs] [Ss] [Ee]のような正規表現が含まれていた場合、クイックフィックスが正しく機能しますが、これはすべてのケースで柔軟な解決策ではありません。 'i'修飾子をregex属性に含めることができない場合は、おそらくそれのための良い解決策はありません。 – proxx

答えて

0

私はSQFを使用していませんが、最終的な質問に対する答えは「いいえ」と思います。 reference docsによれば、<sqf:stringReplace>はXSLTで<xsl:analyze-string>のようにflags属性を許可しません。

regex syntaxは、正規表現自体の中でそれらのフラグを渡す方法を提供しません。

<sqf:stringReplace>flags属性を追加するようにSQFを変更するか、SQFの作成者に変更を依頼するのが最も簡単な方法です。このトピックに関する

0

2つの更新:

  1. sqf:stringReplaceflagsのサポートは回避策は以下のように、xsl:analyze-stringと組み合わせsqf:replace機能を使用することです将来
  2. にSQFに追加されなければならない。

    <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>