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