Hi David, This is interesting. I'll test it and let you know. This will help a lot.
Thanks for information, Helen On Jul 8, 2010, at 3:45 PM, Lee, David wrote: > You are right, I think. > Inside eval it starts from scratch. > Maybe this can help ???? > > http://developer.marklogic.com/pubs/4.1/apidocs/Ext-8.html#xdmp:function > -module > > > If you can get ahold of a function thats already imported maybe you can > find its path and pass that to eval. > > > > -----Original Message----- > From: [email protected] > [mailto:[email protected]] On Behalf Of helen chen > Sent: Thursday, July 08, 2010 3:19 PM > To: General Mark Logic Developer Discussion > Subject: Re: [MarkLogic Dev General] how to do multi-transaction in > afunction > > Hi David, > > Maybe my test was not right. I feel inside xdmp:eval, it does not know > the caller module's path, inside eval, the path start from app server > root. I'll do another test again and see if I can get relative path. > > Thanks, Helen > > On Jul 8, 2010, at 2:44 PM, Lee, David wrote: > >> There's probably a way ! >> But what I do in similar cases is use relative paths >> >> import module namespace="mine" at "../../common/module.xqy" ; >> >> >> >> >> -----Original Message----- >> From: [email protected] >> [mailto:[email protected]] On Behalf Of helen > chen >> Sent: Thursday, July 08, 2010 2:41 PM >> To: General Mark Logic Developer Discussion >> Subject: Re: [MarkLogic Dev General] how to do multi-transaction in >> afunction >> >> Hi David, >> >> our path is two part: >> >> first path is the app server root, like /data/marklogic, this one I > can >> use xdmp:modules-root( ) to get it >> >> for second part, (this is where the marklogic path start), usually we >> put code under newsci/helen.xqy, but for our dev machine or test >> machine, we prefix the path with /dev/ or /test, so the path may be >> /dev/newsci/helen.xqy or /test/newsci/helen.xqy. >> >> if I use xdmp:eval, I need to create xqy string. when I do an import, >> it will be like >> import module namespace oit=""http://www.aip.org/helen.xqy"; at >> "/dev/newsci/helen.xqy"; >> but in production, it will be >> import module namespace oit=""http://www.aip.org/helen.xqy"; at >> "/newsci/helen.xqy"; >> >> I don't know how to get the path "/dev/newsci/" or just "/newsci/" >> dynamically, and I don't want to do any hardcode like /dev or /test. >> >> >> Thanks, Helen >> >> >> On Jul 8, 2010, at 2:20 PM, Lee, David wrote: >> >>> 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 >> >> _______________________________________________ >> 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
