1

我使用图书馆服务 API将文档插入到MarkLogic. 在某些情况下,我只需要保存所做的更改而不签入。这意味着将更改保存到当前版本本身而不增加版本号。在一些CMIS规范中看到了这样的工具,它提供了开箱即用的解决方案,用于签入具有相同版本的文档。MarkLogic. _ _ 我能想到的替代选项是取消管理托管文档,使用xdmp功能执行更新和重新管理内容。但这会丢失以前的版本。还有其他替代方法吗?

4

1 回答 1

1

您是否尝试过简单地使用 xdmp 更新功能从而绕过 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 回答