我对XML文档数据库技术、Xquery/Xpath等技术非常陌生。所以这可能是一个非常新鲜的问题。
场景:许多XML文档作为输入,想要运行一定数量的转换就可以在这些XML文档上运行(使用XQuery)。我想保存这些结果。输入到同一个XML数据存储区中。
到目前为止,我正在尝试使用BaseX文档数据库来存储和处理这些XML文档,到目前为止,它非常容易使用,我对此印象深刻。
理想情况下,我希望使用XQJ (http://xqj.net/basex/)与http://xqj.net/basex/进行接口,因为我的推理是,XQJ将保持应用程序代码的实现与BaseX无关。第二个选项是将我的java代码直接写入BaseX API。
问题:我很难弄清楚如何将XQuery的结果作为一个新的“文档”存储在数据库中。也许这更多地是对XQuery (或XQuery更新)本身缺乏概念上的理解,而不是对BaseX/XQJ有任何困难。
在这个简单的例子中,如果我有这样的查询,它会以我想要的格式返回一些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??是否有一种使用XQResultSequence将此BaseX持久化回数据库的方法?或者更好的是,我可以直接在XQueries上运行额外的XQResultSequence吗?
谢谢你的帮助!
发布于 2016-01-15 19:30:03
BaseX实现XQuery更新设施,所以您应该能够使用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;https://stackoverflow.com/questions/34817780
复制相似问题