本文介绍了SPARQL-获取与特定主题相关的所有三元组的查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要图形中来自特定主题/节点的所有三元组。

我可以得到所有的三元组.

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

想法?

Graph

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

因此,更具体地说,使用下面的图表,我需要宾语"P2"下面的所有三元组,我需要1xx和2xx节点的每个节点的主语、谓语和宾语.我可以递归查询每个节点以获得数据,但我希望有一个简单的(ISH)查询来获得单个查询中的所有数据.

More Details

推荐答案

有办法做到这一点,但是否"简单"有点主观。

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

解决此问题的一种方法是使用否定,如下所示:

: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 ?prop ?val与之匹配,而最后一部分是因为?someSubj ?incomingChildProp ?child与之匹配。对于长度为%3的路径,将匹配路径的中间部分,因为?child ?childProp ?childPropVal在路径长度仍为%2时已检索到该路径。

这篇关于SPARQL-获取与特定主题相关的所有三元组的查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-11 18:28