Return-Path: Delivered-To: apmail-jackrabbit-users-archive@locus.apache.org Received: (qmail 96649 invoked from network); 18 Sep 2006 07:50:10 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 18 Sep 2006 07:50:10 -0000 Received: (qmail 12508 invoked by uid 500); 18 Sep 2006 07:50:10 -0000 Delivered-To: apmail-jackrabbit-users-archive@jackrabbit.apache.org Received: (qmail 12486 invoked by uid 500); 18 Sep 2006 07:50:09 -0000 Mailing-List: contact users-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@jackrabbit.apache.org Delivered-To: mailing list users@jackrabbit.apache.org Received: (qmail 12477 invoked by uid 99); 18 Sep 2006 07:50:09 -0000 Received-SPF: pass (hermes.apache.org: domain of michael.neale@gmail.com designates 66.249.82.237 as permitted sender) Received: from [66.249.82.237] (HELO wx-out-0506.google.com) (66.249.82.237) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Sep 2006 00:50:09 -0700 Received: by wx-out-0506.google.com with SMTP id t13so4017347wxc for ; Mon, 18 Sep 2006 00:48:20 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; b=aRX7LivgT+vpNulsBm5MUarIgGwW4ILTt26cXwPGV7NtR7CRItlYMCmWRAktyLP1e+jcyOtr4yVIOkWS0pbO4dAALHq9TxJOScP2zjTxKCqJn/gbQKd7ybImbIw5I6C1jZ37IPsDd9J/KZd2Hy+JYxGIBWWv88tX1tFXtox5Tjg= Received: by 10.90.66.9 with SMTP id o9mr1842806aga; Mon, 18 Sep 2006 00:46:19 -0700 (PDT) Received: by 10.90.98.10 with HTTP; Mon, 18 Sep 2006 00:46:19 -0700 (PDT) Message-ID: <96ab3ced0609180046o47c4ac7h7d8b6678233e8169@mail.gmail.com> Date: Mon, 18 Sep 2006 08:46:19 +0100 From: "Michael Neale" To: users@jackrabbit.apache.org Subject: Re: Quote escaping in jcr:contains searchexp In-Reply-To: <200609172122.k8HLM0MX008253@fury.csl.sri.com> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_42773_9947621.1158565579351" References: <200609172122.k8HLM0MX008253@fury.csl.sri.com> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N ------=_Part_42773_9947621.1158565579351 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline I would be keen to hear about this. Is there or should there be a utility class to escape things correctly for XPath? Kind of like URLEncoder but for xpath? On 9/17/06, Joshua Levy wrote: > > Hi, > I'm trying to properly escape characters in an XPath > query using jcr:contains. Based on Sec 6.6.5.2 of > the JCR spec it seemed like one should use single > quotes and backslash escape some characters (", ', -, \). > > Queries like this work for me: > //element(*, my:record)[jcr:contains(.,'blah\-blah')] order by > jcr:score() descending > //element(*, my:record)[jcr:contains(.,'blah\"blah')] order by > jcr:score() descending > But > //element(*, my:record)[jcr:contains(.,'blah\'blah')] order by > jcr:score() descending > throws an exception (below). > > Am I not doing the escaping correctly, or is it a bug? > > Also, this brings up broader question: Are there any > libraries people use to help formulate (JCR) XPath queries, > that assist with such syntax details? It seems rather > error-prone to be constructing them by hand, particularly > with character escaping (more than one kind), etc. > > Many thanks! > > Joshua > > > > > javax.jcr.query.InvalidQueryException: Lexical error at line 1, column > 110. Encountered: after : "\')] order by jcr:score() descending > return $v": Lexical error at line 1, column 110. Encountered: after : > "\')] order by jcr:score() descending return $v": Lexical error at line 1, > column 110. Encountered: after : "\')] order by jcr:score() > descending return $v" > at org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.( > XPathQueryBuilder.java:249) > at > org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.createQuery( > XPathQueryBuilder.java:275) > at org.apache.jackrabbit.core.query.xpath.QueryBuilder.createQueryTree > (QueryBuilder.java:36) > at org.apache.jackrabbit.core.query.QueryParser.parse(QueryParser.java > :53) > at org.apache.jackrabbit.core.query.lucene.QueryImpl.( > QueryImpl.java:125) > at > org.apache.jackrabbit.core.query.lucene.SearchIndex.createExecutableQuery( > SearchIndex.java:322) > at org.apache.jackrabbit.core.query.QueryImpl.init(QueryImpl.java:92) > at org.apache.jackrabbit.core.SearchManager.createQuery( > SearchManager.java:337) > at org.apache.jackrabbit.core.query.QueryManagerImpl.createQuery( > QueryManagerImpl.java:86) > ------=_Part_42773_9947621.1158565579351--