gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:25:24 25 4
gpt4 key购买 nike

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

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

SELECT $s $p $o WHERE { $s $p $o }

...不太有帮助

我可以获得所有直接连接的三元组...

SELECT $s $p $o WHERE { 
$s _some_predicate_ _some_object_specifier .
$s $p $o }

我想要的是从$s(由谓词和对象选择)开始,然后得到类似于 $s $p* $o

想法?

Graph

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

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

More Details

最佳答案

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

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

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

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

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

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

关于Sparql - 查询获取与特定主题相关的所有三元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33241812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com