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' && xsd:dateTime(?date) >= '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 查询)
带有 COUNT 和 ORDER 的 SPARQL 查询返回奇数结果