维基数据:SPARQL Select 项仅当它们不包含 属性
Wikidata: SPARQL Select items only if they do not include a property
问题 #1
寻找我使用的人
SELECT ?item WHERE {
?item (wdt:P31/wdt:P279*) wd:Q5.
}
但是为了找到还活着的人我想排除没有定义其中之一的人 属性 570, 509, 20。
我该怎么办?
问题 #2
查找我使用的网球比赛
SELECT ?item
WHERE
{
?item wdt:P31 wd:Q13219666.
}
遗憾的是,有些锦标赛无法直接识别,因此使用:
SELECT ?item
WHERE
{
?item wdt:P31/wdt:P279 wd:Q13219666.
}
但是,我也返回了锦标赛的版本,例如“2000 wimbledon”、“2001 wimbledon”等,而我只想获得 'wimbledon'。我该怎么办?
谢谢
如评论中提供...
#1 @aksw
FILTER NOT EXISTS {?item wdt:P570|wdt:P509|wdt:P20 ?o}
@stanislav-kralin 的#2
This is a data quality problem. This appears to be a workaround:
SELECT DISTINCT ?item ?itemLabel
WHERE { ?item wdt:P31?/wdt:P279? wd:Q13219666 .
FILTER NOT EXISTS { ?item wdt:P585 [] }
SERVICE wikibase:label
{ bd:serviceParam wikibase:language "en" . }
}
# uncomment the following line if desired
# VALUES (?item) { (wd:Q41520) }
问题 #1
寻找我使用的人
SELECT ?item WHERE {
?item (wdt:P31/wdt:P279*) wd:Q5.
}
但是为了找到还活着的人我想排除没有定义其中之一的人 属性 570, 509, 20。 我该怎么办?
问题 #2
查找我使用的网球比赛
SELECT ?item
WHERE
{
?item wdt:P31 wd:Q13219666.
}
遗憾的是,有些锦标赛无法直接识别,因此使用:
SELECT ?item
WHERE
{
?item wdt:P31/wdt:P279 wd:Q13219666.
}
但是,我也返回了锦标赛的版本,例如“2000 wimbledon”、“2001 wimbledon”等,而我只想获得 'wimbledon'。我该怎么办?
谢谢
如评论中提供...
#1 @aksw
FILTER NOT EXISTS {?item wdt:P570|wdt:P509|wdt:P20 ?o}
@stanislav-kralin 的#2
This is a data quality problem. This appears to be a workaround:
SELECT DISTINCT ?item ?itemLabel WHERE { ?item wdt:P31?/wdt:P279? wd:Q13219666 . FILTER NOT EXISTS { ?item wdt:P585 [] } SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . } } # uncomment the following line if desired # VALUES (?item) { (wd:Q41520) }