【问题标题】:How to retrieve abstract for a DBpedia resource?如何检索 DBpedia 资源的摘要?
【发布时间】:2026-02-09 11:25:01
【问题描述】:

我需要查找其摘要包含特定单词的所有 DBpedia 类别和文章。 我知道如何编写一个查询标签的 SPARQL 查询,如下所示:

SELECT ?uri ?txt  WHERE {
  ?uri rdfs:label ?txt .
  ?txt bif:contains "Machine" .
}

但我还没有弄清楚如何搜索摘要。 我尝试了以下方法,但似乎不正确。

SELECT ?uri ?txt  WHERE {
  ?uri owl:abstract ?txt .
  ?txt bif:contains "Machine" .
}

如何检索摘要以查询其文本?

【问题讨论】:

    标签: sparql dbpedia


    【解决方案1】:

    既然您已经知道如何在字符串中搜索文本内容,那么这个问题实际上是关于如何获取摘要的。如果您在 Web 浏览器中检索任何 DBpedia 资源,例如 http://dbpedia.org/resource/Mount_Monadnock(将重定向到 http://dbpedia.org/page/Mount_Monadnock),您可以看到它是主语或谓语的三元组。在本例中,您将看到该属性为dbpedia-owl:abstract。因此,您可以执行类似

    的操作
    select * where { 
      ?s dbpedia-owl:abstract ?abstract .
      ?abstract bif:contains "Monadnock" .
      filter langMatches(lang(?abstract),"en")
    }
    limit 10
    

    SPARQL results

    您可以简单地检索主题的所有三元组,并查看哪些三元组与其摘要相关,而不是访问端点不支持的资源页面。由于您知道摘要是文字,因此您甚至可以将其限制为三元组,其中对象是文字,并且可能使用您想要的语言。例如,

    select ?p ?o where { 
      dbpedia:Mount_Monadnock ?p ?o .
      filter ( isLiteral(?o) && langMatches(lang(?o),'en') )
    }
    

    SPARQL results

    这也清楚地表明你想要的属性是http://dbpedia.org/ontology/abstract。当您有一个可用于拉取任意数据的实时查询界面时,很容易找出您想要的数据部分。一开始只需下拉更多,然后再细化以获得你想要的。

    【讨论】:

    • 非常感谢,两种解决方案都返回了我想要的。但是,既然您似乎已经彻底调查过了,我想再问您一些事情..我不明白您的短语“哪些不是端点将支持”..您想澄清一下吗?那是我是新手,我想我可以使用 Jena for java 直接询问 DBpedia。我还没有下载任何数据集。我的方法合适吗?谢谢。
    • 还有一个问题:如果您熟悉 Jena 框架,我正在使用 QueryFactory 创建第一个查询,但返回错误“未解析的前缀名称:dbpedia-owl:abstract”。你知道为什么会这样吗? (我可能会为此提出一个新问题)。
    • 是的,您需要在查询中使用prefix dbpedia-owl: <http://dbpedia.org/ontology> 定义前缀。为了方便起见,Web 界面为您预定义了一些,但严格来说,它们需要包含在查询中。
    • 你需要最后的/(我在评论中错过了它):prefix dbpedia-owl: <http://dbpedia.org/ontology/>。之后,属性是http://dbpedia.org/ontology/abstract,而不是http://dbpedia.org/ontologyabstract。 Web 界面上列出的所有前缀。转到dbpedia.org/sparql 并查看顶部的Namespace prefixes 链接。这些是您使用 Web 界面时自动使用的所有前缀。但是,从程序化查询中,您需要包含您使用的任何查询。
    • @svarog 是的,DBpedia 更改了他们的默认前缀集,所以一些旧查询需要更新前缀。