【问题标题】:Query DBpedia to get meta-data for Books查询 DBpedia 以获取图书的元数据
【发布时间】:2013-01-11 17:23:54
【问题描述】:

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

我无法理解SPARQL

谁能告诉我如何从 Java 中的DBpedia 获取一本书的元数据?

【问题讨论】:

    标签: java sparql dbpedia isbn


    【解决方案1】:

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

    • 维基百科可能永远不会有完整的 ISBN 列表,所以 DBpedia 也没有
    • 相同的不带破折号的 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 提供的文档。

    【讨论】:

    • 本 - 感谢您的回答。我有另一个问题。我在哪里可以获得,当我提供 ISBN 号时,DBpedia 可以向我提供哪些详细信息?我也可以通过在浏览器中输入查询来获取 JSON,例如 - googleapis.com/books/v1/volumes?q=isbn:3772508456
    • 您可以查看 Wikipedia 上的一些书籍以了解 Infobox 中的内容 - 该信息在 DBpedia 中。或者使用 SPARQL 获取带有标签和描述的书籍属性的this list
    • DBpedia 端点提供 JSON 输出,如 W3C Note Serializing SPARQL Query Results in JSON 中所述。但是,它更像是一个用 JSON 序列化的结果表,而不是像 Google 的 Book API 返回的“直接” JSON 描述。
    • Ben - 我有大约 600,000 个 ISBN。我试图查找大约随机的 30 个,但没有结果。此外,您给出的示例给出了很多难以弄清楚的数据。例如。它给出了 2 个 ISBN 和各种语言的标题。我想根据 ISBN 找出确切的书及其详细信息,例如出版商、作者、地点等。您能帮我解决这个问题吗?
    • 恐怕 DBpedia 中的数据对您的应用程序来说不够细粒度。 ISBN 与特定版本的书籍相关联,但 DBpedia 没有版本的概念。您可以查看APIs of OpenLibrary(披露:我是 OpenLibrary 的用户/志愿者)。它有版本和许多 ISBN,尽管您也会发现 ISBN 缺失。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 2021-01-13
      相关资源
      最近更新 更多