ESQL COALESCE 函数的 XQuery 等价物是什么?

What is the XQuery equivalent of the ESQL COALESCE function?

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

具体来说就是转ESQL函数

COALESCE (var0, var1) 

(其中 returns 第一个非空值,如 if var0 = null then var1 else var0 中)转换为

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

  2. 如果是,有人可以提供 link 到 API 吗?我在 XQuery 语法和运算符手册中找不到这个。

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

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

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

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

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

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


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

2 正如 Florent 在评论中所解释的那样,使用此表达式的警告已经到位。如果你有 $var1 := (1, 2)$var2 := (3, 4),表达式 $var1, $var2)[1] 将 return 1,而不是 (1, 2),因为序列不能包含子序列,并且索引一个[x] 的序列将 return 展平序列的 xth 值。你可以用 (zero-or-one($var1), zero-or-one($var2))[1].

保护你的表情