2010-04-29 5 views
3

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

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. Как мне это сделать?

ответ

2

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

Более длинный ответ: подумайте о запросах 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 } 
} 
+0

Эй, спасибо за ваш ответ. ОК, что я пытаюсь сделать: У меня есть rdf-граф с несколькими вводами. теперь я хочу получить все связанные тройки с данным идентификатором (в этом случае id ). так как мне это нужно в rdf, я должен использовать конструкцию, и, поскольку есть некоторые транзитивные отношения, я должен упаковать их togheter с объединением (?). Надеюсь, это объяснит мою проблему. С наилучшими пожеланиями simon ps: произошла ошибка в моем запросе, я исправил ее, я думаю, теперь это имеет смысл :) – simon

+0

А, я вижу. Итак, вам нужна информация об этой вещи (PhoneNotify) и оконечной точке? – user205512

+0

Вы упомянули «переходные отношения». Является ли идея, что отношения «конечной точки» относятся к «PhoneNotify»? – user205512