5

我正在尝试将 WMB 7 映射节点转换为 IIB 9 节点。自动转换过程将一些 ESQL 函数转换为 XQuery 函数。

具体来说,它打开了 ESQL 函数

COALESCE (var0, var1) 

(返回第一个非空值,如if var0 = null then var1 else var0)到

XQUERY (var0,var1)
  1. 是正确的转换吗?

  2. 如果是,有人可以提供API的链接吗?我在 XQuery 语法和操作手册上找不到这个。

4

1 回答 1

7

XQuery 不是 API,而是标准,完整的语法可以在网上找到:XQuery 1.0XQuery 3.0(没有 2.0)。您还将找到许多手册、教程等。

XQuery 依赖于XPath,它比 XQuery 使用得更广泛,并且可以在几乎所有通用语言的库中找到。

您的表达式是正确的 XQuery,因为它将所有内容都视为一个序列,并且逗号连接(和展平)两个序列。

XPath 不知道NULL,但它知道xsi:niland (),后者是空序列。从结果中删除一个空序列。

我不确定下面使用的是什么 XQuery 处理器,但正确的表达式应该是($var0, $var1)[1]2,它的工作方式与您的COALESCE操作1相同。在 XPath 和 XQuery 中,变量用$符号引用。用逗号分隔的变量或表达式的数量是无限的。如果都是空序列(null),则结果为空序列。

如果没有[1],它将返回所有非空项并丢弃其余项。您可以使用另一个索引,例如[3]获取第三个非空值。如果不存在这样的值,它将返回 null(空序列)。


1 的行为与您描述的方式不完全相同。我相信它的行为就像if var0 == null then var1 else var0,它选择第一个非空值(我已经更新了 OP)。

2 正如 Florent 在评论中解释的那样,带有此表达式的警告已经到位。如果有$var1 := (1, 2)and $var2 := (3, 4),则表达式$var1, $var2)[1]将返回1, not (1, 2),因为序列不能包含子序列,并且使用 索引序列[x]将返回展平序列的第 x值。您可以使用 保护您的表达(zero-or-one($var1), zero-or-one($var2))[1]

于 2015-09-09T12:50:10.603 回答