我正在尝试将 WMB 7 映射节点转换为 IIB 9 节点。自动转换过程将一些 ESQL 函数转换为 XQuery 函数。
具体来说,它打开了 ESQL 函数
COALESCE (var0, var1)
(返回第一个非空值,如if var0 = null then var1 else var0
)到
XQUERY (var0,var1)
是正确的转换吗?
如果是,有人可以提供API的链接吗?我在 XQuery 语法和操作手册上找不到这个。
我正在尝试将 WMB 7 映射节点转换为 IIB 9 节点。自动转换过程将一些 ESQL 函数转换为 XQuery 函数。
具体来说,它打开了 ESQL 函数
COALESCE (var0, var1)
(返回第一个非空值,如if var0 = null then var1 else var0
)到
XQUERY (var0,var1)
是正确的转换吗?
如果是,有人可以提供API的链接吗?我在 XQuery 语法和操作手册上找不到这个。
XQuery 不是 API,而是标准,完整的语法可以在网上找到:XQuery 1.0和XQuery 3.0(没有 2.0)。您还将找到许多手册、教程等。
XQuery 依赖于XPath,它比 XQuery 使用得更广泛,并且可以在几乎所有通用语言的库中找到。
您的表达式是正确的 XQuery,因为它将所有内容都视为一个序列,并且逗号连接(和展平)两个序列。
XPath 不知道NULL
,但它知道xsi:nil
and ()
,后者是空序列。从结果中删除一个空序列。
我不确定下面使用的是什么 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]
。