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)
转换正确吗?
如果是,有人可以提供 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]
.
保护你的表情
我正在尝试将 WMB 7 映射节点转换为 IIB 9 节点。自动转换过程将一些 ESQL 函数转换为 XQuery 函数。
具体来说就是转ESQL函数
COALESCE (var0, var1)
(其中 returns 第一个非空值,如 if var0 = null then var1 else var0
中)转换为
XQUERY (var0,var1)
转换正确吗?
如果是,有人可以提供 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]
.