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