Java Jena出现SPARQL解析错误,但DBpedia接受该查询
我正在使用Jena启动SPARQL查询。我有这个代码,它会产生一个错误。 我不明白这个错误的原因,因为我把这个查询放到了工作中!我认为我正确地编写了查询字符串。怎么了 代码Java Jena出现SPARQL解析错误,但DBpedia接受该查询,java,sparql,jena,Java,Sparql,Jena,我正在使用Jena启动SPARQL查询。我有这个代码,它会产生一个错误。 我不明白这个错误的原因,因为我把这个查询放到了工作中!我认为我正确地编写了查询字符串。怎么了 代码 String sparqlQueryString= “前缀rdfs:”+ “选择?sub?super(count(?mid)作为?length),其中{”+ “值?sub{}”+ “子RDF:子RDF*?mid。”+ “?mid rdfs:子类+?超级。}”+ “分组依据(?sub?super)”+ “按(?长度)排序”;
String sparqlQueryString=
“前缀rdfs:”+
“选择?sub?super(count(?mid)作为?length),其中{”+
“值?sub{}”+
“子RDF:子RDF*?mid。”+
“?mid rdfs:子类+?超级。}”+
“分组依据(?sub?super)”+
“按(?长度)排序”;
query=QueryFactory.create(sparqlQueryString);
查询执行qexec=
QueryExecutionFactory.sparqlService(“http://dbpedia.org/sparql“,查询);
错误
线程“main”com.hp.hpl.jena.query.QueryParseException:遇到异常
第231列第1行的“超级”。
我期待的是:
“不是”。。。
“作为”。。。
“在”。。。
...
...
...
...
...
...
")" ...
"=" ...
"!=" ...
">" ...
“不要在
GROUP BY
变量周围加括号。也就是说,它应该是GROUP BY?sub?super
,
而不是groupby(?sub?super)
。如果您在查询中添加带有\n
的换行符,这一点非常清楚,以便更容易看到错误所在。例如,当我尝试编译以下代码时,会出现以下运行时错误
import com.hp.hpl.jena.query.query;
导入com.hp.hpl.jena.query.QueryExecution;
导入com.hp.hpl.jena.query.QueryExecutionFactory;
导入com.hp.hpl.jena.query.QueryFactory;
公共类解析错误{
@抑制警告(“未使用”)
公共静态void main(字符串[]args){
字符串sparqlQueryString=
“前缀rdfs:\n”+
“选择?sub?super(count(?mid)作为?length),其中{\n”+
“值?sub{}\n”+
“?子rdfs:子SSOF*?mid。\n”+
“?mid rdfs:子类+?超级。}\n”+
“分组依据(?sub?super)\n”+
“按(?长度)\n排序”;
Query=QueryFactory.create(sparqlQueryString);
查询执行qexec=
QueryExecutionFactory.sparqlService(“http://dbpedia.org/sparql“,查询);
}
}
线程“main”com.hp.hpl.jena.query.QueryParseException中出现异常:在第6行第16列遇到“super”
错误正好指向有问题的行。此处不需要括号,因为语法中的结果需要一个或多个s,其形式由该结果定义:
GroupCondition::=内置调用|函数调用|'('表达式('作为'Var'))'|变量
如果有一个groupby(…)
应该是
分组依据(?a+?b)
分组依据(?a+?b为?abSum)
您还可以通过粘贴查询来测试这一点
前缀rdfs:
选择sub super(计数(?中间)作为长度),其中{
值?sub{}
子RDF:子RDF*?mid。
?mid rdfs:子类+?超级。}
分组依据(?sub?super)
按(?长度)排序
从中可以获得输出:
输入:
1前缀rdfs:
2选择子超级(计数(?中间)作为长度),其中{
3个值?sub{}
4?子RDF:子RDF*?mid。
5?中间rdfs:子类+?超级。}
6按(?亚?超)分组
7按(?长度)排序
语法错误
在第6行第16列遇到“?super”。
我期待的是:
“不是”。。。
“作为”。。。
“在”。。。
...
不要在
GROUP BY
变量周围加括号。也就是说,它应该是GROUP BY?sub?super
,
而不是groupby(?sub?super)
。如果您在查询中添加带有\n
的换行符,这一点非常清楚,以便更容易看到错误所在。例如,当我尝试编译以下代码时,会出现以下运行时错误
import com.hp.hpl.jena.query.query;
导入com.hp.hpl.jena.query.QueryExecution;
导入com.hp.hpl.jena.query.QueryExecutionFactory;
导入com.hp.hpl.jena.query.QueryFactory;
公共类解析错误{
@抑制警告(“未使用”)
公共静态void main(字符串[]args){
字符串sparqlQueryString=
“前缀rdfs:\n”+
“选择?sub?super(count(?mid)作为?length),其中{\n”+
“值?sub{}\n”+
“?子rdfs:子SSOF*?mid。\n”+
“?mid rdfs:子类+?超级。}\n”+
“分组依据(?sub?super)\n”+
“按(?长度)\n排序”;
Query=QueryFactory.create(sparqlQueryString);
查询执行qexec=
QueryExecutionFactory.sparqlService(“http://dbpedia.org/sparql“,查询);
}
}
线程“main”com.hp.hpl.jena.query.QueryParseException中出现异常:在第6行第16列遇到“super”
错误正好指向有问题的行。此处不需要括号,因为语法中的结果需要一个或多个s,其形式由该结果定义:
GroupCondition::=内置调用|函数调用|'('表达式('作为'Var'))'|变量
如果有一个groupby(…)
应该是
分组依据(?a+?b)
分组依据(?a+?b为?abSum)
您还可以通过粘贴查询来测试这一点
前缀rdfs:
选择sub super(计数(?中间)作为长度),其中{
值?sub{}
子RDF:子RDF*?mid。
?mid rdfs:子类+?超级。}
分组依据(?sub?super)
按(?长度)排序
从中可以获得输出:
输入:
1前缀rdfs:
2选择子超级(计数(?中间)作为长度),其中{
3个值?sub{}
4?子RDF:子RDF*?mid。
5?中间rdfs:子类+?超级。}
6按(?亚?超)分组
7按(?长度)排序
语法错误
在第6行第16列遇到“?super”。
我期待的是:
“不是”。。。
“作为”。。。
“在”。。。
...
不要插入括号
String sparqlQueryString=
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "+
"select ?sub ?super (count(?mid) as ?length) where {"+
"values ?sub { <http://dbpedia.org/ontology/Writer> }" +
"?sub rdfs:subClassOf* ?mid ."+
"?mid rdfs:subClassOf+ ?super .}"+
"group by (?sub ?super)"+
"order by (?length)";
query = QueryFactory.create(sparqlQueryString);
QueryExecution qexec =
QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql",query);