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

Reply via email to