繁体   English   中英

Sparql - 查询以获取与特定主题相关的所有三元组

[英]Sparql - query to get all triples related to a specific subject

我希望图中的所有三元组都来自特定的主题/节点。

我可以得到所有的三倍......

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 (selected by predicate and object)然后获得类似$s $p* $o

思考?

图形

所以我想从ID_6开始并获取包括节点1和2在内的所有节点。我还需要谓词,因为并非所有谓词都是HAS

所以更具体地使用下面的图表我想要对象“ P2 ”下面的所有三元组我需要每个1xx和2xx节点的主题,谓词和对象...我可以递归查询每个节点以获取数据但我是希望有一个简单的(ish)查询来获取单个查询中的所有数据...

更多细节

我认为你所寻找的是物业道路

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

有一种方法可以做到这一点,但它是否“简单”有点主观。

属性路径允许您查询未知长度的路径。 但是,您只能在特定属性名称上指定此类任意长度的属性路径(因此不能在属性变量上指定 )。

解决这个问题的方法是使用否定,如下所示:

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

这将返回通过长度为1或更长的路径连接的所有“子”,其中连接属性为:overrides或不: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. 
}

这样做的原因是我们匹配并返回每个孩子的传入和传出属性:所以对于通过长度为2的路径连接到:P3的子:P3 ,我们得到路径的第一个组件,因为:P3 ?prop ?val匹配它,最后一部分因为?someSubj ?incomingChildProp ?child匹配它。 对于长度为3的路径,路径的中间部分将匹配,因为当路径仍然是2时,它已经被?child ?childProp ?childPropVal检索到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM