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