我想知道是否可以检查 XQuery 中是否存在变量。我的意思是知道变量是否已定义或绑定。某种if (defined($a))
.
我在 Internet 上搜索了一些 XQuery 规范,但没有成功。
我想知道是否可以检查 XQuery 中是否存在变量。我的意思是知道变量是否已定义或绑定。某种if (defined($a))
.
我在 Internet 上搜索了一些 XQuery 规范,但没有成功。
在静态分析阶段检查未定义的变量名称(这里我们称之为“编译时”)。
来自W3C XQuery 1.0 Recommendation(同样适用于 XQuery 3.0):
在静态分析阶段,查询被解析为内部表示 [...]。解析错误作为静态错误引发 [err:XPST0003]。静态上下文由实现初始化(步骤 SQ2)。[...] 静态上下文用于解析模式类型名称、函数名称、命名空间前缀和变量名称(步骤 SQ4)。如果在静态上下文中未找到操作树中的其中一种名称,则会引发静态错误([err:XPST0008] 或 [err:XPST0017])[...]。
external
变量唯一的例外适用于定义为外部使用的变量
declare variable $var external;
在这种情况下,将抛出一个动态错误(再次引用自XQuery Recommendation):
对声明为外部但未由外部环境绑定到值的变量的引用会引发动态错误 [err:XPDY0002]。
external
变量是否绑定我不知道有可能在运行时检查外部变量是否确实被绑定,但在 XQuery 3.0 中,您可以使用 try/catch 来测试:
xquery version '3.0';
declare variable $var external;
try { $var }
catch err:XPDY0002
{ "External variable not bound!" }
不,那是不可能的。
访问未定义的变量是一个静态错误,在解析/编译表达式期间引发。