Неправильная оценка запроса с агрегацией подзапроса

Пожалуйста, обратитесь к конечной точке 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 ответ

Решение

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

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

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

Group(exprlist, {}) = {}

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

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

А также старые обсуждения на https://web.archive.org/web/20131109081257/http://answers.semanticweb.com/questions/17410/semantics-of-sparql-aggregates.

Другие вопросы по тегам