map:get($context,"collections")
パラメータをMLCP変換関数(MLCPガイドhereに記載されている入力パラメータ)で使用しようとしています。 -output_collections
パラメータで指定されたコレクションを使用して、insert-update()関数に挿入できるようにします。MLCP変換モジュールのoutput_collectionsキーを使用
文書がデータベースにロードされます& mlcp出力はエラーを示しませんが、クエリコンソールを見ると、COLLTEST
の代わりに(コレクションなし)表示されます。 コレクションは(私がしたくない)コレクションをハードコードするときに変換も正しく動作します。マップキーを間違って使用していますか?
MLCP-コンテキスト・変換・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の最新バージョンを試すことはできますか? MLCP 9をMarkLogic 8以下で使うことができます。 – grtjn
@grtjn MLCP 9を使ってみましたが、それでも動作しませんでした。私は '/ MarkLogic/hadoop.xqy'の' hadoop.xqy'モジュールを見て、$ collectionsが '$ context'マップに含まれていないことに気付きました。そこでhadoop.xqyに 'let $ dummy:= map:put($ context、" collections "、fn:tokenize($ collections、 '、')[。ne ''])'を追加しようとしました。正しいアプローチか、このモジュールを編集しても大丈夫かどうかはわかりません。 – finchmontana
あなたはMakLogicのどのバージョンをお持ちですか?おそらくあなたのバージョンの最新のパッチリリースにアップグレードしようとしています。 – grtjn