4

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

我无法理解SPARQL.

有人能告诉我如何从DBpediaJava 中获取一本书的元数据吗?

4

2 回答 2

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

在您的浏览器中查看查询结果

请注意,这regex(?isbn, "0-553-05250-0")需要一些时间来评估。它可能不适用于所有 ISBN,因为

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

另外,我注意到有些 ISBN 只是一串数字和破折号,其他的则带有“ISBN”或附加了“(平装)”。

您可以通过Jena(一个用于 RDF 和 SPARQL 的著名 Java 工具包)通过 web 表单(通过使用浏览器访问端点)将此查询发送到DBpedia 端点。 这是一些 Java 代码中的查询,它查询 DBpedia 的结果并将它们打印到命令行(基于另一个Jena、SPARQL 和 DBpedia 相关的问题,其中有很多):

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 的备忘单,这是一个非常全面的参考资料。也许您想查看Jena 提供的教程及其文档。

于 2013-01-11T20:48:13.310 回答
0

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

维基百科有这个页面用于使用其他 ISBN 搜索引擎。

Amazon.com 在这里有一个 ISBN 搜索。我在亚马逊上找不到自动化 ISBN 搜索的 API。

于 2013-01-11T18:51:52.700 回答