[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