You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by "Alexander Klimetschek (JIRA)" <ji...@apache.org> on 2010/10/21 21:20:15 UTC

[jira] Issue Comment Edited: (JCR-2797) Xpath: pure descendant-or-self axis does not work

    [ https://issues.apache.org/jira/browse/JCR-2797?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12923575#action_12923575 ] 

Alexander Klimetschek edited comment on JCR-2797 at 10/21/10 3:18 PM:
----------------------------------------------------------------------

Ok, // is actually /descendant-or-self::node()/, so this forces a child step at the end, that's why //node() doesn't work.

Simply /jcr:root/content/descendant-or-self::node() should do it (afaiu the Xpath 2.0 specification). For this Jackrabbit returns only the direct child nodes of /content, but not /content itself nor any sub nodes below the children (eg. /content/child/sub/child etc.).

And according to the JCR spec, only the abbreviated form "//" is supported, but not the literal "descendant-or-self::" (or "node()" KindTest) anyway.

Sad outcome, should have been supported in JCR, quite useful to support the start point of the search tree as well. It works "by accident" in cases where the node's metadata is stored under a jcr:content node (such as for nt:file), but these are not all cases.

Closing for now, maybe coming up with an improvement request.

      was (Author: alexander.klimetschek):
    Ok, // is actually /descendant-or-self::node()/, so this forces a child step at the end, that's why //node() doesn't work.

Simply /jcr:root/content/descendant-or-self::node() should do it (afaiu the Xpath 2.0 specification). For this Jackrabbit returns only the direct child nodes of /content, but not /content itself nor any sub nodes below the children (eg. /content/child/sub/child etc.).
  
> Xpath: pure descendant-or-self axis does not work
> -------------------------------------------------
>
>                 Key: JCR-2797
>                 URL: https://issues.apache.org/jira/browse/JCR-2797
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-core, xpath
>            Reporter: Alexander Klimetschek
>
> A pure descendant-or-self axis "//" does not work, albeit it is defined in JCR 1.0, section 6.6.4.6. Running this query 
> /jcr:root/content// 
> returns an error: 
> Encountered "$" at line 1, column 38. Was expecting one of: "or" ... "and" ... "div" ... "idiv" ... "mod" ... "*" ... "return" ... "to" ... "where" ... "intersect" ... "union" ... "except" ... ... ... "/" ... "//" ... "=" ... "is" ... "!=" ... "<=" ... "<<" ... ">=" ... ">>" ... "eq" ... "ne" ... "gt" ... "ge" ... "lt" ... "le" ... "<" ... ">" ... "-" ... "+" ... "|" ... "[" ... ... ... ... ... "," ... ... ... for statement: for $v in /jcr:root/content// return $v 
> It only works in combination with another location step, like /jcr:root/content//* or /jcr:root/content//test. Tested this on a 2.2 snapshot, but I think it was actually never supported so far. 
> The use case comes up when searching for a property in a subtree of a certain node, where you want to include a property on that node directly as well, eg. /jcr:root/content//[@my:prop = 'value']

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.