It's a bug in how OpAsQuery converts sub-queries, watch this space for a fix
Rob On 4/23/13 12:35 PM, "John Liu" <john_ws_...@yahoo.com> wrote: >oh I see, thanks Rob. > >I paste the class here, you will see the exception error when you run the >code. > import >com.hp.hpl.jena.query.Query;import >com.hp.hpl.jena.query.QueryFactory;import >com.hp.hpl.jena.sparql.algebra.AlgebraGenerator;import >com.hp.hpl.jena.sparql.algebra.Op;import >com.hp.hpl.jena.sparql.algebra.OpAsQuery;public >classTestJena { >/*** >@paramargs*/ >publicstaticvoidmain(String[] args) {String queryString = >"PREFIX dcterms: <http://purl.org/dc/terms/> \n"+ >"PREFIX dbpedia: <http://dbpedia.org/resource/> \n"+ >"SELECT ?num_of_holidays ?celebrate_Chinese_New_Year WHERE { \n"+ >"{"+ >"SELECT ?country_cat (COUNT(?holiday) as ?num_of_holidays) \n"+ >"WHERE {"+ >"?country_cat <http://www.w3.org/2004/02/skos/core#broader> ><http://dbpedia.org/resource/Category:Public_holidays_by_country>. \n"+ >"?holiday dcterms:subject ?country_cat \n"+ >"}GROUP by ?country_cat \n"+ >"} \n"+ >"{ \n"+ >"SELECT ?country_cat (COUNT(?holiday) as ?celebrate_Chinese_New_Year) \n"+ >"WHERE { \n"+ >"?country_cat <http://www.w3.org/2004/02/skos/core#broader> ><http://dbpedia.org/resource/Category:Public_holidays_by_country>. \n"+ >"?holiday dcterms:subject ?country_cat \n"+ >"FILTER(?holiday=\"http://dbpedia.org/resource/Lunar_New_Year\'s_Day\") >\n"+ >"}GROUP by ?country_cat \n"+ >"} \n"+ >"}\n";System. >out.println("Original query: \n"+ queryString);Query query = >QueryFactory.create(queryString); >AlgebraGenerator ag = >newAlgebraGenerator();Op op = ag.compile(query); >Query query2 = OpAsQuery.asQuery(op); >String queryString2 = query2.toString(); >System. >out.println("Update query: \n"+ queryString2);Query newQuery2 = >QueryFactory.create(queryString2); >} >} > > >________________________________ > From: Rob Vesse <rve...@yarcdata.com> >To: "users@jena.apache.org" <users@jena.apache.org> >Sent: Tuesday, April 23, 2013 2:06:34 PM >Subject: Re: problem in rewriting query by AlgebraGenerator > > >John > >Apache list strips attachments, if you have a code sample please just >paste it into the email or provide a link to a pastebin/similar site with >your code sample > >Rob > > >On 4/23/13 11:02 AM, "John Liu" <john_ws_...@yahoo.com> wrote: > >>Thanks Andy for your quick reply. >> >>I tested Jena 2.10.1 and the problem still exists. Could you please run >>the attached java code to see if it is a defect? >> >>Thanks, John >> >> >>________________________________ >> From: Andy Seaborne <a...@apache.org> >>To: users@jena.apache.org >>Sent: Tuesday, April 23, 2013 10:46:25 AM >>Subject: Re: problem in rewriting query by AlgebraGenerator >> >> >>On 23/04/13 03:10, John Liu wrote: >>> Hello, >>> I found a problem when rewriting a query by AlgebraGenerator, the >>> generated query becomes syntax incorrect query. Can you please advise >>>if >>> this is a defect? Thanks. >>> The version of JENA I tested is 2.7.1 >> >>There have been various improvements and fixes in this area which you'll >>find in Jena 2.10.0 and in the active development system 2.10.1-SNAPSHOT >>(from the Apache snapshot maven repository) >> >> Andy >> >>> The code I rewrite the query is: >>> Query query = QueryFactory./create/(queryString); >>> AlgebraGenerator ag = >>> *new*AlgebraGenerator(); >>> Op op = ag.compile(query); >>> Query query2 = OpAsQuery./asQuery/(op); >>> The original query is: >>> PREFIX dcterms: <http://purl.org/dc/terms/> >>> PREFIX dbpedia: <http://dbpedia.org/resource/> >>> SELECT ?num_of_holidays ?celebrate_Chinese_New_Year WHERE { >>> {SELECT ?country_cat (COUNT(?holiday) as ?num_of_holidays) >>> WHERE {?country_cat <http://www.w3.org/2004/02/skos/core#broader> >>> <http://dbpedia.org/resource/Category:Public_holidays_by_country>. >>> ?holiday dcterms:subject ?country_cat >>> }GROUP by ?country_cat >>> } >>> { >>> SELECT ?country_cat (COUNT(?holiday) as ?celebrate_Chinese_New_Year) >>> WHERE { >>> ?country_cat <http://www.w3.org/2004/02/skos/core#broader> >>> <http://dbpedia.org/resource/Category:Public_holidays_by_country>. >>> ?holiday dcterms:subject ?country_cat >>> FILTER(?holiday="http://dbpedia.org/resource/Lunar_New_Year's_Day") >>> }GROUP by ?country_cat >>> } >>> } >>> The generated query is: >>> SELECT ?country_cat ?celebrate_Chinese_New_Year >>> WHERE >>> { { ?country_cat <http://www.w3.org/2004/02/skos/core#broader> >>> <http://dbpedia.org/resource/Category:Public_holidays_by_country> . >>> ?holiday <http://purl.org/dc/terms/subject> ?country_cat >>> BIND(count(?holiday) AS ?num_of_holidays) >>> } >>> { ?country_cat <http://www.w3.org/2004/02/skos/core#broader> >>> <http://dbpedia.org/resource/Category:Public_holidays_by_country> . >>> ?holiday <http://purl.org/dc/terms/subject> ?country_cat >>> FILTER ( ?holiday = "http://dbpedia.org/resource/Lunar_New_Year's_Day" >>>) >>> BIND(count(?holiday) AS ?celebrate_Chinese_New_Year) >>> } >>> } >>> GROUP BY ?country_cat >>> The generated query has a syntax error: "Line 5, column 12: Aggregate >>> expression not legal at this point". >>> Attached is a hava program to demonstrate the problem,