Consulta SPARQL “COUNT” na API Virtuoso Jena - QueryParseException
A mesma consulta funciona no ponto de extremidade DBpedia (http://ko.dbpedia.org/sparql), mas não no meu código Java. Estou apenas tentando extrair a frequência usando a função "COUNT".
VirtGraph set = new VirtGraph("http://ko.dbpedia.org", HOST, USERNAME, PASSWORD);
Query freqsparql = QueryFactory.create("SELECT ?class count(distinct ?s) as ?count where{?s <http://ko.dbpedia.org/property/이름> ?o. ?s a ?class.} order by DESC(?count)");
VirtuosoQueryExecution freqvqe = VirtuosoQueryExecutionFactory.create(freqsparql, set);
ResultSet freqresults = freqvqe.execSelect();
E o erro é o seguinte.
Exception in thread "main" com.hp.hpl.jena.query.QueryParseException: Encountered " "count" "count "" at line 1, column 15.
Was expecting one of:
<VAR1> ...
<VAR2> ...
"from" ...
"where" ...
"(" ...
"{" ...
at com.hp.hpl.jena.sparql.lang.ParserSPARQL11.perform(ParserSPARQL11.java:102)
at com.hp.hpl.jena.sparql.lang.ParserSPARQL11.parse$(ParserSPARQL11.java:53)
at com.hp.hpl.jena.sparql.lang.SPARQLParser.parse(SPARQLParser.java:37)
at com.hp.hpl.jena.query.QueryFactory.parse(QueryFactory.java:148)
at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:80)
at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:53)
at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:41)
Estou usando o virt_jena2.jar e o virtjdbc4.jar. Fui consultado por perguntas e respostas semelhantes (a extensão Jena ARQ e o SPARQL 1.1 suportam essa consulta agregada - mas não consegui descobrir como alterá-la - acho que estou usando o SPARQL1.1 porque a mensagem de erro inclui PARSERSPARQL11. java), mas não consigo descobrir como resolver isso neste momento.
Desde já, obrigado.
String sparqlQueryString = "SELECT ?class count(distinct ?s) as ?count where{?s <http://ko.dbpedia.org/property/이름> ?o. ?s a ?class.} order by DESC(?count)";
Query query = QueryFactory.create(sparqlQueryString);
QueryExecution qexec = QueryExecutionFactory.sparqlService(
"http://ko.dbpedia.org/sparql", query);
try {
ResultSet results = qexec.execSelect();
while(results.hasNext()){
QuerySolution freqresult = results.nextSolution();
RDFNode domain = freqresult.get("class");
RDFNode freqcount = freqresult.get("count");
System.out.println(freqresult);
System.out.println(domain + "---" + freqcount);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
qexec.close();
}
Este código Jena (sem Virtuoso) me dá a mesma mensagem de erro.