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

Reply via email to