【问题标题】:How to catch correct resource among disambiguations / interrogate subresources in DBPedia using SPARQL?如何使用 SPARQL 在 DBPedia 中的消歧/询问子资源中捕获正确的资源?
【发布时间】:2018-10-30 05:25:09
【问题描述】:

我有一个 Youtube 音乐视频的标题,我需要从 DBPedia 收集其他信息,例如专辑、艺术家、发布日期等。我还想从 DBPedia 获取所有这些实体的“摘要”。我已经使用 Musicbrainz 来区分标题中的歌曲和艺术家,并且效果很好,除了少数情况。

但是我的主要问题是:当我通过歌曲询问 DBPedia(使用资源/{song} 查询)时,有时我没有得到任何答案,因为 {song} 会导致歧义。示例:resource/It's_My_Life 有 11 个消歧,其中 6 个是歌曲。我需要资源“It's_My_Life_(Bon_Jovi_song)”。我如何告诉 DBPedia 我需要某个艺术家的“MusicalWork”类型的资源?

我尝试了多种方法来使用 SPARQL 执行此操作,但我总是得到一个空结果,而且我不知道我做错了什么。到目前为止,我只能获得每个消歧的摘要,但我无法获得消歧子资源的特定属性(如摘要)。

SELECT ?x ?y WHERE {
    <http://dbpedia.org/resource/It's_My_Life>  dbo:wikiPageDisambiguates ?x .
    ?x dbo:abstract ?y .
}

我似乎不能像这样成为父亲。我试过了:

SELECT ?x ?y WHERE {
    <http://dbpedia.org/resource/It's_My_Life>  dbo:wikiPageDisambiguates ?x .
    ?x dbo:MusicalArtist ?y .
    { SELECT ?z WHERE { 
        ?y dbo:abstract ?z}
    }
}

SELECT ?x ?y WHERE {
    <http://dbpedia.org/resource/It's_My_Life>  dbo:wikiPageDisambiguates ?x
    ?x rdfs:type ?y .
}

但结果总是空的。我应该如何询问资源的子资源?谁能帮帮我?

【问题讨论】:

  • 您的第二个查询是空的,因为它是错误的。我不知道你想得到什么,但它dbo:MusicalArtist 不是一个属性。 ?x rdf:type dbo:MusicalArtist 会更有意义。但即便如此,为什么它应该是dbo:MusicalArtist 类型?它显然只是dbo:MusicalWork 类型吗?
  • 无论如何,一个有效的查询:SELECT ?x ?y WHERE { &lt;http://dbpedia.org/resource/It's_My_Life&gt; dbo:wikiPageDisambiguates ?x . ?x rdf:type dbo:MusicalWork. ?x dbo:abstract ?y . filter(langmatches(lang(?y),'en')) }
  • @AKSW 是的,我知道查询错误,但我不知道如何正确继续。我在那里错误地输入了“dbo:MusicalArtist”,因为我忘记考虑到并非所有歧义都属于 MusicalWork 类型。抱歉,SPARQL 对我来说仍然很混乱,我很抱歉。您的查询有效,所以我非常感谢您。我会研究它,以便更好地理解 SPARQL 的工作原理。谢谢。
  • 很高兴它现在可以工作了。是的,SPARQL 有时会让人困惑

标签: sparql rdf wikipedia dbpedia disambiguation


【解决方案1】:

解决方案,@AKSW 从 cmets 中提取 --

SELECT ?x ?y 
WHERE
  { 
    <http://dbpedia.org/resource/It's_My_Life>  dbo:wikiPageDisambiguates  ?x              . 
    ?x                                          rdf:type                   dbo:MusicalWork . 
    ?x                                          dbo:abstract               ?y              . 
    FILTER ( LANGMATCHES ( LANG (?y), 'en' ) ) 
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多