vis*_*Net 1 marklogic marklogic-8 mlcp
我正在使用MarkLogic Content Pump来提取XML文档。我想使用“ -transform模块和-transform名称空间”选项在mlcp提取过程中转换这些xml文档。我已经为转换创建了XSLT,并将其加载到ML“模块”数据库中,但是mlcp不接受xslt文件并抛出错误:
命令:
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
Run Code Online (Sandbox Code Playgroud)
下面的错误抛出ERROR:
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
Run Code Online (Sandbox Code Playgroud)
我想知道mlcp是否接受xslt转换?如果没有,那有什么选择呢?
MarkLogic在模块数据库中创建等效的xqy文件。通过在“ .xqy”文件下面调用,将引发参数不匹配错误:我认为这是由于错误的返回类型造成的:
xquery version "1.0-ml";
module namespace simple-xsl = "http://marklogic.com/rest-api/transform/simple-xsl";
import module namespace extut = "http://marklogic.com/rest-api/lib/extensions-util"
at "/MarkLogic/rest-api/lib/extensions-util.xqy";
declare namespace xsl = "http://www.w3.org/1999/XSL/Transform";
declare default function namespace "http://www.w3.org/2005/xpath-functions";
declare option xdmp:mapping "false";
declare private variable $transform-uri := "/marklogic.rest.transform/fda-transform-xsl/assets/transform.xsl";
declare function fda-transform-xsl:transform(
$context as map:map,
$params as map:map,
$content as document-node()
) as document-node()?
{
extut:execute-transform($transform-uri,$context,$params,$content)
};
Run Code Online (Sandbox Code Playgroud)
小智 5
我认为您不能直接将Content Pump的-transform_module指向XSLT。我认为它期望使用xQuery模块(参见https://docs.marklogic.com/guide/ingestion/content-pump#id_82518)。
您应该能够设置这样的自定义转换xQuery模块,并通过Content Pump传入的$ content映射上的xdmp:xslt-invoke()从那里调用XSLT转换(请参阅http://docs.marklogic .com / xdmp:xslt-invoke)。然后,您将设置-transform_module指向该自定义传输xQuery模块,而不是直接调用XSL转换。
请注意,如果您使用-input_file_type聚合(如您的示例中所示),则自定义转换将应用于每个$ splittag定义的片段。因此,传入的$ content映射将是您要拆分(和转换)的片段。
| 归档时间: |
|
| 查看次数: |
295 次 |
| 最近记录: |