SPARQL-запрос возвращает намного больше строк, чем ожидалось - PullRequest
2 голосов
/ 18 апреля 2019

Я использую следующий запрос SPARQL, чтобы получить список всех президентов США вместе с датами начала и окончания их президентства:

SELECT ?person $personLabel $start $end
WHERE {
  ?person wdt:P39 wd:Q11696.
  ?person p:P39 ?statement.
  ?position_held_statement ps:P39 wd:Q11696.
  ?statement pq:P580 ?start. 
  ?statement pq:P582 ?end
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY DESC($start)

Вы можете попробовать это здесь

Почему он возвращает так много строк?

РЕДАКТИРОВАТЬ: Я знаю, что могу использовать SELECT DISTINCT, чтобы получить только различные результаты, но я хочу узнать, как я могу найти причину для дубликатов. Более того, есть записи, в которых говорится, что президентство Барака Обамы продолжалось с января 2009 года по январь 2017 года, в то время как другие заявляют о двух своих сроках отдельно.

1 Ответ

2 голосов
/ 18 апреля 2019

У вас есть ?position_held_statement там. Это должно быть ?statement.

Когда у вас неожиданно много результатов в SPARQL, обычно это происходит из-за несовпадения имен переменных, превращающих то, что должно быть объединением, в декартово произведение.

...