【发布时间】:2013-01-11 17:23:54
【问题描述】:
我有一堆 ISBN。我想查询DBpedia获取图书的元数据。
我无法理解SPARQL。
谁能告诉我如何从 Java 中的DBpedia 获取一本书的元数据?
【问题讨论】:
我有一堆 ISBN。我想查询DBpedia获取图书的元数据。
我无法理解SPARQL。
谁能告诉我如何从 Java 中的DBpedia 获取一本书的元数据?
【问题讨论】:
SPARQL 既是一种查询语言,也是一种用于查询所谓的 SPARQL 端点的协议。
向 DBpedia 询问具有 ISBN 0-553-05250-0 及其(或它们的)相关属性和值的一本书(或多本书)的 SPARQL 查询如下:
select distinct ?book ?prop ?obj
where {
?book a dbo:Book .
?book ?prop ?obj .
?book dbp:isbn ?isbn .
FILTER (regex(?isbn, "0-553-05250-0"))
}
LIMIT 100
在浏览器中查看查询结果here。
请注意,regex(?isbn, "0-553-05250-0") 需要一些时间来评估。它可能不适用于所有 ISBN,因为
另外,我 noticed 说,有些 ISBN 只是一串数字和破折号,有些则在其中包含“ISBN”或附加了“(平装本)”。
您可以通过Jena(用于 RDF 和 SPARQL 的著名 Java 工具包)通过网络表单(通过使用浏览器访问端点)将此查询发送到 DBpedia endpoint。
这是一些 Java 代码中的查询,它查询 DBpedia 的结果并将其打印到命令行(基于另一个 Jena, SPARQL and DBpedia related question,其中有很多):
String sparqlQueryString1= "select distinct ?book ?prop ?obj " +
"where { " +
" ?book a dbpedia-owl:Book . " +
" ?book ?prop ?obj . " +
" ?book dbpprop:isbn ?isbn . " +
" FILTER (regex(?isbn, \"0-553-05250-0\")) " +
"} " +
"LIMIT 100";
Query query = QueryFactory.create(sparqlQueryString1);
QueryExecution qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query);
ResultSet results = qexec.execSelect();
ResultSetFormatter.out(System.out, results, query);
qexec.close() ;
我最喜欢的 SPARQL 资源是 Lee Feigenbaum's cheat sheet,这是一个非常全面的参考资料。也许您想查看 tutorials Jena 提供的文档。
【讨论】: