xdmp:get-request-path() wont return anything for XDBC connections (only HTTP).
You can use : xdmp:modules-root( ) as xs:string http://developer.marklogic.com/pubs/4.1/apidocs/Ext-7.html#xdmp:modules- root To get the root path for modules from XDBC ---------------------------------------- David A. Lee Senior Principal Software Engineer Epocrates, Inc. [email protected] 812-482-5224 -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of helen chen Sent: Wednesday, July 07, 2010 5:04 PM To: General Mark Logic Developer Discussion Subject: Re: [MarkLogic Dev General] how to do multi-transaction in afunction Hi Danny and Geert, I'm using xdbc server, the xdmp:get-request-path() does not seem to return value for me. And also both of our module root path and module path can be different with prefix for different server, if I build the module path string, I have to hardcode some part of path. Finally I figured out to change xdmp:eval to be xdmp:invoke, and I put the code for eval into another file. This way the xdmp:invoke can use relative module path and I don't need to hardcode anything. Let me know if you see anything wrong with my idea. Thanks for all the help. Helen On Jul 7, 2010, at 12:04 PM, Geert Josten wrote: > Hi Helen, > > I think you are looking for fn:resolve-uri(".", xdmp:get-request-path()).. > > Kind regards, > Geert > >> -----Original Message----- >> From: [email protected] >> [mailto:[email protected]] On Behalf Of >> helen chen >> Sent: woensdag 7 juli 2010 16:41 >> To: General Mark Logic Developer Discussion >> Subject: Re: [MarkLogic Dev General] how to do >> multi-transaction in afunction >> >> 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 _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
