Marklogic 在MLCP转换模块中使用输出集合键

Marklogic 在MLCP转换模块中使用输出集合键,marklogic,mlcp,Marklogic,Mlcp,我试图在MLCP转换函数中使用map:get($context,“collections”)参数(MLCP指南中描述的输入参数)。 我想使用-output\u collections参数中指定的集合,以便将其插入到insert-update()函数中 加载到数据库的文档&mlcp输出并不表示有错误,但当我在查询控制台中查看时,它会显示(无集合),而不是COLLTEST。 当我硬编码集合(我不想这样做)时,转换也能正常工作。我是否错误地使用了地图键 mlcp上下文转换测试.xqy: xquery

我试图在MLCP转换函数中使用
map:get($context,“collections”)
参数(MLCP指南中描述的输入参数)。 我想使用
-output\u collections
参数中指定的集合,以便将其插入到insert-update()函数中

加载到数据库的文档&mlcp输出并不表示有错误,但当我在查询控制台中查看时,它会显示(无集合),而不是
COLLTEST
。 当我硬编码集合(我不想这样做)时,转换也能正常工作。我是否错误地使用了地图键

mlcp上下文转换测试.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命令:

我还尝试了
map:get($context,“output\u collections”)
。唯一适用于我的
$context
参数是
“transform\u param”

如果有帮助的话,我正在使用mlcp 8.0.6.3。

mlcp 8.0-6.3不允许用户访问/修改转换内的文档集合

修复程序依赖于服务器。因此,当您使用mlcp 9.0-x执行此操作时,仍然需要连接到8.0-6.4或更高版本的服务器


8.0-6.3的解决方法是在transform函数中执行文档插入,并从transform函数返回空序列

mlcp 8.0-6.3不允许用户访问/修改转换内的文档集合

修复程序依赖于服务器。因此,当您使用mlcp 9.0-x执行此操作时,仍然需要连接到8.0-6.4或更高版本的服务器


8.0-6.3的解决方法是在transform函数中执行文档插入,并从transform函数返回空序列

看起来对我来说是个正确的方法。你能试试最新版本的MLCP吗?您可以对MarkLogic 8及以下版本使用MLCP 9。@grtjn我尝试使用MLCP 9,但仍然不起作用。我查看了
/MarkLogic/hadoop.xqy
上的
hadoop.xqy
模块,发现
$collections
未包含在
$context
映射中。因此,我尝试将
let$dummy:=map:put($context,“collections”,fn:tokenize($collections,“,”)[.ne“”])
添加到hadoop.xqy中,它一直在工作,但我不确定这是否是正确的方法,或者编辑此模块是否可以。您有什么版本的MakLogic?也许可以尝试升级到您版本的最新补丁版本。对我来说,这似乎是一个正确的方法。你能试试最新版本的MLCP吗?您可以对MarkLogic 8及以下版本使用MLCP 9。@grtjn我尝试使用MLCP 9,但仍然不起作用。我查看了
/MarkLogic/hadoop.xqy
上的
hadoop.xqy
模块,发现
$collections
未包含在
$context
映射中。因此,我尝试将
let$dummy:=map:put($context,“collections”,fn:tokenize($collections,“,”)[.ne“”])
添加到hadoop.xqy中,它一直在工作,但我不确定这是否是正确的方法,或者编辑此模块是否可以。您有什么版本的MakLogic?也许可以尝试升级到您版本的最新修补程序版本。此解决方案是否能够通过
dls:document-insert-and-manage()
功能工作?也许我没有正确地返回空序列…如何插入文档无关紧要。dls:document-insert-and-manage()应该可以。使用当前版本,通过transform_参数设置集合。这是传递给transform函数的唯一命令行参数。此解决方法是否能够通过
dls:document-insert-and-manage()函数工作?也许我没有正确地返回空序列…如何插入文档无关紧要。dls:document-insert-and-manage()应该可以。使用当前版本,通过transform_参数设置集合。这是传递给transform函数的唯一命令行参数。
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