gpt4 book ai didi

java - 如何将 XQuery 结果存储为 BaseX 中的新文档

转载 作者:行者123 更新时间:2023-11-30 03:05:43 25 4
gpt4 key购买 nike

我对 XML 文档数据库技术、Xquery/Xpath 等非常很陌生。所以这可能是一个非常新手的问题。

场景:多个XML文档作为输入,想要运行一些可以在这些XML文档上运行的转换(使用XQuery)。我想存储这些结果。进入与输入相同的 XML 数据存储中。

到目前为止,我正在尝试使用 BaseX 文档数据库来存储和处理这些 XML 文档,到目前为止,它非常容易使用,给我留下了深刻的印象。

理想情况下,我想使用 XQJ API ( http://xqj.net/basex/ ) 与 BaseX 进行交互,因为我的理由是 XQJ 会尽可能保持应用程序代码的实现独立于 BaseX。第二个选项将我的 java 代码直接写入 BaseX API。

问题:我很难弄清楚如何将 XQuery 的结果作为新的“文档”存储在数据库中。也许这更多的是对 XQuery(或 XQuery Update)本身在概念上缺乏理解,而不是对 BaseX/XQJ API 的任何困难。

在这个简单的示例中,如果我有这样的查询,它会返回一些 XML 输出,其格式符合我的新文档的格式

let $items := //firstName
return <results>
{ for $item in $items
return <result> {$item} </result>
}
</results>

给予

<results>
<result>
<firstName>Bob</firstName>
</result>
<result>
<firstName>Joe</firstName>
</result>
<result>
<firstName>Tom</firstName>
</result>
</results>

我想存储这个新的<result>将文档放回到数据库中,以供以后的查询/转换等使用。在 SQL 中,这对我来说很有意义。我会做CREATE TABLE <name> SELECT <query>INSERT INTO等等。但我不清楚 XQuery 中的等价物是什么。我认为 XQuery 更新功能正是我所需要的,但我无法找到具体的示例。

处理 XQJ 时情况会更加复杂

XQResultSequence rs = xqe.executeQuery("//firstName");
// what do i do with it now??

有没有办法使用 BaseX 将此 XQResultSequence 持久保存回数据库中?或者更好的是,我可以直接在 XQResultSequence 上运行额外的 XQueries 吗?

感谢您的帮助!

最佳答案

BaseX 实现 XQuery Update Facility ,所以您应该能够使用 fn:put :

let $items := //firstName
return fn:put(
<results>{
for $item in $items
return <result> {$item} </result>
}</results>,
"/results/result-new.xml")

如果您正在运行像上面这样的简单临时查询,它应该相当简单。我对 XQJ 不太熟悉,但如果您想按顺序运行查询,我怀疑有一种方法可以将这些 XQResultSequence 变量传递回新查询,您可能会接受通过在以下查询中将变量声明为外部变量来实现它:

declare variable $previous-result as item()* external;

关于java - 如何将 XQuery 结果存储为 BaseX 中的新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com