использование объединения в конструктивном запросе sparql - PullRequest
4 голосов
/ 29 апреля 2010

У меня есть график rdf с несколькими записями. Теперь я хочу получить все связанные тройки для данного идентификатора. Это мой запрос sparql:

select ?s ?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}
}

Идентификатор в этом случае <seekda.com/providers/cdyne.com/PhoneNotify>.

Но мне нужен запрос графа (construct или describe). Поэтому я думаю, что я должен упаковать их вместе с union. Как мне это сделать?

1 Ответ

3 голосов
/ 29 апреля 2010

Короткий ответ: разницы нет.

Более длинный ответ: думайте, что SPARQL-запросы состоят из двух частей.

  1. Часть запроса (WHERE), которая создает список привязок переменных (хотя некоторые переменные могут быть несвязанными).

  2. Часть, которая объединяет результаты. 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 }
}
...