我想将dbpedia与此代码相关联,他回复了我的错误原因.. 我改变了这个代码的代码:
public class linked2{
public static void main(String[] args) {
// TODO Auto-generated method stub
String service = "http://dbpedia.org/snorql";
String queryString =
"SELECT DISTINCT ?concept ?label"+
"WHERE{ "+
"?concept rdf:type skos:Concept."+
"?concept rdfs:label ?label."+
"?label bif:contains 'samsung'."+
"} ORDER BY DESC(?label) LIMIT 20";
Query query = QueryFactory.create(queryString);
// QueryEngineHTTP qexec = QueryExecutionFactory.sparqlservice(service, query);
QueryEngineHTTP qexec = QueryExecutionFactory.createServiceRequest(service, query);
ResultSet results = qexec.execSelect();
for ( ; results.hasNext() ; ) {
QuerySolution soln = results.nextSolution() ;
System.out.println(soln);
// System.out.println(soln.getLiteral("label"));
}
}
以及此图片中出现的错误:
at com.hp.hpl.jena.sparql.lang.ParserBase.throwParseException(ParserBase.java:661)
at com.hp.hpl.jena.sparql.lang.ParserBase.resolvePName(ParserBase.java:274)
at com.hp.hpl.jena.sparql.lang.sparql_11.SPARQLParser11.PrefixedName(SPARQLParser11.java:4888)
at com.hp.hpl.jena.sparql.lang.sparql_11.SPARQLParser11.iri(SPARQLParser11.java:4872)
at com.hp.hpl.jena.sparql.lang.sparql_11.SPARQLParser11.PathPrimary(SPARQLParser11.java:2922)
at com.hp.hpl.jena.sparql.lang.sparql_11.SPARQLParser11.PathElt(SPARQLParser11.java:2852)
at com.hp.hpl.jena.sparql.lang.sparql_11.SPARQLParser11.PathEltOrInverse(SPARQLParser11.java:2877)
at com.hp.hpl.jena.sparql.lang.sparql_11.SPARQLParser11.PathSequence(SPARQLParser11.java:2830)
答案 0 :(得分:2)
您的查询应该是
SELECT DISTINCT ?concept ?label WHERE {
?concept rdf:type skos:Concept.
?concept rdfs:label ?label.
?label bif:contains 'samsung'.
}
ORDER BY DESC(?label)
LIMIT 20
如果你把它放到sparql.org's query validator,你马上就会看到:
语法错误:
第2行第12列:未解析的前缀名称:rdf:type
您可能应该猜测,这是一个基于堆栈跟踪中resolvePName
的带前缀名称的问题。无论如何,您需要添加表单
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
以及您使用的其他前缀(rdf:
和bif:
)类似。
在您获得前缀后,您会在DBpedia Jena Query returning null中找到已经在{{3}}中描述的查询中的另一个令人讨厌的错误。您确实应该在查询代码中使用换行符,例如
"select * where {\n" +
" ...\n"
因为目前你有
"SELECT DISTINCT ?concept ?label"+
"WHERE{ "+
成为
SELECT DISTINCT ?concept ?labelWHERE {
由于SPARQL查询中的where
是可选的,因此您不会收到语法错误,但您的查询中没有名为?labelWHERE
的变量,因此您将始终获得误导性结果(解决方案不包含变量?label
,仅包含?labelWHERE
)。