簡體   English   中英

在MarkLogic中編寫(創建)文檔時如何在轉換中添加集合

[英]How to add collections in transformations when writing(creating) a Document in MarkLogic

我在xquery中編寫了一個轉換,該轉換取消了XML-String的引用,並插入了包含其內容的元素。 這很好。 我還需要創建一個依賴於該元素的根元素的集合。 我無法在新文檔上執行此操作,因為xdmp:document-add-collections()無法正常工作。 如何在轉換中將集合添加到新文檔?

這是我的ServerSide xQuery代碼:

xquery version "1.0-ml";

module namespace transform = "http://marklogic.com/rest-api/transform/smtextdocuments";
import module namespace mem = "http://xqdev.com/in-mem-update" at '/MarkLogic/appservices/utils/in-mem-update.xqy';

declare function transform(
        $context as map:map,
        $params as map:map,
        $content as document-node()
) as document-node()
{
    let $uri := base-uri($content)
    let $doccont := $content/smtextdocuments/documentcontent
    let $newcont := xdmp:unquote($doccont)
    let $contname := node-name($newcont/*)
    let $result := if ( exists($content/smtextdocuments/content))  
    then mem:node-replace($content/smtextdocuments/content, <content>11{$newcont}</content>)
    else mem:node-insert-after($doccont, <content>{$newcont}</content>)
    let $log := xdmp:log($content)
    return (
        $result,
        xdmp:document-add-collections($uri, fn:string($contname)),
        xdmp:document-remove-collections($uri, "raw")
    )
};

與Java api(4.0.4)一起運行的腳本ist通過參數ServerTransform轉換創建方法。 根據文檔,轉換腳本在文檔存儲在數據庫中之前正在運行。

它是一個新文件; 我需要轉換內容,然后創建集合。

創建后我可以看到文檔,內容可用。 只是集合丟失了。 我可以嘗試使用xdmp:document-insert方法,但是在create運行時編寫文檔是否正確?

Java API / REST API的轉換機制負責​​文檔的編寫。 目前,轉換無法將集合提供給作者。 這將是一個合理的增強要求。

轉換不應嘗試編寫文檔,因為編寫者還將嘗試編寫同一文檔。

一種替代方法是在編寫文檔之前先用Java對其進行轉換,然后將集合指定為寫請求的一部分。

另一種選擇是將轉換重寫為資源服務擴展,在資源服務擴展內實現寫入,並修改Java客戶端以將文檔發送到資源服務擴展。

根據模型,最終的替代方法可能是在文檔中的元素上使用范圍索引以將文檔收集到集合中,而不是在文檔上使用集合。

希望能有所幫助,

“新文件”是什么意思? 調整文檔集合時,文檔是否已插入MarkLogic數據庫? 否則,您可能需要修改該情況的返回值($result, xdmp:document-insert($uri, $result, xdmp:default-permissions(), fn:string($contname)) )

否則,您可以編輯問題以更具體地分享您面臨的錯誤或問題嗎?

遺憾的是,REST轉換不允許這樣做,就像MLCP轉換一樣。 在更改之前,您可以使用ehennum繪制的選項,或者可以考慮延遲將集合添加到提交前或提交后的觸發器。 這會花費一些開銷,但是在觸發器中執行類似的操作有時很有意義,因為它確保始終執行,並且是進行內容驗證,審核日志記錄以及類似操作的好地方。

HTH!

暫無
暫無

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

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