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

时间:2013-05-13 10:57:21

标签: xquery

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

我在互联网上搜索了一下XQuery规范但没有成功。

2 个答案:

答案 0 :(得分:3)

在编译时确定变量

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

来自W3C XQuery 1.0 Recommendation(同样适用于XQuery 3.0):

  

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

小异常:external变量

唯一的例外适用于使用

定义为外部的变量
    declare variable $var external;

在这种情况下,会抛出动态错误(再次引自XQuery Recommendation):

  

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

测试external变量是否绑定

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

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

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

答案 1 :(得分:1)

不,那是不可能的。

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