0

eXist-db を初めて使用します。Java/Groovy を使用して、作成したコレクションからデータを取得しようとしています (運が悪い) /db/apps/compositions

以下/db/apps/compositionsに、次のような XML ドキュメントをいくつか示します。

<version xmlns="http://schemas.openehr.org/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ORIGINAL_VERSION">
  ...
  <data xsi:type="COMPOSITION" archetype_node_id="openEHR-EHR-COMPOSITION.signos.v1">
    <name>
      <value>xxxxx</value>
    </name>
    ...
  </data>
</version>

クライアント側のコードで XQJ API を使用しています。サンプル コードを適合させようとしました ( http://en.wikipedia.org/wiki/XQuery_API_for_Javaおよびhttp://xqj.net/exist/から):

XQDataSource xqs = new ExistXQDataSource();
xqs.setProperty("serverName", "localhost");
xqs.setProperty("port", "8080");

XQConnection conn = xqs.getConnection("user","pass");

XQExpression expr = conn.createExpression();

XQResultSequence result = expr.executeQuery(
  "for $n in fn:collection('/db/apps/compositions')//data " +
  "return fn:data($n/name/value)"); // execute an XQuery expression

// Process the result sequence iteratively
while (result.next()) {
  // Print the current item in the sequence
  System.out.println("Product name: " + result.getItemAsString(null));
}

// Free all resources created by the connection
conn.close();

コレクション内のすべての XML ドキュメントから xxxxx テキストを取得することを期待していましたが、/db/apps/compositions結果が得られず、例外もスローされません。

何か案は?

どうもありがとう!

ところで: Java クライアントを実装する他の方法を見つけようとしましたが、初心者向けの明確なガイドラインやチュートリアルを見つけることができませんでした。

4

1 に答える 1

4

あなたが抱えている問題は、名前空間に関するものです。要素はデフォルトの名前空間にあるため、クエリでその名前空間を定義する必要があります。

xquery version "3.0";

declare default element namespace "http://schemas.openehr.org/v1";

for $n in fn:collection('/db/apps/compositions')//data

return fn:data($n/name/value)

技術ウィキなどで詳細を読む

一般に、クエリをコードにマージする前に、優れたeXide IDEでクエリをテストすることをお勧めします。IDE では、クエリの結果に関するフィードバックが迅速に提供されるため、クエリを少し試すことができます。

書き込みに注意

*:data

大規模なデータセットでのクエリが遅くなる可能性があります。

于 2014-11-24T09:12:52.987 に答える