繁体   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