On 14 May 2010, at 12:09, Alexander Klimetschek wrote: > On Fri, May 14, 2010 at 16:56, Rakesh Vidyadharan <[email protected]> wrote: >> Is it possible to filter based on parent node properties when executing an >> XPath query (JR 1.6). Let me explain the scenario that I have. >> >> We have a repository for all the books published by a press. Each book has >> child nodes that identify the various formats it has been published in >> (cloth bound, paperback, etc.) and are termed as distributions. All >> publication dates are associated with the distributions, since the book >> really has no publication date of its own. Each book may belong to an >> array of subjects, so the subjects are stored as a multi-value property in >> the book node. >> >> The structure is something along these lines >> >> /books >> /book >> /A (alphabetical index as well as keep node count under control) >> /bo<Database PK value> <-- represents each book >> /distribution <- Container node for the various distributions >> /di<Database PK value> <-- represents a published format of the >> book >> >> Example path for a distribution is: >> /books/book/T/bo5822950/distribution/di5822950 >> >> I need to generate RSS feeds of the new books (based on dates at the >> distribution node) as well as subject specific RSS for new books. The >> XPath query for the new books is as follows: >> >> //*...@nodetype = 'di' and @date > xs:dateTime('2010-03-13T17:29:50.050Z') >> and @date <= xs:dateTime('2010-05-13T17:29:50.050Z') and @binding != >> 'ec0214db-8bb2-4f23-a925-341cd98196f7'] order by @date descending >> >> Would it be possible in XPath to add some additional predicates to filter by >> subject at the book node level? I can iterate over the results and filter >> on parent.parent, but wondered if it is possible in the query. > > Something like this should be possible: > > /jcr:root/books/book/*[jcr:title= 'My Booktitle']//*...@nodetype = 'di' > and @date > xs:dateTime('2010-03-13T17:29:50.050Z') and @date <= > xs:dateTime('2010-05-13T17:29:50.050Z') and @binding != > 'ec0214db-8bb2-4f23-a925-341cd98196f7'] order by @date descending > > Please note that path-based location steps (eg. the /books/book part) > are not indexed, so this query might be slower than your first one. > > Regards, > Alex
Thanks for the pointer. This does seem to work quite well (executes in milliseconds). Rakesh
