使用XQuery参考BaseX DB中的特定文档

Rya*_*yan 5 xml xquery basex

如果我两个文件添加到BaseX DB,比方说normal.xmlnormal2.xml,有没有办法指每个单独的一个?

我知道这个doc()函数,但它查看文件系统的位置,而不是数据库本身.

例如,如果我用这个查询:doc("normal.xml")/name,那么我将收到一个关于normal.xml找不到的错误.

我也尝试过:basex:db("my-db-name")/doc("normal.xml")/name并收到同样的错误.

有任何想法吗?

Rya*_*yan 9

我最后在BaseX邮件列表上询问,我收到的答案如下:

for $doc in collection('test-db')
    where matches(document-uri($doc), 'example.xml')
return $doc
Run Code Online (Sandbox Code Playgroud)

我还询问为什么没有直接的方法来引用要在恒定时间内提取数据的文档,响应是:

这是由于XQuery数据模型.XQuery在数据库/集合中没有正式的文件概念(如果我错了,Christian可能会纠正我),因此collection()命令返回给定数据库的任何(document-)节点序列.用户可以选择他想要处理的节点.

我们目前正在寻找更直观地导航集合的想法; 类似于"collection('db/path-to/document.xml')"的东西应该仍然符合当前的W3C建议.由于后续文档-uri()通常运行良好,因此在我们的优先级列表中并不太高.

谢谢你的帮助.


小智 6

以下查询可能对您有所帮助:

for $doc in collection('your-db-name')
let $path := base-uri($doc)
where ends-with($path, 'normal.xml')
return $doc/name
Run Code Online (Sandbox Code Playgroud)