我希望图表中的所有三元组来自特定的主题/节点。
我可以获得所有三元组......
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
思想?
所以我想从ID_6开始并获取包括节点1和2在内的所有节点。我还需要谓词,因为并非所有谓词都是HAS
所以更具体地使用下面的图表我希望对象下面的所有三元组“ P2 ”我需要每个1xx和2xx节点的主题,谓词和对象...我可以递归查询每个节点获取数据,但我希望有一个简单的(ish)查询来获取单个查询中的所有数据......
答案 0 :(得分:1)
我认为你要找的是property path
SELECT ?s ?p ?o
WHERE
{
?s HAS+ ?o .
FILTER ( ?s = <ID_6> )
}
答案 1 :(得分:0)
有一种方法可以做到这一点,但它是否“简单”有点主观。
属性路径允许您查询未知长度的路径。但是,您只能在特定属性名称上指定此类任意长度的属性路径(因此不能在属性变量上指定)。
解决这个问题的方法是使用否定,如下所示:
:P3 (:overrides|!:overrides)+ ?child
这将为您提供所有通过长度为1或更长的路径连接的“孩子”,其中连接属性为:overrides
或非:overrides
(当然,对于每个属性都是如此)
但是,使用属性路径,您只能匹配这些属性以获取值,您实际上无法获取属性名称自己< / em>回来。因此,我们需要使查询更广泛,只需查询与原始主题(: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.
}
这样做的原因是我们匹配并返回每个孩子的传入和传出属性:所以对于通过长度为2的路径连接到:P3
的孩子,我们得到路径的第一个组件,因为:P3 ?prop ?val
匹配它,最后一部分因为?someSubj ?incomingChildProp ?child
匹配它。对于长度为3的路径,路径的中间部分将匹配,因为当路径仍然是2时,?child ?childProp ?childPropVal
已经检索到它。