Неправильная оценка запроса с агрегацией подзапроса - PullRequest
0 голосов
/ 01 мая 2018

Пожалуйста, обратитесь к Конечной точке Factforge , чтобы выполнить этот запрос. Подзапрос не возвращает никаких результатов. ?myVar будет спроецировано на содержащий запрос, а затем объединено с тройным шаблоном ?myVar ?p ?o.. Но так как нет результатов внутреннего выбора, соединение не должно привести ни к чему. Однако это не тот случай, когда выполняется запрос. Разве это не ошибка?

SELECT 
?myVar ?p ?o
WHERE 
{   
  { 
    SELECT ?myVar 
        WHERE { 
            ?myVar <http://www.example.com/arbitraryNonExistent> ?xx. 
        } 
    GROUP BY ?myVar
  } 
  ?myVar ?p ?o.  
} 
LIMIT 10

1 Ответ

0 голосов
/ 02 мая 2018

Это ожидаемое поведение. Согласно https://www.w3.org/TR/sparql11-query/#aggregateAlgebra, если есть GROUP BY:

Group(exprlist, Ω) = { ... | μ in Ω }

и у нас нет совпадений, тогда Ω пусто, поэтому:

Group(exprlist, {}) = {}

Эффект состоит в том, что подзапрос возвращает единственное решение, где? MyVar не связан, а соединение со следующим шаблоном оператора соответствует всему для? MyVar. В конце вы получаете множество решений для всего запроса.

Существует даже тестовый сценарий соответствия W3C SPARQL, охватывающий точный сценарий:

А также старая дискуссия на http://answers.semanticweb.com/questions/17410/semantics-of-sparql-aggregates.

...