DBpedia SPARQL 查询 ID3 标签的歌曲信息

Posted

技术标签:

【中文标题】DBpedia SPARQL 查询 ID3 标签的歌曲信息【英文标题】:DBpedia SPARQL query for song information for ID3 tag 【发布时间】:2015-05-28 13:46:11 【问题描述】:

我正在尝试正确标记我的所有音乐。我已经通过 musicbrainz picard 和 MediaGo 迭代了我的音乐,但仍有一些歌曲没有标记或部分标记。 我遇到了 DBpedia 和 SPARQL。现在我想问 SPARQL 的查询是, “给我看 2010-2015 年间的所有音乐专辑、专辑艺术家、专辑中的所有标题、流派、发行年份和封面艺术” 起初我尝试了以下查询,但我无法理解它是如何不显示所有专辑的。我搜索了不存在的“混合理论”。

PREFIX dbpedia0: <http://dbpedia.org/ontology/>
SELECT ?album ?album_name WHERE 
?album a dbpedia0:Album .
?album dbpedia2:name ?album_name .

我还想稍后搜索专辑/电影音乐信息,特别是在 Cinema_of_India 类中。

请指引我正确的方向。

【问题讨论】:

【参考方案1】:

使用 DBpedia,您首先需要定义您尝试提取的实例的类型。在这个特定的示例中,您正在寻找专辑:

?album a dbpedia-owl:Album .

然后您需要查找属于此相册的属性。正如您所命名的那样,您正在寻找:

rdfs:label
dbpedia-owl:artist
dbpedia-owl:genre
dbpedia-owl:releaseDate
dbpprop:title

最后,您希望过滤专辑名称以仅包含英语(或您要查找的任何语言)标签。此外,您对发布日期有限制。

SELECT distinct *
WHERE 
    ?album a dbpedia-owl:Album .
    ?album rdfs:label ?albumName.
    ?album dbpedia-owl:artist ?Artist.
Optional
    ?album dbpedia-owl:genre ?genre.
    ?album dbpedia-owl:releaseDate ?date.
    ?album dbpprop:title ?title.

Filter ( 
    lang(?albumName)='en' && 
    xsd:dateTime(?date) >= '2010-01-01T00:00:00Z'^^xsd:dateTime)

我之所以把一些变量放在 optional 中的原因是,如果有一张专辑,DBpedia 不包含这些信息,它仍然会显示出来。

你的下一个查询,也需要遵循同样的逻辑。例如,如果您正在查找特定专辑,您可以使用此查询并获取有关专辑的其他限制。

SELECT distinct * WHERE  
    ?album a dbpedia-owl:Album.
Filter( ?album=dbpedia:Hybrid_Theory)

【讨论】:

伟大的开始!干净易懂!!感谢您的正确解释。我用Filter ( lang(?albumName)='en' &amp;&amp; xsd:dateTime(?date) &gt;= '1990-01-01T00:00:00Z'^^xsd:dateTime) 编辑了过滤器块以查看专辑 Hybrid Theory (Released 1999/2000) ,但我在查询输出中没有找到这张专辑。我浏览了 dbpedia.org/page/Hybrid_Theory 以查看该艺术家和标签的存在。我在这里错过了什么吗? 即使我用以下查询也看不到混合理论专辑,SELECT distinct * WHERE ?album a dbpedia-owl:Album . 尽管dbpedia.org/page/Hybrid_Theory 在rdf:type 下具有属性dbpedia-owl:Album 这回答了你的问题吗? 您的主要查询已经解决了我的问题,但我认为 dbpedia 可能存在一些问题,因为它没有找到一些(例如 Hybrid_Theory)专辑,即使专辑存在于dbpedia 数据库中。甚至对 Hybrid_Theory 的特定查询也导致了 null。所以我不知道问题出在dbpedia 还是查询脚本上。如果问题出在dbpedia 上,我会将这个帖子设为已回答并提出另一个问题。所以请自行运行脚本找出问题并分享原因。 我不确定你的意思,如果你在我写的主查询的过滤器中添加?album=dbpedia:Hybrid_Theory,它会找到它。找不到记录时我能想到的唯一原因是主要变量之一(例如 ?album、?albumName 或 ?artist)不存在,因此查询将忽略它们。

以上是关于DBpedia SPARQL 查询 ID3 标签的歌曲信息的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在结果中得到重复? (DBpedia sparql 查询)

SPARQL 查询返回邻居数

带有 COUNT 和 ORDER 的 SPARQL 查询返回奇数结果

Ruby on Rails SPARQL 客户端

我正在尝试获取所有拥有超过 3 篇作品的作者的列表 - DBpedia Sparql

查询以显示 DBpedia 的所有类和所有谓词