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
