2

XML ドキュメントが構築されているか (たとえば を使用してxdmp:unquote)、またはデータベースから取得されているかを確認したいと考えています。私が試した方法の 1 つは、document-uri プロパティを確認することです。

declare variable $doc as document-node() external;

if (fn:exists(fn:document-uri($doc))) then
  'on database'
else
  'in memory'

これで十分に機能しているように見えますが、これを保証する MarkLogic のドキュメントには何も記載されていません。この方法は信頼できますか?他に使用すべきテクニックはありますか?

4

3 に答える 3

2

しばらくは挙動が安定していると思います。現在のデータベースからのものであると予想される限り、URIもいつでも確認できます。

xdmp:exists(fn:doc(fn:document-uri($doc)))

または、更新コンテキストにいて ACID 保証が必要な場合は、 を使用しますfn:exists

実際のテストは、呼び出しxdmp:node-replaceなどを試みて、予想されるエラーをキャッチすることです。これらのノード レベルの更新関数は、構築されたノードでは機能しません。ただし、これには更新コンテキストが必要であり、堅牢な方法で実装するのは難しい場合があります。

于 2012-08-23T00:26:20.750 に答える
1

XML ドキュメントが の場合、APIin-memeoryを使用できますin-mem-update

import module namespace mem = "http://xqdev.com/in-mem-update" at "/MarkLogic/appservices/utils/in-mem-update.xqy";

XML ドキュメントがデータベースに存在する場合は、fn:exists()またはfn:doc-available()

于 2015-04-08T14:28:36.613 に答える
0

In-memory または In-Db の実際のテストはxdmp:node-replaceです。

ノードを置換、更新、削除できる場合はデータベースにあり、例外がスローされた場合はデータベースにありません。

今、2つの状況があります

1. ドキュメントがまったく作成されていない: を使用して、ドキュメントが作成されfn:empty()ているかどうかを確認できます。

2. ドキュメントが作成され、メモリ内にある:fn:empty() false を返し、xdmp:node-replace が例外をスロー する場合、ドキュメントはメモリ内にある

于 2015-03-23T12:45:42.670 に答える