查询DBpedia以获取Books的元数据

时间:2013-01-11 17:23:55

标签: java sparql dbpedia isbn

我有一堆ISBN。我想查询DBpedia并获取图书的元数据。

我无法理解SPARQL

有人可以告诉我如何从Java DBpedia获取图书的元数据?

2 个答案:

答案 0 :(得分:2)

SPARQL既是查询语言,也是查询所谓 SPARQL端点的协议。

一个SPARQL查询,要求DBpedia提供具有ISBN 0-553-05250-0及其(或其)相关属性和值的书籍(或书籍):

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,因为

  • 维基百科可能永远不会有完整的ISBN列表,因此DBpedia
  • 也不例外
  • 相同的没有破折号的ISBN与破折号的查询不匹配。

此外,我noticed有些ISBN只是一串数字和破折号,其他的则有“ISBN”或附加“(平装)”。

您可以通过网络表单(通过浏览器访问端点)通过DBpedia endpoint将此查询发送到Jena,这是一个着名的RDF和SPARQL Java工具包。
以下是一些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提供的文档。

答案 1 :(得分:0)

据我所知,维基百科没有ISBN搜索。

维基百科有this page使用其他ISBN搜索引擎。

Amazon.com有ISBN搜索here。我找不到用于在亚马逊上自动进行ISBN搜索的API。