我非常新的XML文档数据库技术,Xquery / Xpath等。所以这可能是一个非常新手的问题。
场景:许多XML文档作为输入,想要运行一些转换,可以在这些XML文档上运行(使用XQuery)。我想存储这些结果。与输入相同的XML数据存储。
到目前为止,我正在尝试使用BaseX文档数据库来存储和处理这些XML文档,到目前为止它很容易使用,我印象深刻。
理想情况下,我想使用XQJ API(http://xqj.net/basex/)与BaseX进行交互,因为我的理由是XQJ会保持应用程序代码的实现独立于BaseX。辅助选项会将我的java代码直接写入BaseX API。
问题:我很难弄清楚如何将XQuery的结果存储为新的"文档"在数据库中。也许这比使用XX(或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吗?
感谢您的帮助!
答案 0 :(得分:2)
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;