Hi Marcel,

I've tested the xpath queries you've posted yesterday, and I've noticed that they behave differently. When I use the first one, with the explicit calls to the xs:dateTime function, eg: //[EMAIL PROTECTED] >= xs:dateTime('2005-01-01T00:00:00.000TZ') and @myDateProperty <= xs:dateTime('2005-12-31T23:59:59.999TZ')]
everything works perfectly well.
But when I use the short version without xs:dateTime function, eg:
//[EMAIL PROTECTED] >= '2005-01-01T00:00:00.000TZ' and @myDateProperty <= '2005-12-31T23:59:59.999TZ']
the result set is always empty.

What's more, when I use a single "greater" or "greater than" condition, eg:
//[EMAIL PROTECTED] >= '2005-01-01T00:00:00.000TZ']
the result set is always full, but when I use a single "less" or "less than" condition, eg:
//[EMAIL PROTECTED] <= '2005-12-31T23:59:59.999TZ']
the result set is always empty, no matter what stands on the right side of the relation.

It seems that the query without xs:dateTime function does not work properly.
Is this a bug or am I missing something?
Regards
Jakub

On Aug 22, 2005, at 10:11 AM, Marcel Reutegger wrote:

Hi Jakub,

JSR-170 specifies a type mapping from property types to types known in XPath. The relevant section in the spec is: 6.6.4.4

regarding your queries:

> "//*[jcr:contains(@myDateProperty, '2005')]"

jcr:contains relies on the fulltext index, which is only required by jsr-170 on a per node basis. still, jackrabbit supports fulltext queries with a property scope. the reason why the above query does not return results is, that jackrabbit does not fulltext index date properties. and I think it is ok, that jackrabbit doesn't do that. your query would be certainly convenient to find all dates of the year 2005, but that's probably the only useful use case. when it comes to month and day a fulltext index would be unable to distinguish them. both are just two digit numbers.

> "//*[jcr:like(@myDateProperty, '2005-%')]"

this query does not return nodes because jcr:like only works on string properties and @myDateProperty is of type date.

what will work is the following:

//[EMAIL PROTECTED] >= xs:dateTime('2005-01-01T00:00:00.000TZ') and @myDateProperty <= xs:dateTime('2005-12-31T23:59:59.999TZ')]

you may also omit the xs:dateTime functions because jackrabbit does some basic value coercing, which includes string to date conversion:

//[EMAIL PROTECTED] >= '2005-01-01T00:00:00.000TZ' and @myDateProperty <= '2005-12-31T23:59:59.999TZ']

regards
 marcel


[EMAIL PROTECTED] wrote:

Hi!
I've been playing with Jackrabbit for some time and I'm having problems with searching by properties with a date value (java.util.Calendar). I'm trying to define a constraint to find only the nodes, let's say from the year 2005.
So I'm trying to perform XPath queries like
"//*[jcr:contains(@myDateProperty, '2005')]" or
"//*[jcr:like(@myDateProperty, '2005-%')]"
But that doesn't work - each time a set of found nodes is empty.
Does anyone know how to perform that kind of searching?
Any help would be highly appreciated.
Best regards
Jakub




Reply via email to