[xquery-talk] Get collection context in XQuery

Wolfgang wolfgang at exist-db.org
Fri Feb 6 12:53:27 PST 2009


> I have his XQuery file:
> 
> FOR $x in collection("A","B")
> WHERE ...
> RETURN ?
> 
> If, for example, only the 2.xml and 3.xml were evaluate for TRUE in the 
> WHERE clause, i want to obtain the following XML data:
> 
> <RESULTS>
> <A>2.xml<A>
> <B>3.xml</B>
> </RESULTS>
> 
> What should i put in the RETURN clause?

Function document-uri returns the URI of the document, which - for eXist 
- is the same as the collection path. Using standard xquery functions, 
you could extract the collection and document name as follows:

for $m in (collection('/db/A'), collection('/db/B'))/*
let $col := replace(document-uri(root($m)), '^.*/(.*)/[^/]+$', '$1')
let $doc := replace(document-uri(root($m)), '^.*/([^/]+$)', '$1')
return
   element { $col } { $doc }

Note that fn:collection does only allow one parameter (though older 
versions of eXist accepted more for historical reasons).

Wolfgang


More information about the talk mailing list