1

我想知道是否可以检查 XQuery 中是否存在变量。我的意思是知道变量是否已定义或绑定。某种if (defined($a)).

我在 Internet 上搜索了一些 XQuery 规范,但没有成功。

4

2 回答 2

3

变量在编译时确定

在静态分析阶段检查未定义的变量名称(这里我们称之为“编译时”)。

来自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!" } 
于 2013-05-13T12:37:39.070 回答
1

不,那是不可能的。

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

于 2013-05-13T12:36:12.627 回答