【发布时间】: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 { <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')) } -
@AKSW 是的,我知道查询错误,但我不知道如何正确继续。我在那里错误地输入了“dbo:MusicalArtist”,因为我忘记考虑到并非所有歧义都属于 MusicalWork 类型。抱歉,SPARQL 对我来说仍然很混乱,我很抱歉。您的查询有效,所以我非常感谢您。我会研究它,以便更好地理解 SPARQL 的工作原理。谢谢。
-
很高兴它现在可以工作了。是的,SPARQL 有时会让人困惑
标签: sparql rdf wikipedia dbpedia disambiguation