【问题标题】:Lookup DBpedia gloss using JSON API使用 JSON API 查找 DBpedia 光泽
【发布时间】:2014-10-22 22:53:13
【问题描述】:

是否有一种快速且容易使用 DBpedia JSON API 在 DBpedia 中查找特定 URI 的 Wikipedia 注释文本?

例如我可以通过下载http://dbpedia.org/data/Cat.json 获得 DBpedia 对猫的所有三元组,但我想要的只是带有{"type" : "literal" ...} 的三元组。我可以在不下载和解析整个 JSON 输出的情况下得到这个吗? JSON API 似乎不支持任何类型的过滤,而且我找不到任何文档。

【问题讨论】:

    标签: json sparql semantic-web dbpedia


    【解决方案1】:

    听起来您正在寻找的是 [dbpedia:Cat ?p ?o] 形式的所有三元组,其中 ?o 是文字。您可以使用针对public DBpedia endpoint 的 SPARQL CONSTRUCT 查询并以 RDF/JSON 请求结果。

    construct where {
      dbpedia:Cat ?p ?o
      filter isLiteral(?o)
    }
    

    SPARQL results

    构造查询是 SPARQL 标准的一部分,在 16.2 CONSTRUCT 中进行了描述。 如果您使用的是sparql-client for Python(虽然这个问题没有语言标签,所以没有理由假设普通读者会这样做),请注意its documentation 说:

    sparql-client 是一个 SPARQL 查询库,它通过 HTTP 对 SPARQL 端点执行 SELECTASK 查询。

    由于此特定客户端不支持 CONSTRUCT 查询,因此您需要改用 SELECT 查询。您可以使用:

    select ?p ?o { 
      dbpedia:Cat ?p ?o 
      filter isLiteral(?o)
    }
    

    SPARQL results

    生成的 JSON 不是完全相同的形式,但它仍然很规则,您可以轻松处理它:

    { "head": { "link": [], "vars": ["p", "o"] },
      "results": { "distinct": false, "ordered": true, "bindings": [
        { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/abstract" }   , "o": { "type": "literal", "xml:lang": "nl", "value": "De kat of huiskat (Felis catus) is een van de oudste huisdieren van de mens. De gedomesticeerde kat behoort tot de familie der katachtigen (Felidae). De oude soortnaam was Felis domesticus, tegenwoordig is deze vervangen door Felis catus. Eind 2009 waren in Nederland ongeveer 3,6 miljoen katten aanwezig." }},
        …
        { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/conservationStatus" } , "o": { "type": "literal", "xml:lang": "en", "value": "DOM" }},
        { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/synonym" }    , "o": { "type": "literal", "xml:lang": "en", "value": "Felis catus domestica (invalid junior synonym)" }},
        { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/synonym" }    , "o": { "type": "literal", "xml:lang": "en", "value": "Felis silvestris catus (subjective synonym)" }},
        { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/wikiPageID" } , "o": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#integer", "value": "6678" }},
        { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/wikiPageRevisionID" } , "o": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#integer", "value": "547667240" }},
        { "p": { "type": "uri", "value": "http://www.w3.org/2000/01/rdf-schema#label" } , "o": { "type": "literal", "xml:lang": "zh", "value": "\u732B" }},
        { "p": { "type": "uri", "value": "http://www.w3.org/2000/01/rdf-schema#label" } , "o": { "type": "literal", "xml:lang": "de", "value": "Hauskatze" }},
        …
    

    【讨论】:

    • 奇怪的是,当我尝试从 Python sparql client 执行您的查询时,我收到了“sparql.SparqlException”。 “构造”命令是非标准的 Sparql 吗?
    • @Cerin CONSTRUCT 是标准的,但您的客户不支持整个标准。我已经更新了我的答案。如果您需要特定语言的解决方案,您真的应该考虑在问题中添加python 标签。
    猜你喜欢
    • 2016-06-30
    • 2016-03-31
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    相关资源
    最近更新 更多