Wikidata:通过SPARQL查询获取所有非古典音乐家



我希望这里允许这样的问题,因为它更像是一个特定于Wikidata的问题。无论如何,我试图从SPARQL的Wikidata中获取所有非古典音乐音乐家。现在我有这个代码:

SELECT ?value ?valueLabel ?born WHERE {
{
SELECT DISTINCT ?value ?born WHERE {
?value wdt:P31 wd:Q5 . # all Humans
?value wdt:P106/wdt:P279* wd:Q639669 . # of occupation or subclass of occupation is  musician
?value wdt:P569 ?born . # Birthdate
FILTER(?born >= "1981-01-01T00:00:00Z"^^xsd:dateTime) # filter by Birthyear
}
ORDER BY ASC(?born)
#LIMIT 500
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en,ger". }
}

这(理论上(吸引了所有以音乐家为职业的人(https://www.wikidata.org/wiki/Q639669)以及1900年后出生的人。(理论上是因为这个查询运行时间太长,我不得不把它分成更小的块(

然而,我所追求的是排除那些主要的古典音乐家。有我不知道的财产吗?否则,我将如何更改查询以能够按特定属性进行筛选(如Q21680663,古典作曲家(?

谢谢!

如果您选中查询界面中的示例选项卡,并在搜索字段中键入音乐,您会发现一个几乎切中要害的示例:具有包含"摇滚"流派的音乐家或歌手。

我主要是用它来列出所有音乐人的流派。我最终解决了MINUS的一个问题,减去任何接触西方古典音乐或巴洛克音乐的音乐家,后者是专门为得到巴赫这个老混蛋而加入的。

SELECT DISTINCT 
?human ?humanLabel 
(GROUP_CONCAT(DISTINCT ?genreLabel; SEPARATOR = ", ") AS ?genres) 
WHERE {
{
?human wdt:P31 wd:Q5;
wdt:P106 wd:Q639669;
wdt:P136 ?genre.
} MINUS {
VALUES ?classics {
wd:Q9730
wd:Q8361
}
?human wdt:P136 ?classics.
}


# This is just boilerplate to get the labels.
# it's slightly faster this way than the label
# service, and the query is close to timing out already
?genre rdfs:label ?genreLabel.
FILTER((LANG(?genreLabel)) = "en")
?human rdfs:label ?humanLabel.
FILTER((LANG(?humanLabel)) = "en")
}
GROUP BY ?humanLabel ?human

在查询界面:25000个结果在20秒

以下是结果的味道(来自一些中间版本,因为我现在不重做表格(。

流派迈克尔·弗兰克斯流行音乐、摇滚音乐
艺术家
Gigi D'Agostino拉丁爵士乐、意大利舞
Erykah Badu新灵魂,灵魂音乐
关野洋子爵士乐、蓝调、流行音乐、J-pop、电影配乐、新时代音乐、艺术摇滚、环境音乐
Harry Nilsson摇滚乐、流行音乐、软摇滚、巴洛克流行、迷幻摇滚、阳光流行
Yulia Nachalova爵士乐、流行音乐、灵魂乐、当代R&B、 蓝眼睛的灵魂,estrada
Linda McCartney流行摇滚

最新更新