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

Reply via email to