链接数据Jena Eclipse Dbpedia

时间:2014-05-23 11:06:44

标签: java rdf sparql jena 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)

1 个答案:

答案 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)。