Короткий ответ: разницы нет.
Более длинный ответ: думайте, что SPARQL-запросы состоят из двух частей.
Часть запроса (WHERE), которая создает список привязок переменных (хотя некоторые переменные могут быть несвязанными).
Часть, которая объединяет результаты. SELECT
, ASK
, CONSTRUCT
или DESCRIBE
.
SELECT *
фактически то, что возвращает запрос. SELECT ?v1 ?v2
принимает результаты и создает другой набор результатов с удалением других переменных. ASK
просто смотрит, есть ли какие-либо результаты.
CONSTRUCT
использует шаблон для создания RDF из результатов. Для каждой строки результатов она связывает переменные и добавляет операторы в модель результатов. Если триплет шаблона содержит несвязанную переменную, он пропускается.
DESCRIBE
является наиболее необычным, поскольку он берет каждый узел результатов, находит связанные с ним тройки и добавляет их в модель результатов. В отличие от других, он может содержать больше информации, чем соответствует запрос.
Таким образом, наличие в запросе UNION
, OPTIONAL
, что угодно, разрешено для всех форм. Они могут привести к отсутствию троек из-за несвязанных переменных.
Ваш запрос не имеет особого смысла. Это ничем не отличается от {?s ?p ?o}
. Что вы пытаетесь сделать? Хорошо, теперь имеет больше смысла.
Приведенные ниже пояснения звучат так, будто вы хотите следующее:
construct { <http://seekda.com/providers/cdyne.com/PhoneNotify> ?p ?o }
from <http://localhost:8890/DAV/ranking>
where {
{ <http://seekda.com/providers/cdyne.com/PhoneNotify> so:hasEndpoint ?s.
?s ?p ?o }
union
{ <http://seekda.com/providers/cdyne.com/PhoneNotify> ?p ?o }
}