You need to throw an error to abort the whole transaction. Call fn:error from the catch block.
//Mary On Sep 27, 2016 10:57 PM, "Jain, Abhishek" <abhishek.b.j...@capgemini.com> wrote: Hi Greet, I tried to implement pre-commit solution. In my action module I am trying check if input xml adheres to xml my predefined xml schema Then only it should commit the file if not it should fail. In order to do so, I am written pre-trigger action module as follows – xquery version '1.0-ml'; (: evaluate this against the database specified in the trigger definition (test in this example) :) xdmp:document-insert("/modules/log.xqy", text{ " xquery version '1.0-ml'; import module namespace trgr='http://marklogic.com/xdmp/triggers' at '/MarkLogic/triggers.xqy'; declare variable $trgr:uri as xs:string external; try { (xdmp:log(fn:concat('*****Document ', $trgr:uri, ' was created.*****')), let $root := fn:doc($trgr:uri)/* return $root) } catch ($e) { 'Validation failed: ', $e/error:format-string/text() } "}, xdmp:permission('app-user', 'execute')) My question is how do I force commit to fail. I tried returning fn:false() in above try block but it doesn’t work. What should I return in try block to prevent ingestion. May be a silly one but I am not getting around it. Thanks, Abhishek Jain From: general-boun...@developer.marklogic.com [mailto:general-boun...@developer.marklogic.com] On Behalf Of Jain, Abhishek Sent: Wednesday, September 21, 2016 8:26 PM To: MarkLogic Developer Discussion Subject: Re: [MarkLogic Dev General] Validate XML documents while ingesting and maintain logs of failed documents #CGO# WARNING: Kindly be aware the Sender Address on this mail may be forged. It appears to be from capgemini.com but the message has been received from a server outside Capgemini Group perimeter. User discretion is necessary before performing actions mentioned in this mail. Thanks for the quick input, just had a look at pre-commit trigger, looks like a solution, will give it a try. MLCP/pre-commit will do, Writing off CPF solution for post-commit over-head reason, As I need to upload 1 TB Data. Thank a lot. [Email_CBE.gif]Abhishek Jain Associate Consultant Capgemini India | Hyderabad From: general-boun...@developer.marklogic.com<mailto:general-boun...@developer.marklogic.com> [mailto:general-boun...@developer.marklogic.com] On Behalf Of Geert Josten Sent: Wednesday, September 21, 2016 6:53 PM To: MarkLogic Developer Discussion Subject: Re: [MarkLogic Dev General] Validate XML documents while ingesting and maintain logs of failed documents #CGO# Hi Abhishek, Sounds right overall. An MLCP transform gives some flexibility when you want to validate or not. If you want to enforce it more strictly, you can use a pre-commit trigger, and deny commit if it doesn’t validate by (re)throwing an error (or not catching the validate error). I would recommend using a pre-commit trigger over CPF if it is only for validation. CPF comes with extra overhead, and actions run in post-commit too. You would not be able to prevent inserts, but only able to flag docs as being invalid.. Cheers, Geert From: <general-boun...@developer.marklogic.com<mailto:general-boun...@developer.marklogic.com>> on behalf of "Jain, Abhishek" <abhishek.b.j...@capgemini.com<mailto:abhishek.b.j...@capgemini.com>> Reply-To: MarkLogic Developer Discussion <general@developer.marklogic.com<mailto:general@developer.marklogic.com>> Date: Wednesday, September 21, 2016 at 3:03 PM To: "general@developer.marklogic.com<mailto:general@developer.marklogic.com>" <general@developer.marklogic.com<mailto:general@developer.marklogic.com>> Subject: [MarkLogic Dev General] Validate XML documents while ingesting and maintain logs of failed documents #CGO# Hi Folks, I’m working on a use-case where I need to ingest bulk documents into Marklogic, only those documents which adhere to predefined ( have written my own) XML schema should be loaded into DB. If fails then details should be written in a log file. My approach to achieve this so far is : 1. Create an XSD. 2. Write a MLCP transformation module or content processing framework module 3. Validate content of each document inside the module and using try … catch block 4. If content is valid - insert , if not write to failed list (logs) Am I going right ? Can anyone share with me the best approach ? Is there any other way of doing this than mlcp and CPF ? Thanks and Regards, [Email_CBE.gif]Abhishek Jain Associate Consultant People matter, results count. This message contains information that may be privileged or confidential and is the property of the Capgemini Group. It is intended only for the person to whom it is addressed. If you are not the intended recipient, you are not authorized to read, print, retain, copy, disseminate, distribute, or use this message or any part thereof. If you receive this message in error, please notify the sender immediately and delete all copies of this message.
_______________________________________________ General mailing list General@developer.marklogic.com Manage your subscription at: http://developer.marklogic.com/mailman/listinfo/general