0

私の XQuery コードは、MarkLogic データベースから多数の xml ファイルをロードして解析し、すべての結果を 1 つの xml に出力する必要があります。XQuery の特定のディレクトリにあるすべてのファイルをロードするにはどうすればよいですか? たとえば、「test」フォルダを持つ MarkLogic データベースがあり、このフォルダには異なる XML ファイルがあります。doc() 関数を使用して各ファイルをロードすることはできますが、もちろん、どのファイルが使用可能かがわからないため、doc("1.xml")、doc("2.xml") などと書くことはできません。サーバー上。今のところ、私の問題に対する解決策は 1 つしかありません。

someserver/v1/search?uri=test/ のような方法で REST インターフェイスで検索を行い、その結果を doc() 関数で読み込み、解析し、各ドキュメントをループで読み込みます。

しかし、この問題に対する別の正しい方法があるのではないでしょうか? 私は MarkLogic と XQuery を理解し始めたばかりなので、重要なことを見落としている可能性があります。私が提案した方法よりも、ドキュメントを検索してロードするためのより直接的な方法があるのではないでしょうか?

4

1 に答える 1

4

次のようなものを使用できます。

<my-results>{
  for $doc in xdmp:directory("test/", "infinity") (: use depth = '1' for no recursion :)
  return my:format-results(my:parse($doc))
}</my-results>

また:

<my-results>{
  for $uri in cts:uri-match("test/", "document")
  let $doc := fn:doc($uri)
  return my:format-results(my:parse($doc))
}</my-results>

ただし、データベースに多数の XML ファイルが含まれている場合、生成される XML が非常に大きくなり、リソースとタイムアウトの問題が発生する可能性があります。CPF フレームワークを使用してバックグラウンドでコンテンツを 1 つずつ処理し、ページ検索を使用して処理結果を収集し、別のディレクトリ (入力ファイルごとに 1 つの結果ドキュメント) に保存するか、またはプロパティ内に保存することをお勧めします。 xdmp:document-set-property のようなものを使用して入力ファイル自体。

チッ!

于 2013-10-08T09:42:45.387 に答える