如何在 BaseX 中将 XQuery 结果存储为新文档



我对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 Update功能是我在这里需要的,但是我很难找到具体的例子。

在处理 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;

相关内容

  • 没有找到相关文章

最新更新