Just to loop back, this question was also posted on Stackoverflow. Though
I would also recommend looking whether you can use aggregate feature
first, and transform second, that might not always be possible. Here some
hints on how to generate multiple documents in a MLCP transform:

http://stackoverflow.com/a/32866121/918496

Cheers

On 9/30/15, 10:03 AM, "[email protected] on behalf
of Tahiliani, Vishal" <[email protected] on behalf
of [email protected]> wrote:

>Regarding below response, if I apply -aggregate_record_element, then the
>input aggregate document will be split and then will sent to xquery
>transform. I want the the aggregate document to be sent to transform ³as
>is² and the xquery and xslt combination to split the document into
>multiple xml document. Because I have scenario like this
>
>Input document 1
><solar-system>
>       <shared_attribute>water</shared_attribute>
>       <planet>earth</planet>
>       <planet>mars</planet>
></solar-system>
>
>Output (multiple document>
>Document 1:
>   <plant exists=³water>earth</planet>
>    
>Document 2:
>  <plant exists=³water>earth</planet>  
>
>How to achieve above through Content Pump xquery->xslt transform? If I
>use -aggregate_record_element, the shared-attribute will be lost. That¹s
>why I created xslt which manually splits the document and returns two
>node to xquery program. As the the MarkLogic document
>
>Please refer to below link:
> docs.marklogic.com/guide/ingestion/content-pump#id_82518
><https://docs.marklogic.com/guide/ingestion/content-pump#id_82518>.
> It clearly says below (but example not provided):
>
> Creating a Custom Transformation :
>A custom transformation is an XQuery function module that conforms to the
>following interface. Your function receives a single input document,
>described by $content, and can generate zero, one, or many output
>documents. ­
>
>
>
>
>Response: 
>
>You'll probably want mlcp to split the aggregate file using
>-aggregate_record_element.  See:
>
>    https://docs.marklogic.com/guide/ingestion/content-pump#id_65814
>
>
>I believe the transform will then be applied to each new document created
>by the split, so at the level of the data node in your example.
>
>
>
>
>Question:
>This is the second question related to MarkLogic content pump utility.
>Question: I am ingesting a single aggregated xml document with multiple
>records into MarkLogic Content pump. I expect the the aggregate XML
>document to be transformed to a different format and also the content
>pump utility to generate multiple xml documents from a single input large
>xml document.?
>
>Example: Aggregated input xml document:
><root>
>       <data>Bob</data>
>       <data>Vishal></data>
></root>
>
>Expected Output from content pump : Two documents with a different format:
>
>Document 1 :
>       <data1>Bob</data1>
>Document 2
>       <data1>Vishal</data1>
>:
>
>I am using following Xslt to split the above document into two nodes:
>       <?xml version="1.0" encoding="UTF-8"?>
>       <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>       xmlns:xs="http://www.w3.org/2001/XMLSchema";
>       exclude-result-prefixes="xs"
>       version="2.0">
>       <xsl:template match="root">
>               <xsl:apply-templates select="data"></xsl:apply-templates>
>       </xsl:template>
>       <xsl:template match="data">
>       <data1>
>               <xsl:value-of select=".?/>
>       </data1>
>       </xsl:template>
>
>XSLT output:
>       <?xml version="1.0" encoding="UTF-8"?>
>               <data1>Bob</data1>
>               <data1>Vishal</data1>
>
>Following is the xquery transform, which calls the above the "xslt file"
>to generate two nodes:
>
>
>       xquery version "1.0-ml";
>       module namespace example = "http://marklogic.com/example";;
>
>       declare function example:transform(
>       $content as map:map,
>       $context as map:map
>       ) as map:map*
>       {
>               let $attr-value :=
>               (map:get($context, "transform_param"), "UNDEFINED")[1]
>               let $the-doc := map:get($content, "value")
>
>               let $let-output:=
>xdmp:xslt-invoke("/marklogic.rest.transform/simple-xsl/assets/transform.xs
>l", $the-doc )
>               return (map:put(
>                       $content, "value",
>                               $let-output
>                       ),$content)
>       };
>
>The above Xquery transforms fails and returns a error.So how to modify
>above xquery program so that it generates and indexes multiple                 
>transformed xml document from a single document?
>
>
>MLCP command used in below scenario
>mlcp.sh import -host localhost -port 8040 \
>    -username admin -password admin \
>    -input_file_path ./parent-form.xml \
>    -transform_module /example/parent-transform.xqy \
>    -transform_namespace "http://marklogic.com/example"; \
>    -transform_param "my-value" \
>    -output_collections people \
>    -output_permissions my-app-role,read,my-app-role,update
>
>
>
>
>_______________________________________________
>General mailing list
>[email protected]
>Manage your subscription at:
>http://developer.marklogic.com/mailman/listinfo/general

_______________________________________________
General mailing list
[email protected]
Manage your subscription at: 
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to