我使用了一个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可能不会正常运行?提前感谢。
答案 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')