假设我有以下Turtle声明:
@prefix : <http://example.org#> .
:ls :list (:a :b :c)
Run Code Online (Sandbox Code Playgroud)
有没有办法获得集合中元素的位置?
例如,使用此查询:
PREFIX : <http://example.org#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?elem WHERE {
?x :list ?ls .
?ls rdf:rest*/rdf:first ?elem .
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
--------
| elem |
========
| :a |
| :b |
| :c |
--------
Run Code Online (Sandbox Code Playgroud)
但我想要一个查询来获取:
--------------
| elem | pos |
==============
| :a | 0 |
| :b | 1 |
| :c | 2 |
--------------
Run Code Online (Sandbox Code Playgroud)
可能吗?
如何检索两个节点之间的路径长度?例如,给定组织层次结构,如何确定父组织和后代组织分离的距离?请考虑以下方案:
OrgA -hasSubOrganization-> OrgB, OrgC
这是一个非常简单的情况,我希望得到一个实体的所有直接子组织.因此路径长度为1.
OrgA -> OrgB -> OrgC
或一般情况
OrgA -> OrgB - - - - - - - - OrgZ
Run Code Online (Sandbox Code Playgroud)我想以递归方式遍历图表,并通过该hasSubOrganization属性查找属于另一个组织的每个组织.为了让所有子组织递归,我可以使用属性路径,例如+运算符:
OrgA hasSubOrganization+ ?subOrg
Run Code Online (Sandbox Code Playgroud)
这将为我提供所有子组织,直到叶节点.但我的最终目标是构建组织层次结构,但有关"节点/步骤/级别/跳过子组织的数量"的信息将丢失.这意味着我无法为可视化重新创建组织结构.
除了子组织的名称之外,我如何捕获"节点数"信息?
我是SPARQL的新手,我正在尝试创建一个属性路径查询,它将沿路径吐出每个中间步骤.到目前为止我有这个:
select ?object
where {
<subjectURI> <isRelatedTo>+ ?object .
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个列表,列出了我的主题URI在整个路径中的所有关系,无论关系有多远(如果我错了,请纠正我).
但是,我想看看关系是如何组织起来的.就像是:
<subjectURI> <isRelatedTo> <object1>
<object1> <isRelatedTo> <object2>
<object2> <isRelatedTo> <object3>
Run Code Online (Sandbox Code Playgroud)
等等......这可能吗?
是否存在一种良好的SPARQL查询,如果两个给定节点连接在单个/多个SPARQL端点上,我们可以回答这个问题吗?
假设我想检查两个节点
<http://wiktionary.dbpedia.org/resource/dog>
Run Code Online (Sandbox Code Playgroud)
和
<http://dbpedia.org/resource/Dog>
Run Code Online (Sandbox Code Playgroud)
连接了.如果是的话,我会对这条路感兴趣.
通过猜测我已经知道它们是通过标签连接的,所以像这样的查询返回长度为3的路径:
SELECT * WHERE {
<http://wiktionary.dbpedia.org/resource/dog> ?p1 ?n1.
# SERVICE <http://dbpedia.org/sparql> {
<http://dbpedia.org/resource/Dog> ?p2 ?n1 .
# }
}
Run Code Online (Sandbox Code Playgroud)
现在如果我还没有想法并希望自动完成并且任意长度和方向怎么办?
我知道SPARQL 1.1的属性路径,但它们似乎只适用于已知属性(http://www.w3.org/TR/sparql11-query/#propertypaths):
变量不能用作路径本身的一部分,只能用作结尾.
此外,我想要允许任何路径,因此路径上的谓词可能会改变.
我当前(因为我觉得很荒谬)的方法是查询所有可能的长度k达到极限的路径n.
倾倒不是我的选择,因为它有数十亿的三元组...我想使用SPARQL!