1

ライブラリ サービス APIを使用してドキュメントを に挿入しましMarkLogicた。チェックインせずに行った変更を保存する必要があるシナリオがあります。つまり、バージョン番号をインクリメントせずに、変更を現在のバージョン自体に保存します。同じバージョンのドキュメントをチェックインするためのすぐに使用できるソリューションを提供する一部のCMIS仕様で、このような機能を見てきました。にそのような類似のAPIが見つかりませんでしたMarkLogic。私が考えることができる代替オプションは、管理されたドキュメントの管理を解除し、 xdmp関数を使用して更新を実行し、コンテンツを再管理することです。しかし、これは以前のバージョンを失います。これを行う他の代替方法はありますか?

4

1 に答える 1

1

xdmp update 関数を単純に使用して、DLS をバイパスしようとしましたか? たとえばxdmp:node-replace、ドキュメントのルート要素を置き換えるために使用できます。ドキュメントでは、更新には DLS 関数を「使用する必要がある」と書かれていますが、それが意味することは、非 DLS 更新は DLS によって管理されないということだと思います。

やってみよう。

(: new managed document :)
import module namespace dls = "http://marklogic.com/xdmp/dls" 
  at "/MarkLogic/dls.xqy";
dls:document-insert-and-manage('test', true(), <test id="1"/>)
=> ()

import module namespace dls = "http://marklogic.com/xdmp/dls" 
  at "/MarkLogic/dls.xqy";

dls:document-is-managed('test'),
dls:document-history('test')
=>
true
<dls:document-history uri="test" xmlns:dls="http://marklogic.com/xdmp/dls">
  <dls:version>
    <dls:version-id>1</dls:version-id>
    <dls:document-uri>test</dls:document-uri>
    <dls:latest>true</dls:latest>
    <dls:created>2013-03-15T10:22:35.642645-07:00</dls:created>
    <dls:author>9712740001723797867</dls:author>
    <dls:annotation/>
    <dls:deleted>false</dls:deleted>
  </dls:version>
</dls:document-history>

いいね。非管理更新を試してみましょう。

xdmp:node-replace(doc('test')/test, <test id="2"/>)
=> ()

doc('test')
=> <test id="2"/>

import module namespace dls = "http://marklogic.com/xdmp/dls" 
  at "/MarkLogic/dls.xqy";

dls:document-is-managed('test'),
dls:document-history('test')
=>
true
<dls:document-history uri="test" xmlns:dls="http://marklogic.com/xdmp/dls">
  <dls:version>
    <dls:version-id>1</dls:version-id>
    <dls:document-uri>test</dls:document-uri>
    <dls:latest>true</dls:latest>
    <dls:created>2013-03-15T10:22:35.642645-07:00</dls:created>
    <dls:author>9712740001723797867</dls:author>
    <dls:annotation/>
    <dls:deleted>false</dls:deleted>
  </dls:version>
</dls:document-history>

更新は機能しましたが、ドキュメントの履歴にはまだバージョン 1 が表示されています。

今、私は管理者ユーザーとしてこれを行いました。管理者以外のユーザーには、いくつかの追加の権限を付与する必要がある場合があります。または、アンプを作成する方がクリーンな場合があります。これは、偶発的な管理されていない更新を防ぐために使用できます。

于 2013-03-15T17:31:14.153 に答える