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

Reply via email to