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