【发布时间】:2018-07-30 08:50:16
【问题描述】:
我在 xquery 中编写了一个转换,它取消引用 XML 字符串并插入一个包含其内容的元素。这工作正常。 我还需要创建一个依赖于该元素的根元素的集合。我不能对新文档执行此操作,因为 xdmp:document-add-collections() 不起作用。如何将集合添加到转换中的新文档?
这是我的服务器端 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) 运行,通过参数 ServerTransform 转换创建方法。根据文档,转换脚本在文档存储到数据库之前运行。
这是一个新文件;我需要转换内容,然后创建集合。
我可以看到创建后的文档,内容可用。只是缺少收藏。我可以尝试 xdmp:document-insert 方法,但是在 create 运行时写入文档是否正确?
【问题讨论】:
-
顺便说一句:我正在使用 marklogic 9
标签: transform xquery marklogic