我正在尝试进行这个非常有趣的查询,指向我刚接触DBpedia.org的人,这个SPARQL是我朝着这个方向迈出的第一步。
我已经想出了像这样的代码。它是根据我可以在googleing上找到的内容进行修改的;从源代码中,我可以从一个查询中获得摘要。现在,我希望获得您可以在这里的查询字符串中看到的所有属性,以及更多。
有没有人能帮我把这个修好?我被卡住了。谢谢!
String service = "PREFIX rdfs: http://dbpedia.org/page/Texas_Longhorn";
String query = "SELECT * WHERE {"
+ " rdfs:name ?name ;"
+ " rdfs:label ?label ;"
+ " rdfs:abstract ?abstract ."
+ "}";
QueryExecution qe = QueryExecutionFactory.sparqlService(service, query);
try {
ResultSet results = qe.execSelect();
for (; results.hasNext();) {
QuerySolution sol = (QuerySolution) results.next();
System.out.println(sol.get("?name"));
System.out.println(sol.get("?label"));
System.out.println(sol.get("?abstract"));
}
}catch(Exception e){
e.printStackTrace();
}
finally {
qe.close();
}发布于 2015-06-04 04:27:11
您的SPARQL查询完全错误。当您使用SPARQL时,您将查找三元组,而如果您查看第一行,您将只看到两个元素。那么,dbpedia中就没有rdfs:name和rdfs:abstract这样的东西了。rdfs是一个预定义的名称空间,您最好保留它以帮助您处理标签。你有dbpedia-owl:abstract和foaf:name。所以你的查询必须是:
prefix dbpedia-owl: <http://dbpedia.org/ontology/>
prefix foaf: <http://xmlns.com/foaf/0.1/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * WHERE {
?x foaf:name ?name ;
rdfs:label ?label ;
dbpedia-owl:abstract ?abstract .
}但是,在本例中,?name和?label将产生相同的变量。因此,我将您的查询编辑为:
prefix dbpedia-owl: <http://dbpedia.org/ontology/>
prefix foaf: <http://xmlns.com/foaf/0.1/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * WHERE {
?x rdfs:label ?label ;
dbpedia-owl:abstract ?abstract .
}发布于 2015-06-04 05:21:26
除了@Artemis建议的更改之外,您还需要将service字符串更改为dbpedia的端点:
String service = "http://dbpedia.org/sparql";
QueryExecutionFactory.sparqlService接受一个表示SPARQL端点(服务)的字符串参数和一个定义为Jena query或String的查询。
https://stackoverflow.com/questions/30629701
复制相似问题