如何使用 SPARQL 在 DBPedia 中的消歧/查询子资源中捕获正确的资源?
How to catch correct resource among disambiguations / interrogate subresources in DBPedia using SPARQL?
我有 Youtube 音乐视频的标题,我需要从 DBPedia 收集其他信息,如专辑、艺术家、发行日期等。我还想获得所有这些实体的 'abstract'来自 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 .
}
但是结果总是空的。我应该如何查询资源的子资源?谁能帮帮我?
解决方案,摘自@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' ) )
}
我有 Youtube 音乐视频的标题,我需要从 DBPedia 收集其他信息,如专辑、艺术家、发行日期等。我还想获得所有这些实体的 'abstract'来自 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 .
}
但是结果总是空的。我应该如何查询资源的子资源?谁能帮帮我?
解决方案,摘自@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' ) )
}