0

我使用了一个 XML 数据库 eXist-db 来进行一些 XQuery 测试。我有一个名为“media_data_101109.xml”的 xml 集合,我把它放在了目录中

/db/wb/portfolio/media_data_101109.xml

然后我去了 eXist Sandbox,它是一个用于执行 XQuery 的 GUI,并输入以下 XQuery:

let $mediaNodes := doc('db/wb/portfolio/media_data_101109.xml')
return $mediaNodes//media[contains(@product,"wb")]

但它未能检索到任何结果。

但是,如果我在 URI 字符串前面添加服务器名称,例如:

 let $mediaNodes := doc('http://localhost:8080/exist/rest/db/portfolio/media_data_101109.xml')

然后它工作得很好(虽然有点慢)。

我记得,过去第一个 XQuery 工作得非常好,但从昨天开始,除非我在 URI 字符串中指定服务器名称,否则它无法检索任何内容。

谁能给我一些关于这里可能出了什么问题的想法?我认为我的端口设置可能有问题?所以 eXist-db 可能无法正常运行?在此先感谢。

4

2 回答 2

0

来自静态上下文的基本 URI 用于解析相对 URI。

如果您的 XQuery 没有 URI(因为它是动态构建的,因为您没有将它保存为带有 GUI 的资源等),那么您需要明确定义一个 Base URI。

来自http://www.w3.org/TR/2010/REC-xquery-20101214/#id-base-uri-decl

[定义:基本 URI 声明指定静态上下文的基本 URI 属性。解析模块内的相对 URI 时使用基本 URI 属性。] 例如,该fn:doc 函数使用调用模块的基本 URI 解析相对 URI。

以下是基本 URI 声明的示例:

declare base-uri "http://example.org";
于 2010-12-30T17:11:57.400 回答
0

改变

让 $mediaNodes := doc('db/wb/portfolio/media_data_101109.xml')

让 $mediaNodes := doc('/db/wb/portfolio/media_data_101109.xml')

于 2011-01-20T08:44:43.447 回答