Wikidata: SPARQL Выбирать элементы, только если они не содержат свойство - PullRequest
0 голосов
/ 06 сентября 2018

Задача № 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», «Уимблдон 2001» и т. Д., В то время как я хотел бы получить только «Уимблдон». Как я могу это сделать?

Спасибо

1 Ответ

0 голосов
/ 07 сентября 2018

Как предлагается в комментариях ...

# 1 @ aksw

FILTER NOT EXISTS {?item wdt:P570|wdt:P509|wdt:P20 ?o}

# 2 @ stanislav-kralin

Это проблема качества данных. Этот выглядит как обходной путь :

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) }
...