2

私は、XML ドキュメント データベース テクノロジ、 Xquery /Xpath などについてはまったくの初心者です。したがって、これはおそらく非常に初心者の質問です。

シナリオ: 多数の XML 文書を入力として、いくつかの変換を実行したい これらの XML 文書に対して (XQuery を使用して) 実行できます。これらの結果を保存したいと思います。入力と同じ XML データ ストアに。

これまでのところ、BaseX ドキュメント データベースを使用してこれらの XML ドキュメントを保存および処理する実験を行っていますが、非常に使いやすく、感心しています。

理想的には、XQJ API ( http://xqj.net/basex/ ) を使用して BaseX とやり取りしたいと考えています。これは、XQJ がアプリケーション コードの実装を BaseX にできるだけ依存しないようにするためです。2 番目のオプションでは、Java コードを BaseX API に直接書き込みます。

問題: XQuery からの結果を新しい「ドキュメント」としてデータベースに格納する方法を理解するのに苦労しています。おそらくこれは、BaseX/XQJ API の問題よりも、XQuery (または XQuery Update) 自体の概念的な理解不足によるものです。

この単純な例では、このようなクエリがある場合、新しいドキュメントに必要な形式で 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>orなどを行いますINSERT INTO。しかし、XQuery で同等のものが何であるかは不明です。ここで必要なのは XQuery Update 機能だと思いますが、具体的な例を見つけるのに苦労しています。

XQJを扱う場合、これはさらに複雑になります

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

この XQResultSequence を BaseX を使用してデータベースに保持する方法はありますか? または、XQResultSequence で追加の XQuery を直接実行できますか?

助けてくれてありがとう!

4

1 に答える 1

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;
于 2016-01-15T19:30:03.103 に答える