首页 > 解决方案 > 如何使用 SPARQL 在 DBPedia 中的消歧/询问子资源中捕获正确的资源?

问题描述

我有一个 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 .
}

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

标签: sparqlrdfwikipediadbpediadisambiguation

解决方案


解决方案,来自@AKSW 的评论——

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' ) ) 
  }

推荐阅读