Запрос sparql, чтобы получить триплет, связанный с другими тройками

Предположим, у нас много RDF-троек, связанных как:

1: <S,P1,O>        

2: <O,P2,O3>       
3: <O,P3,O4>  

4: <O3,P4,O5> 

Я хотел бы получить тройные № 2, 3 и 4, просто зная тройное число 1, потому что тройные № 2 и 3 делят "О" с тройным № 1, а тройные № 4 делят "О3" с тройным № 2, который поделиться "O" с тройным N°1 Можно ли сформулировать это с помощью запроса sparql без знания P2,P3,P4?

заранее спасибо

2 ответа

Конечно. Этот запрос сделает это просто так:

  CONSTRUCT {
     ?s ?p ?o . 
     ?o ?q ?z. 
     ?w ?r ?o .
  }
  WHERE {
        ?s ?p ?o . 
        FILTER (?s = :O || ?o = :O) 
        OPTIONAL { ?o ?q ?z . }
        OPTIONAL { ?w ?r ?o . }
   }

Это вряд ли будет очень эффективным, хотя. Однако, не зная больше о ваших фактических данных или о том, почему вы хотите получить именно этот конкретный результат, сложно найти лучшее решение.

Похоже, вы знаете, :O и вы спрашиваете о тройках, у которых он есть в качестве субъекта, и о тройках, у которых объект этих троек является субъектом. Вы спрашиваете что-то вроде этого, тогда?

select * where {
  :O ?p2 ?o2 .
  optional { ?o2 ?p3 ?o3 }
}
Другие вопросы по тегам