[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