我正在尝试在我的 MLCP 转换函数中使用map:get($context,"collections")
参数(此处的 MLCP 指南中描述了输入参数)。我想使用 -output_collections
参数中指定的集合,以便我可以将其插入我的 insert-update() 函数中。
文档加载到数据库和mlcp输出并不指示错误,但是当我查看查询控制台时,它显示(没有集合)而不是COLLTEST
。当我对集合进行硬编码时,转换也可以正常工作(我不想这样做)。我是否错误地使用了地图键?
mlcp-context-transform-test.xqy:
xquery version "1.0-ml";
module namespace tx = "http://transform-test";
import module namespace dls = 'http://marklogic.com/xdmp/dls' at '/MarkLogic/dls.xqy';
(:Function to Add document to DLS Library Services:)
declare function tx:insert-update($filename,$doc,$coll) {
let $i := dls:document-is-managed($filename)
return
if ($i = fn:false()) then
dls:document-insert-and-manage($filename,fn:true(),$doc/*,(),
(xdmp:permission('rest-reader', 'read'), xdmp:permission('rest-writer', 'insert')),($coll))
else
if ($i = fn:true()) then
dls:document-checkout-update-checkin(
$filename,
$doc/*,
'CHECKIN-UPDATE-CHECKOUT',
fn:true(),
(xdmp:permission('rest-reader', 'read'), xdmp:permission('rest-writer', 'insert')),
($coll))
else
()
};
declare function tx:transform(
$content as map:map,
$context as map:map
) as map:map* {
let $docnode := map:get($content, "value")
let $collections := map:get($context, "collections")
return
if (fn:empty($docnode/element()))
then $content
else
let $root := $docnode/*
let $_:=
map:put($content, "value",
document {$root/preceding-sibling::node(),
element {fn:name($root)} {
$root/@*,
$root/node(),
element { xs:QName("metadata")} {
namespace {"docprop"} {"http://mynamespace"},
'foobarfoo'
}
},
$root/following-sibling::node()
} )
return (map:put($content,"uri",
tx:insert-update(map:get($content, "uri"),map:get($content,"value"),
map:get($context, "collections"))
),
$content
)
};
MLCP 命令:
mlcp.sh IMPORT -mode local
-host localhost
-port 8007
-username admin -password ****
-input_file_path /MLCP-testdocs/testdocname.xml
-output_uri_replace "/MLCP-testdocs,''"
-output_uri_prefix /content/docs
-output_uri_suffix .xml
-output_collections COLLTEST
-output_permissions rest-reader,read,rest-writer,insert
-database top-songs
-xml_repair_level full
-transform_module /mlcp-context-transform-test.xqy
-transform_namespace "http://transform-test"
-document_type xml
我也试过map:get($context,"output_collections")
.唯一对我有用的$context
参数是 "transform_param"
.如果有帮助,我正在使用 mlcp 8.0.6.3。
mlcp 8.0-6.3 不允许用户访问/修改转换中的文档集合。
https://github.com/marklogic/marklogic-contentpump/issues/34
此修复依赖于服务器。 因此,当您使用 mlcp 9.0-x 执行此操作时,您仍然需要连接到 8.0-6.4 或更高版本的服务器。
8.0-6.3 的解决方法是在转换函数中执行文档插入,并从转换函数返回空序列。