[英]I'm using Jena to launch a SPARQL query. The query works in DBpedia SPARQL endpoint! I verified the query at query validator and got the same error
I need to find movies which are similar to movie for eglagaan based on the common properties.I tried the code below but i am getting the below Exception when i use jena though the query works fine in sparql endpoint. 我需要基于通用属性找到与eglagaan电影相似的电影。我尝试了下面的代码,但是尽管在sparql端点中查询正常,但我使用jena时却遇到了以下异常。
Output in sparql endpoint: 在sparql端点中的输出:
similar movies similarity score
http://dbpedia.org/resource/Lagaan 177
http://dbpedia.org/resource/Jodhaa_Akbar 44
http://dbpedia.org/resource/Jaane_Tu..._Ya_Jaane_Na 42
http://dbpedia.org/resource/Swades 42
http://dbpedia.org/resource/Rangeela_(film) 40
http://dbpedia.org/resource/Dil_Ne_Jise_Apna_Kahaa 38
http://dbpedia.org/resource/Love_You_Hamesha 37
http://dbpedia.org/resource/Sholay 37
http://dbpedia.org/resource/Kannathil_Muthamittal 36
http://dbpedia.org/resource/Andaaz 36
http://dbpedia.org/resource/Jaan-E-Mann 36
http://dbpedia.org/resource/Sarfarosh 36
http://dbpedia.org/resource/Saathiya_(film) 36
http://dbpedia.org/resource/Sillunu_Oru_Kaadhal 36
http://dbpedia.org/resource/Doli_Saja_Ke_Rakhna 36
http://dbpedia.org/resource/Dil_Se.. 36
http://dbpedia.org/resource/Rang_De_Basanti 36
http://dbpedia.org/resource/Lage_Raho_Munna_Bhai 36
http://dbpedia.org/resource/Ishq_Vishk 36
For any other query which i tried im getting the same exception error though that query is working fine in sparql endpoint and Query validator. 对于我尝试过的其他任何查询,我都遇到相同的异常错误,尽管该查询在sparql端点和查询验证器中运行良好。 I tried the solution given in the below link SPARQL parse error with Jena, but DBpedia accepts the query but is doesnt work for me.
我尝试了使用Jena在下面的链接SPARQL解析错误中给出的解决方案,但DBpedia接受了查询但对我不起作用。
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet;
public class Dbpedia {
public static void main(String[] args) {
// TODO Auto-generated method stub
String service="http://dbpedia.org/sparql";
String query= " PREFIX dbpedia: <http://dbpedia.org/resource/> "
+ "PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> "
+ "select ?similar (count(?p) as ?similarity) "
+ "where { values ?movie { dbpedia:Lagaan }"
+ " ?similar ?p ?o ; a dbpedia-owl:Film . "
+ "?movie ?p ?o .} group by "
+ "?similar ?movie having count(?p) > 35 order by desc(?similarity)";
QueryExecution e=QueryExecutionFactory.sparqlService(service, query);
ResultSet rs=e.execSelect();
while (rs.hasNext()) {
QuerySolution qs=rs.nextSolution();
System.out.println(qs);
}
}
}
ERROR: 错误:
Exception in thread "main" com.hp.hpl.jena.query.QueryParseException: Encountered " ">" "> "" at line 1, column 350.
Was expecting one of:
<EOF>
<IRIref> ...
<PNAME_NS> ...
<PNAME_LN> ...
"limit" ...
"offset" ...
"order" ...
"values" ...
"exists" ...
"not" ...
"count" ...
"min" ...
"max" ...
"sum" ...
"avg" ...
"sample" ...
"group_concat" ...
"bound" ...
"coalesce" ...
"if" ...
"bnode" ...
"iri" ...
"uri" ...
"str" ...
"strlang" ...
"strdt" ...
"datatype" ...
"lang" ...
"langmatches" ...
"isURI" ...
"isIRI" ...
"isBlank" ...
"isLiteral" ...
"isNumeric" ...
"regex" ...
"sameTerm" ...
"RAND" ...
"ABS" ...
"CEIL" ...
"FLOOR" ...
"ROUND" ...
"CONCAT" ...
"SUBSTR" ...
"STRLEN" ...
"REPLACE" ...
"UCASE" ...
"LCASE" ...
"ENCODE_FOR_URI" ...
"CONTAINS" ...
"STRSTARTS" ...
"STRENDS" ...
"STRBEFORE" ...
"STRAFTER" ...
"YEAR" ...
"MONTH" ...
"DAY" ...
"HOURS" ...
"MINUTES" ...
"SECONDS" ...
"TIMEZONE" ...
"TZ" ...
"NOW" ...
"UUID" ...
"STRUUID" ...
"MD5" ...
"SHA1" ...
"SHA256" ...
"SHA384" ...
"SHA512" ...
"(" ...
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)
at com.hp.hpl.jena.query.QueryExecutionFactory.sparqlService(QueryExecutionFactory.java:311)
at com.hp.hpl.jena.query.QueryExecutionFactory.sparqlService(QueryExecutionFactory.java:298)
at com.wiki.Dbpedia.main(Dbpedia.java:22)
I tried removing the group by clause which is validated by query validator and gives some output at sparql endpoint but again same exception when i run it in eclipse 我尝试删除由查询验证器验证的group by子句,并在sparql端点提供一些输出,但是当我在eclipse中运行它时再次出现相同的异常
" PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> " +
" PREFIX dbpedia: <http://dbpedia.org/resource/> " +
" SELECT ?similar " +
" WHERE " +
" { VALUES ?movie { dbpedia:Lagaan } " +
" ?similar ?p ?o ."+
" ?similar <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> dbpedia-owl:Film ." +
" ?movie ?p ?o " +
" } ";
CHANGES:` query validator returns the following query output when i added () to having as said by @AndyS 更改:当我在@AndyS所说的添加()时,查询验证器返回以下查询输出
1 PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
2 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
3
4 SELECT ?similar (count(?p) AS ?similarity)
5 WHERE
6 { VALUES ?movie { <http://dbpedia.org/resource/Lagaan> }
7 ?similar ?p ?o .
8 ?similar rdf:type dbpedia-owl:Film .
9 ?movie ?p ?o
10 }
11 GROUP BY ?similar ?movie
12 HAVING ( count(?p) > 35 )
13 ORDER BY DESC(?similarity)
I changed query to following in eclipse but again the same error. 我在eclipse中将查询更改为以下内容,但再次出现相同的错误。
String query= "PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>"+
"PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"+
"SELECT ?similar (count(?p) AS ?similarity)" +
"WHERE" +
"{ VALUES ?movie { <http://dbpedia.org/resource/Lagaan> }"+
"?similar ?p ?o ."+
"?similar rdf:type dbpedia-owl:Film ."+
"?movie ?p ?o"+
"}"+
"GROUP BY ?similar ?movie"+
"HAVING ( count(?p) > 35 )"+
"ORDER BY DESC(?similarity)";
Corrected Query: 更正的查询:
String query="PREFIX dbpprop: <http://dbpedia.org/property/> "
+ " PREFIX dbpedia: <http://dbpedia.org/resource/> "
+ "PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> "
+ "select ?similar (count(?p) as ?similarity) "
+ "where { values ?movie { <http://dbpedia.org/resource/Lagaan> }"
+ " ?similar ?p ?o ; a dbpedia-owl:Film . "
+ "?movie ?p ?o .} group by "
+ "?similar ?movie having(count(?p) > 35) order by desc(?similarity)";
new query to find movie link with movie name: 新查询以查找具有电影名称的电影链接:
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT *WHERE
{
{
select distinct ?film where {
?film a dbpedia-owl:Film .
?film rdfs:label ?label .
filter regex( str(?label), "Lagaan", "i")
}
limit 10
}
now how to pass the output of this query to the similarity query? 现在如何将此查询的输出传递给相似性查询?
Modified query using wikiredirects to handle mispelled movie names as suggested by @Joshau Taylor: 修改后的查询使用wikiredirects处理@Joshau Taylor建议的拼写错误的电影名称:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT ?s ?other (count(*) AS ?similarity)
WHERE
{
{
SELECT ?s WHERE {
{ ?s rdfs:label "Veer zara"@en .
?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> owl:Thing
}
UNION
{ ?altName rdfs:label "Veer zara"@en .
?altName dbo:wikiPageRedirects ?s
}
}
}
?s ?p ?o .
?other <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> dbo:Film .
?other ?p ?o
}
GROUP BY ?s ?other
HAVING ( count(?p) > 25 )
ORDER BY DESC(?similarity)
It looks like this got resolved in the comments. 看来此评论已解决。 Here's a community wiki answer for the sake of visitors (in case the comments get deleted):
这是为访问者而设的社区Wiki答案(以防删除评论):
- Put some newlines in the query and see exactly where parser referes to.
在查询中放入一些换行符,然后查看解析器确切指向的位置。 It will be the place the parse error starts.
它将是解析错误开始的地方。 HAVING clause needs () for legal SPARQL 1.1
having (count(?p) > 35)
.having (count(?p) > 35)
合法SPARQL 1.1的HAVING子句需要(having (count(?p) > 35)
。 – AndyS–安迪斯
{ dbpedia:Lagaan }
isn't right either – AndyS yesterday{ dbpedia:Lagaan }
也不正确–昨天{ dbpedia:Lagaan }
- i got it.It needed a space after the angular bracket in the prefix.
我明白了。它在前缀的尖括号后面需要一个空格。 – Kulsum Fatima
–库尔苏姆·法蒂玛(Kulsum Fatima)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.