Hi Danny and Geert, Thanks for all the helping. I almost made it work. The only thing I have here is: when I do the eval, I need to call a function in a module. The module file is really the same file that I'm building the xdmp:eval query, but I couldn't make eval know the current path this module is, so I have to specify the full path. For example, I have module file at the path /dev/newsci/helen.xqy , and then you can see I put full path import module namespace oit=""http://www.aip.org/helen.xqy"; at "/dev/newsci/helen.xqy"; in my xdmp:eval, this is going to be a problem because the app server's path on our production server will be different. Does anyone know how I can make the path dynamic? or how to avoid this problem?
my code piece is like the following: xquery version "1.0-ml"; module namespace oit = "http://www.aip.org/helen.xqy"; declare function oit:mytest() { let $c1 := "http://py" let $c2 := "http://mytest" let $cvi := <cvi> <coden>ABC</coden> <volume>90</volume> <issue>1</issue> </cvi> let $oi-state := "PROD" return ( xdmp:eval('xdmp:document-insert("/aa.xml", <foo/>)') , xdmp:eval('xquery version "1.0-ml"; declare variable $e1 as xs:string external; declare variable $e2 as xs:string external; xdmp:document-set-collections( "/aa.xml", ($e1)) , xdmp:document-get-collections("/aa.xml") , xdmp:document-add-collections( "/aa.xml", ($e2))' , (xs:QName("e1"), $c1, xs:QName("e2"), $c2) ) , xdmp:eval( 'xquery version "1.0-ml"; import module namespace oit=""http://www.aip.org/helen.xqy"; at "/dev/newsci/helen.xqy"; declare variable $cvi as element(cvi) external; declare variable $state as xs:string external; oit:create-online-issue-table($cvi/coden/text(), $cvi/volume/text(), $cvi/issue/text(), $state)' , (xs:QName("cvi"), $cvi, xs:QName("state"), $oi-state) ) ) }; then I call oit:mytest() On Jul 7, 2010, at 2:42 AM, Geert Josten wrote: > Hi Helen, > > It is a subtle typo. It sometimes helps to take the query from inside the > eval, and test it all by itself in CQ. If you do so, you see the same > 'unexpected token' message as you would get when it is inside the eval, but > you get a better focus on which line it concerns. In this case it concerns > your external variable declarations. There should be no 'as' before the > external keyword.. > > Kind regards, > Geert > >> > > > drs. G.P.H. (Geert) Josten > Consultant > > Daidalos BV > Hoekeindsehof 1-4 > 2665 JZ Bleiswijk > > T +31 (0)10 850 1200 > F +31 (0)10 850 1199 > > mailto:[email protected] > http://www.daidalos.nl/ > > KvK 27164984 > > > De informatie - verzonden in of met dit e-mailbericht - is afkomstig van > Daidalos BV en is uitsluitend bestemd voor de geadresseerde. Indien u dit > bericht onbedoeld hebt ontvangen, verzoeken wij u het te verwijderen. Aan dit > bericht kunnen geen rechten worden ontleend. > >> From: [email protected] >> [mailto:[email protected]] On Behalf Of >> Helen Chen >> Sent: woensdag 7 juli 2010 4:03 >> To: General Mark Logic Developer Discussion >> Subject: Re: [MarkLogic Dev General] how to do >> multi-transaction in a function >> >> Hi Danny, >> >> it works with plain query. usually in my function I have some >> variables and I need to use these variables for eval. I tried >> the following and I couldn't make it work. Can you help me? >> >> xquery version "1.0-ml"; >> >> declare function local:mytest() >> { >> let $c1 := "http://py" >> let $c2 := "http://mytest" >> return >> ( >> xdmp:eval('xdmp:document-insert("/aa.xml", <foo/>)') , >> xdmp:eval('xquery version "1.0-ml"; >> declare variable $e1 as external; >> declare variable $e2 as external; >> xdmp:document-set-collections( "/aa.xml", ($e1)) >> , >> xdmp:document-get-collections("/aa.xml") >> , >> xdmp:document-add-collections( "/aa.xml", ($e2))' >> , >> (xs:QName("e1"), $c1, xs:QName("e2"), $c2) >> >> ) >> , >> xdmp:eval('xdmp:document-get-collections("/aa.xml")') >> ) >> }; >> >> local:mytest() >> >> >> >> >> >> On Jul 6, 2010, at 5:18 PM, Danny Sokolsky wrote: >> >> >> You need to make the updates happen in a separate >> transaction and then make the get-collections happen in a >> separate transaction that has a timestamp later than the >> update. One way to do that is by making them each do evals. >> SOmething like: >> >> xquery version "1.0-ml"; >> declare function local:mytest() >> { >> ( >> xdmp:eval('xdmp:document-insert("/aa.xml", <foo/>)'), >> xdmp:eval('xdmp:document-set-collections( "/aa.xml", >> ("http://py")) >> , >> xdmp:document-get-collections("/aa.xml") >> , >> xdmp:document-add-collections( "/aa.xml", ("http://mytest"))') >> , >> xdmp:eval('xdmp:document-get-collections("/aa.xml")') >> ) >> }; >> >> local:mytest() >> >> -Danny >> >> From: [email protected] >> [mailto:[email protected]] On Behalf Of >> helen chen >> Sent: Tuesday, July 06, 2010 2:03 PM >> To: General Mark Logic Developer Discussion >> Subject: [MarkLogic Dev General] how to do >> multi-transaction in a function >> >> I want to do an update to a document and then see the >> update immediately. I did a test like the following: >> I add a collection to a document, then try to get it, >> within the same transaction I cannot see the new collection. >> That means I have to be in the seperate transaction. >> >> declare function local:mytest() >> { >> ( >> xdmp:document-set-collections( "/aa.xml", ("http://py")) >> , >> xdmp:document-get-collections("/aa.xml") >> , >> xdmp:document-add-collections( "/aa.xml", ("http://mytest")) >> , >> xdmp:document-get-collections("/aa.xml") >> ) >> }; >> >> local:mytest() >> >> >> How can I make the last line >> xdmp:document-get-collections("/aa.xml") as seperate >> transaction so I can see the change? >> >> Thanks, Helen >> _______________________________________________ >> General mailing list >> [email protected] >> http://developer.marklogic.com/mailman/listinfo/general >> >> >> >> > _______________________________________________ > General mailing list > [email protected] > http://developer.marklogic.com/mailman/listinfo/general
_______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
