[xquery-talk] Get collection context in XQuery
ricardo queiros
ricardo.queiros at gmail.com
Fri Feb 6 12:07:33 PST 2009
Thanks to both.But to preserve hierarchy and extended my previous example:
A
- 1.xml
- 2.xml
B
- 3.xml
C
- 4.xml
If my WHERE clause is evaluated to TRUE in documents 2.xml, 3.xml and 4.xml.
I would like to have the following result
<RESULTS>
<A>2.xml<A>
<B>3.xml<C>4.xml</C></B>
</RESULTS>
or a id/idref approach:
<RESULTS id="1">
<A id="2" refid="1">2.xml<A>
<B id="3" refid="1">3.xml</B>
<C id="4" refid="3">4.xml</C>
</RESULTS>
Thanks!!
2009/2/6 Wolfgang <wolfgang at exist-db.org>
> 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
>
--
Ricardo Queirós
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://x-query.com/pipermail/talk/attachments/20090206/37d133df/attachment.htm
More information about the talk
mailing list