使用为XPath和XQuery定义的正则表达式规范,fn:analyze-string
的两个不同实现可以作为输入给出相同的正则表达式和匹配字符串,以返回不同的结果,仍然被认为符合W3C建议?或者相同的输入是否总是在不同的XQuery和XSLT处理器上返回相同的结果?
具体来说,我问的是match
,non-match
,group
和@nr
值的内容,而不是基本URI或节点标识(明确定义)作为实施依赖)。
答案 0 :(得分:3)
有一个或两个非常小的方面,规范是依赖于实现的:
允许供应商决定采用哪个版本的Unicode作为基线。 Unicode版本之间存在一些变化,例如对字符类别的更改,可能会影响\ p {Cn}或\ p {IsGreek}等表达式的结果,或者是否将两个字符视为每个字符的大小写变体的问题其他
捕获的子串的规则在边缘情况下并不十分精确。规范给出了一个例子:例如,给定正则表达式(a *)+和输入字符串" aaaa",实现可以合法地捕获" aaaa"或零长度字符串作为捕获子组的内容。
除此之外,处理器的结果应该相同。但当然,这是处理器可能认为100%一致性太难的一个领域 - 例如在Saxon-JS中,我们决定尽我们所能使用Javascript 6正则表达式引擎,这肯定会让我们缺少100 %符合XPath规则。
答案 1 :(得分:1)
必须区分至关重要的术语的三个方面:
我对XQuery规范的理解,以及定义正则表达式语言的XML Schema规范,是两个实现必须返回相同的结果来调用fn:analyze-string
,考虑左边的封闭元素节点一边。
XQuery规范说fn:analyze-string
的 nondeterminism 仅在问题中提到,因为重复的节点标识可能相同或不同,相同的电话。
基本URI和前缀是依赖于实现的,我的理解是,它仍然隐含意味着必须在查询中确定性地选择它们。
除非我忽略了某些内容,否则XML Schema规范似乎没有为正则表达式上的实现者提供任何余地。 XQuery扩展了XML Schema正则表达式,但唯一的依赖于实现的功能是捕获某些组,这只与替换相关。