假设我们有许多相关的RDF三元组:
1: <S,P1,O>
2: <O,P2,O3>
3: <O,P3,O4>
4: <O3,P4,O5>
我想通过知道三号1获得三倍N°2,3和4 因为三重N°2和3共有“O”,三重N°1 三重N°4共享“O3”,其中三重N°2与三重N°1共享“O” 是否有可能使用sparql查询来表示,而不知道P2,P3,P4?
提前谢谢
答案 0 :(得分:1)
不确定。此查询将执行以下操作:
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 . }
}
但它不太可能非常高效。但是,如果不了解您的实际数据或者您希望获得此特定结果的原因,则很难找到更好的解决方案。
答案 1 :(得分:0)
听起来你知道:O
并且你要求以它为主题的三元组,以及以三元组为对象的三元组。你问这样的事情吗?
select * where {
:O ?p2 ?o2 .
optional { ?o2 ?p3 ?o3 }
}