gpt4 book ai didi

rdf - 获取传递关系中的所有节点

转载 作者:行者123 更新时间:2023-12-04 18:15:42 25 4
gpt4 key购买 nike

是否可以某种方式获得通过与SPARQL的传递关系连接的节点列表?
我有以这种方式连接的元素:

?a g:eastOf ?b
?b g:eastOf ?c


并非所有节点都相互连接,因为有些节点位于南方。仅当节点垂直于同一平面时,才可能存在 g:eastOf关系。这意味着存在几组彼此不连接的节点。

我想获取所有这些节点组(基本上是列表列表)。有没有办法在SPARQL中做到这一点? SELECT语句需要有限数量的变量,并且不能以某种方式表达“某物的列表”。

我只对从西向东走时所有节点的 xsd:integer属性在递增的列表感兴趣,但是在找到第一个问题的解决方案之后,这应该相对容易。

最佳答案

您可以使用SPARQL 1.1至少执行其中的一些操作。

获取节点列表

假设您有数据,其中有两组基于:eastOf的点形成一行:

@prefix : <http://stackoverflow.com/q/4056008/1281433/>

:a :eastOf :b .
:b :eastOf :c .
:c :eastOf :d .

:e :eastOf :f .
:f :eastOf :g .
:g :eastOf :h .

然后,您可以使用如下查询:
prefix : <http://stackoverflow.com/q/4056008/1281433/>

select (group_concat(strafter(str(?westernpoint),str(:));separator=", ") as ?colatitudinalPoints)
where {
?easternmost :eastOf* ?westernpoint .
filter not exists { ?easternmoster :eastOf ?easternmost }
}
group by ?easternmost

得到这些结果:
-----------------------
| colatitudinalPoints |
=======================
| "e, f, g, h" |
| "a, b, c, d" |
-----------------------

有一些字符串处理
group_concat(strafter(str(?westernpoint),str(:));separator=", ") as ?colatitudinalPoints

您可能不需要;关键是 ?westernpoint?easternmost以东(实际上包括 ?easternmost,因为我们在属性路径中使用了 *)以东的点的IRI,然后我们需要以某种方式将它们连接在一起。在这里,我进行了一些字符串处理以使结果更美观。您可以轻松完成
prefix : <http://stackoverflow.com/q/4056008/1281433/>

select (group_concat(?westernpoint;separator=", ") as ?colatitudinalPoints)
where {
?easternmost :eastOf* ?westernpoint .
filter not exists { ?easternmoster :eastOf ?easternmost }
}
group by ?easternmost

并得到
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| colatitudinalPoints |
============================================================================================================================================================================================
| "http://stackoverflow.com/q/4056008/1281433/e, http://stackoverflow.com/q/4056008/1281433/f, http://stackoverflow.com/q/4056008/1281433/g, http://stackoverflow.com/q/4056008/1281433/h" |
| "http://stackoverflow.com/q/4056008/1281433/a, http://stackoverflow.com/q/4056008/1281433/b, http://stackoverflow.com/q/4056008/1281433/c, http://stackoverflow.com/q/4056008/1281433/d" |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

确保节点升序

您的其他要求还有更多挑战:

I'm only interested in the lists where an xsd:integer property of all nodes is ascending when going from west to east, but that should be relatively easy after I have the solution for my first problem.



就是说,如果您能确切地说明想要的东西,例如
w --eastof-> x --eastof-> y --eastof-> z
| | | |
5 6 2 3

例如,是否要因为节点未全部升序而拒绝整个链,还是要获得两个值递增的子链 w xy z?两者可能都可以做……

关于rdf - 获取传递关系中的所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4056008/

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