簡體   English   中英

如何在 MarkLogic 中重命名文檔?

[英]How to rename a document in MarkLogic?

我有一個簡單的任務要做,但無法找到確切的解決方案。我在 MarkLogic 中將文件另存為 abc.xml。如何使用 XQuery 將該文件重命名為某個 example.xml?

我試過的代碼:

xquery version "1.0-ml";
xdmp:document-rename ("/aaa.xml","/final.xml");

這是顯示錯誤。

我知道,改變現有文檔的文檔URI是沒有辦法的。 我能想到的唯一方法是在同一個事務中創建一個具有相同內容和新URI的新文檔,並刪除現有文檔。

它變得棘手的是確保保留所有權,權限,所有屬性,屬性文檔,確保舊URI不用於任何地方鏈接到現有文檔等。

但通常,文檔URI從未真正使用過。 您應首先考慮是否確實需要重命名文檔,以及原因。

(注意,如果您沒有顯示錯誤是什么,說“這顯示錯誤”在SO或郵件列表上很少有用。)

弗洛倫特是正確的,真正的“重命名”是不可能的,或者甚至可能沒有意義。 (比喻 - 將文件從一個磁盤重命名為另一個磁盤)

然而,“移動”是有意義的(復制然后在事務中刪除)。 定義“移動”是依賴於用例 - 即metatdata還需要'移動'? 權限? 收藏? 文件屬性? 繼承權限?

xmlsh( http://www.xmlsh.org )為marklogic擴展實現了一個'rename'( http://www.xmlsh.org/MarkLogicRename )命令,這個命令實際上是一個'移動',其實現是從帖子借來的markmail( http://markmail.org/

實現是以下XQuery - 它不會做你想要的一切,它可能會做你想要的更多。 因人而異

https://github.com/DALDEI/xmlsh/blob/master/extensions/marklogic/src/org/xmlsh/marklogic/resources/rename.xquery

(它也是很久以前寫的 - 它可能會從改進中受益)

我有工作的例子,這對我有用。

xquery version "1.0-ml";

 declare function local:document-rename( $old-uri as xs:string, $new-uri as xs:string) as empty-sequence() { xdmp:document-delete($old-uri), let $permissions := xdmp:document-get-permissions($old-uri) let $collections := xdmp:document-get-collections($old-uri) return xdmp:document-insert( $new-uri, doc($old-uri), if ($permissions) then $permissions else xdmp:default-permissions(), if ($collections) then $collections else xdmp:default-collections(), xdmp:document-get-quality($old-uri) ) , let $prop-ns := namespace-uri(<prop:properties/>) let $properties := xdmp:document-properties($old-uri)/node() [ namespace-uri(.) ne $prop-ns ] return xdmp:document-set-properties($new-uri, $properties) }; 

(: function call :) local:document-rename ("/opt/backup/x.xml","y.xml");

MarkLogic 有一個解決文件重命名(移動)的教程:

https://developer.marklogic.com/recipe/move-a-document/

重要的是,它使用函數 xdmp:lock-for-update() 來防止在將源文件復制到目標位置時對其進行修改。

此外,如果您要進行批量重命名,您需要確保重命名的每個文件 URI 對應於數據庫中的一個文檔,否則會出現運行時錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM