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

Reply via email to