是否可以检索引发错误的命名空间?

时间:2016-06-30 09:35:29

标签: error-handling xquery basex

当我从XQuery查询中引发错误时,例如:

error( fn:QName( 'http://example.com', 'XMPL0001' ), 'Conflict' )

... BaseX返回以下内容(无论是与服务器通信时,还是在GUI内部)

Stopped at ., 1/7:  
[XMPL0001] Conflict

是否有可能以某种方式检索错误的命名空间(在本例中为http://example.com)?

我正在使用自定义的PHP客户端,我想使用此信息来防止与我的自定义错误代码发生可能的(未来)冲突,并解析错误以引发标准BaseX\Exception或自定义{{ 1}},取决于错误的命名空间。

当然,我可以简单地使用另一种错误代码模式而不是典型的SomeNamespace\Exception XQuery模式,以防止可能的(未来)错误代码冲突,但是命名空间的可能使用对我更有吸引力,因为我然后可以定义统一的ABCD1234接口,例如:

Exception

顺便说一句,我目前正在使用BaseX 7.7.2。

1 个答案:

答案 0 :(得分:1)

是的,您可以使用a few variables in the error namespace检索有关错误的信息,这些信息属于try-catch语句的范围,如下所示:

declare namespace err = "http://www.w3.org/2005/xqt-errors";

try {
    error( fn:QName( 'http://example.com', 'XMPL0001' ), 'Conflict' )
}
catch * {
    namespace-uri-from-QName($err:code)
}

这假设您使用的是XQuery 3.0。