假设我们有许多相关的 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 与三重 N°1 共享“O”,三重 N°4 与三重 N°2 共享“O3”与三重 N°1 共享“O”是否可以在不知道 P2、P3、P4 的情况下使用 sparql 查询来制定?
先感谢您
当然。此查询将这样做:
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 }
}