使用XQuery查询存储在eXist-db中的文件

时间:2010-12-30 16:28:33

标签: xml uri xquery exist-db

我使用了一个XML数据库eXist-db来做一些XQuery测试。我有一个名为的xml集合 “media_data_101109.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可能不会正常运行?提前感谢。

2 个答案:

答案 0 :(得分:0)

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

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

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

  

[定义:基本URI   声明指定基URI   静态上下文的属性。该   基本URI属性用于   解析一个中的相对URI   模块。]例如,fn:doc   function使用解析相对URI   调用模块的基URI。

     

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

declare base-uri "http://example.org";

答案 1 :(得分:0)

更改

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

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