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

Reply via email to