Поиск общих суперклассов в SPARQL - PullRequest
0 голосов
/ 08 ноября 2019

Нам нужен запрос SPARQL, чтобы найти общие суперклассы для двух сущностей Викиданных. Я попробовал это так:

select ?commonBase #?commonBaseLabel
where {
  wd:Q39798 wdt:P31/wdt:P279* ?commonBase.
  wd:Q26868 wdt:P31/wdt:P279* ?commonBase.
  #SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

Вот прямая ссылка на запрос.

Это всегда истекает, даже с закомментированной строкой SERVICE.

Однако, когда я выполняю один и тот же запрос только с одним из предложений WHERE, он выполняется очень быстро, давая либо 130, либо 12. Результаты

Почему он намного медленнее с обоими предложениями WHERE? Теоретически, база данных может просто выполнить оба предложения WHERE по отдельности, а затем выполнить INTERSECT, то есть доставить те результаты, которые произошли в обоих запросах.

Если это является недостатком в разработке механизма SPARQL, то какможно адаптировать запрос, чтобы он работал быстрее?

...