2015-10-20 2 views
2

Я хочу, чтобы все тройки на графике были выделены из определенного объекта/узла.Sparql - запрос, чтобы получить все троек, связанных с конкретным предметом

я могу получить все тройки ...

SELECT $s $p $o WHERE { $s $p $o } 

... не очень полезно

я могу получить все сразу соединить тройки ...

SELECT $s $p $o WHERE { 
    $s _some_predicate_ _some_object_specifier . 
    $s $p $o } 

Я хотите начать с $s (selected by predicate and object), а затем получить что-то вроде $s $p* $o

Мысли?

Graph

Так что я хотел бы начать с ID_6 и получить весь узел ниже, что в том числе узлов 1 и 2. Я также нуждаюсь в предикатах, потому что не все предикаты будет ИМЕЮТ

Так что еще в частности, используя график ниже. Я хочу, чтобы все троек под объектом «P2« Мне нужен объект, предикат и объект для каждого из узлов 1xx и 2xx ... Я могу рекурсивно запросить каждый узел, чтобы получить данные, но я надеясь, что существует простой запрос (ish) для получения всех данных в одном запросе ...

More Details

+0

«Что-то вроде' $ s $ p * $ o' "не является очень четко в плане того, что вы хотите, точно. Можете ли вы привести конкретный пример: какой-то пример RDF-графика и что вы хотите получить от этого графика RDF? Как есть, вопрос довольно широк и неясен для ответа. –

ответ

1

Я думаю, что вы ищете property path

SELECT ?s ?p ?o 
WHERE 
{ 
    ?s HAS+ ?o . 
    FILTER (?s = <ID_6>) 
} 
0

Существует способ сделать это, но будет ли это «просто» несколько субъективны.

Пути по недвижимости позволяют запрашивать пути неизвестной длины. Тем не менее, вы можете указывать только пути свойств произвольной длины для определенных имен свойств (поэтому не на свойствах переменных).

Путь вокруг этого использовать отрицание, например, так:

:P3 (:overrides|!:overrides)+ ?child 

Это будет дает Вам все «дети», подключенных через пути длиной 1 или больше, где соединительная собственность либо :overrides или NOT :overrides (что, конечно же, верно для каждого свойства).

Однако, используя путь собственности, вы можете только матча эти свойства, чтобы получить их значение назад, вы не можете получить на самом деле получить имена свойств самих обратно. Поэтому нам нужно сделать наш запрос немного более обширным и просто запросить все, что связано с нашим исходным предметом (:P3), а также со всеми возможными «дочерними» темами (?child).

Полный запрос становится:

CONSTRUCT { 
    :P3 ?prop ?val . 
    ?child ?childProp ?childPropVal . 
    ?someSubj ?incomingChildProp ?child . 
} 
WHERE { 
    :P3 ?prop ?val ; 
     (:overrides|!:overrides)+ ?child . 
    ?child ?childProp ?childPropVal. 
    ?someSubj ?incomingChildProp ?child. 
} 

Причина это работает в том, что мы сопоставляем и вернуть входящие и исходящие свойства каждый ребенка по пути: так для ребенка, подключенного к :P3 через путь длины 2, мы получим первый компонент пути назад, потому что :P3 ?prop ?val соответствует ему, а последняя часть, потому что ?someSubj ?incomingChildProp ?child соответствует ему. Для пути длины 3 средняя часть пути будет сопоставлена, потому что она уже была получена ?child ?childProp ?childPropVal, когда путь все еще продолжался 2.

Смежные вопросы