链接数据Jena Eclipse Dbpedia



我想链接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)

声明前缀

你的查询应该是

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的查询验证器中,您将立即看到:

语法错误:

第2行,第12列:未解析的前缀名称:rdf:type

您可能已经猜到这是一个基于堆栈跟踪中的resolvePName的前缀名称的问题。无论如何,您需要添加

形式的前缀声明。
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

和您使用的其他前缀(rdf:bif:)类似。

更多问题

在您整理了前缀之后,您将在查询中发现另一个令人讨厌的错误,这个错误已经在DBpedia Jena query返回null中描述过。你真的应该在查询代码中使用换行符,例如

"select * where {n" +
"   ...n"

因为现在,你有

"SELECT DISTINCT ?concept ?label"+
"WHERE{ "+

变成

SELECT DISTINCT ?concept ?labelWHERE {

因为SPARQL查询中的where是可选的,所以您不会得到语法错误,但是您的查询中没有一个名为?labelWHERE的变量,因此您总是会得到误导性的结果(解决方案不包含变量?label,只有?labelWHERE)。

最新更新