Schematron regexp:test 因广泛表达而失败
Schematron regexp:test fails with broad expression
我快疯了..
test
使用广泛匹配任何正则表达式如 '^.+$'
失败(示例文件中显示)但适用于特定的 '^C.+$'
我也试过test="string-length(.) > 0"
但失败了。
请帮忙。
这是 XML 文件:
<article>
<back><ack>
<title>Acknowledgements</title>
<p>The authors would like to thank <funding-source rid="sp1">CNPq</funding-source> (Process numbers <award-id rid="sp1">303287/2013-6</award-id> and <award-id rid="sp1">303559/2012-8</award-id>), <funding-source rid="sp2">FAPESP</funding-source> (Process number <award-id rid="sp2">2012/12207-6</award-id>) and <funding-source rid="sp3">CAPES</funding-source> (Process number <award-id rid="sp3">12357-13-8</award-id>) for the financial support.</p>
</ack></back></article>
这是失败的 schematron 文件:
<schema xmlns="http://purl.oclc.org/dsdl/schematron"
queryBinding="exslt"
xml:lang="en">
<ns uri="http://www.w3.org/1999/xlink" prefix="xlink"/>
<ns uri="http://exslt.org/regular-expressions" prefix="regexp"/>
<pattern id="funding_info">
<title>Make sure funding-source does not happen inside p</title>
<assert test="regexp:test(current(), '^.+$')">
EC-CHECK: Nao deve haver 'funding-source' nem 'award-id' dentro de 'p'
</assert>
</rule>
</pattern>
</schema>
这是工作的 schematron 文件:
<schema xmlns="http://purl.oclc.org/dsdl/schematron"
queryBinding="exslt"
xml:lang="en">
<ns uri="http://www.w3.org/1999/xlink" prefix="xlink"/>
<ns uri="http://exslt.org/regular-expressions" prefix="regexp"/>
<pattern id="funding_info">
<title>Make sure funding-source does not happen inside p</title>
<assert test="regexp:test(current(), '^C.+$')">
EC-CHECK: Nao deve haver 'funding-source' nem 'award-id' dentro de 'p'
</assert>
</rule>
</pattern>
</schema>
XSL中的反斜杠似乎可以用来定义转义序列。当您需要定义正则表达式 shorthand 字符 class 时,您需要在特定字符前加上 文字 反斜杠,因此,您需要使用 双反斜杠:
^[\s\S]+$
此模式将匹配:
^
- 字符串开头
[\s\S]+
- 一个或多个空格或非空格字符(因此,这匹配任何字符)
$
- 字符串结尾。
这也意味着正则表达式风格不是 JavaScript,尽管 this reference 声称 EXSLT 使用 JS 风格。
我快疯了..
test
使用广泛匹配任何正则表达式如 '^.+$'
失败(示例文件中显示)但适用于特定的 '^C.+$'
我也试过test="string-length(.) > 0"
但失败了。
请帮忙。
这是 XML 文件:
<article>
<back><ack>
<title>Acknowledgements</title>
<p>The authors would like to thank <funding-source rid="sp1">CNPq</funding-source> (Process numbers <award-id rid="sp1">303287/2013-6</award-id> and <award-id rid="sp1">303559/2012-8</award-id>), <funding-source rid="sp2">FAPESP</funding-source> (Process number <award-id rid="sp2">2012/12207-6</award-id>) and <funding-source rid="sp3">CAPES</funding-source> (Process number <award-id rid="sp3">12357-13-8</award-id>) for the financial support.</p>
</ack></back></article>
这是失败的 schematron 文件:
<schema xmlns="http://purl.oclc.org/dsdl/schematron"
queryBinding="exslt"
xml:lang="en">
<ns uri="http://www.w3.org/1999/xlink" prefix="xlink"/>
<ns uri="http://exslt.org/regular-expressions" prefix="regexp"/>
<pattern id="funding_info">
<title>Make sure funding-source does not happen inside p</title>
<assert test="regexp:test(current(), '^.+$')">
EC-CHECK: Nao deve haver 'funding-source' nem 'award-id' dentro de 'p'
</assert>
</rule>
</pattern>
</schema>
这是工作的 schematron 文件:
<schema xmlns="http://purl.oclc.org/dsdl/schematron"
queryBinding="exslt"
xml:lang="en">
<ns uri="http://www.w3.org/1999/xlink" prefix="xlink"/>
<ns uri="http://exslt.org/regular-expressions" prefix="regexp"/>
<pattern id="funding_info">
<title>Make sure funding-source does not happen inside p</title>
<assert test="regexp:test(current(), '^C.+$')">
EC-CHECK: Nao deve haver 'funding-source' nem 'award-id' dentro de 'p'
</assert>
</rule>
</pattern>
</schema>
XSL中的反斜杠似乎可以用来定义转义序列。当您需要定义正则表达式 shorthand 字符 class 时,您需要在特定字符前加上 文字 反斜杠,因此,您需要使用 双反斜杠:
^[\s\S]+$
此模式将匹配:
^
- 字符串开头[\s\S]+
- 一个或多个空格或非空格字符(因此,这匹配任何字符)$
- 字符串结尾。
这也意味着正则表达式风格不是 JavaScript,尽管 this reference 声称 EXSLT 使用 JS 风格。