[xquery-talk] joining multiple queries into a single one

Wolfgang Meier wolfgang at exist-db.org
Tue Apr 11 13:50:18 PDT 2006


Hi,

> I am using the eXist Native XML Database. My content files are the path
> /db/content 
> 
> If I write a query such as 
> 
> For $r in /db/content where $r//prolog/meta/filename/text()="xys" 
> 
> this doesn't seem to work.

Please note: collections are internal administrative structures. You 
cannot query them as if they were XML nodes (i.e. with a path 
expression). Instead, you use the collection() function to select a 
collection for the query, so your query above becomes:

for $r in collection("/db/content") where 
$r//prolog/meta/filename/text()="xys"

How the argument to collection() is interpreted is implementation 
dependant. In the case of eXist, the path is resolved as a collection 
path relative to the database root.

To query the various document structures in one query, create a union of 
the nodes in question, e.g.:

for $r in (//task|//concept)/meta/filename/text() = "xys" return $r

or with a predicate instead of the "for":

(//task|//concept)/meta/filename[text() = "xys"]

and including the collection path:

(collection("/db/content/c1")//task|collection("/db/content/c2")//concept)
/meta/filename[text() = "xys"]

Wolfgang


More information about the talk mailing list