如何检查XQuery中是否定义了变量

如何检查XQuery中是否定义了变量,xquery,Xquery,我想知道是否可以检查XQuery中是否存在变量。我想知道变量是定义的还是有界的。某种形式的a,如果定义为$a 我在互联网上搜索过,在XQuery规范中搜索过一点也没有成功。不,这是不可能的 访问未定义的变量是一个静态错误,在解析/编译表达式时会引发该错误。否,这是不可能的 访问未定义的变量是一个静态错误,在解析/编译表达式时会引发该错误。变量在编译时确定 在静态分析阶段检查未定义的变量名,我们在编译时调用它 从中可以看出,XQuery 3.0也同样适用: 在静态分析阶段,查询被解析为内部表示[…

我想知道是否可以检查XQuery中是否存在变量。我想知道变量是定义的还是有界的。某种形式的a,如果定义为$a


我在互联网上搜索过,在XQuery规范中搜索过一点也没有成功。

不,这是不可能的


访问未定义的变量是一个静态错误,在解析/编译表达式时会引发该错误。

否,这是不可能的

访问未定义的变量是一个静态错误,在解析/编译表达式时会引发该错误。

变量在编译时确定 在静态分析阶段检查未定义的变量名,我们在编译时调用它

从中可以看出,XQuery 3.0也同样适用:

在静态分析阶段,查询被解析为内部表示[…]。分析错误作为静态错误引发[err:XPST0003]。静态上下文由实现步骤SQ2初始化。[…]静态上下文用于在步骤SQ4中解析模式类型名称、函数名称、命名空间前缀和变量名称。如果在静态上下文中找不到操作树中这些类型之一的名称,则会引发静态错误[err:XPST0008]或[err:XPST0017][…]

很少有例外:外部变量 唯一的例外情况适用于定义为外部使用的变量

    declare variable $var external;
在这种情况下,将再次从以下引用引发动态错误:

对声明为外部但未被外部环境绑定到值的变量的引用会引发动态错误[err:XPDY0002]

测试外部变量是否绑定 我不知道是否可以在运行时检查外部变量是否实际绑定,但在XQuery 3.0中,您可以使用try/catch来测试这一点:

xquery version '3.0';
declare variable $var external;

try { $var } 
catch err:XPDY0002
{ "External variable not bound!" } 
变量在编译时确定 在静态分析阶段检查未定义的变量名,我们在编译时调用它

从中可以看出,XQuery 3.0也同样适用:

在静态分析阶段,查询被解析为内部表示[…]。分析错误作为静态错误引发[err:XPST0003]。静态上下文由实现步骤SQ2初始化。[…]静态上下文用于在步骤SQ4中解析模式类型名称、函数名称、命名空间前缀和变量名称。如果在静态上下文中找不到操作树中这些类型之一的名称,则会引发静态错误[err:XPST0008]或[err:XPST0017][…]

很少有例外:外部变量 唯一的例外情况适用于定义为外部使用的变量

    declare variable $var external;
在这种情况下,将再次从以下引用引发动态错误:

对声明为外部但未被外部环境绑定到值的变量的引用会引发动态错误[err:XPDY0002]

测试外部变量是否绑定 我不知道是否可以在运行时检查外部变量是否实际绑定,但在XQuery 3.0中,您可以使用try/catch来测试这一点:

xquery version '3.0';
declare variable $var external;

try { $var } 
catch err:XPDY0002
{ "External variable not bound!" }