Marklogic内容泵和XSLT转换

时间:2015-09-27 19:43:25

标签: marklogic marklogic-8 mlcp

我正在使用MarkLogic Content Pump来​​提取XML文档。我想使用“-tranform module and -transform namespace”选项在mlcp摄取过程中转换这些xml文档。我已经为转换创建了XSLT,并将其加载到ML“模块"数据库。但mlcp不接受xslt文件并抛出错误:

命令:

iOS Device

抛出以下错误 ERROR:

    mlcp.sh import \
-username $username -password $passwd \
-host $host -port $port \
-input_file_path $inpath \
-input_compressed true \
-input_file_type aggregates \
-aggregate_record_element $splittag \
-aggregate_uri_id $uriid \
-aggregate_record_namespace "http://www.fda.gov/cdrh/gudid" \
-output_collections $collection \
-output_permissions my-app-role,read,my-app-role,update \
-output_uri_suffix .xml \
-transform_module /marklogic.rest.transform/xml-transform-xsl/assets/transform.xsl \
-transform_namespace "http://marklogic.com/rest-api/transform/xml-transform-xsl" \
-transform_function transform

我想知道mlcp是否接受了xslt转换?如果没有,那么替代方案是什么。?

MarkLogic在模块数据库中创建等效的xqy文件。通过调用以下" .xqy"文件,参数不匹配错误将被抛出:我认为这是由于错误的返回类型:

15/09/27 15:34:19 WARN mapreduce.ContentWriter: XDMP-MODNOTTEXT: Module /marklogic.rest.transform/fda-transform-xsl/assets/transform.xsl is not a text document

1 个答案:

答案 0 :(得分:4)

我认为你不能直接在XSLT上指向Content Pump的-transform_module。我认为它需要一个xQuery模块(参见https://docs.marklogic.com/guide/ingestion/content-pump#id_82518)。

你应该能够设置这样一个自定义转换xQuery模块,并通过内容泵传入的$ content map上的xdmp:xslt-invoke()调用你的XSLT转换(参见{{3} })。然后,您可以将-transform_module设置为指向该自定义传输xQuery模块,而不是直接调用XSL转换。

请注意,如果使用-input_file_type聚合(如示例所示),则自定义转换将应用于每个$ splittag定义的片段。因此,传入的$ content映射将是您要拆分(和转换)的片段。