假设我有以下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)
可能吗?
这是以传递关系获取所有节点的扩展
是否可以使用SPARQL在两个传递节点之间获取所有传递节点?我试图从这个网站挖掘出来并回答-semanticweb,但是如果路径的长度没有像Can JENA ARQ中所建议的那样定义属性路径详细信息,那么它似乎是不可能的.但我看到约书亚·泰勒 对第一个问题的回答有一线希望.
[编辑]我提供了我的数据样本的图片,以显示问题的严重程度:

[编辑]我想找到的路径:a和:h,应导致四个结果:
a -> b -> c -> d -> h.
a -> b -> c -> e -> h.
a -> f -> h.
a -> g -> h.
[编辑] 在评论中使用Joshua Taylor的解决方案,我将每个节点分组为单个结果,这是我到目前为止对此问题最接近的解决方案.
是否可以限制属性路径的长度?例如,获取长度在 (m,n) 之间或所有不在该范围内的所有三元组?例如,如何通过以下查询来完成此操作?
select ?x ?y
where {?x p* ?y}
Run Code Online (Sandbox Code Playgroud) 考虑以下片段
ASK WHERE { wd:Q734774 wdt:P31 wd:Q3918. }
Run Code Online (Sandbox Code Playgroud)
这在WikiData中可以正常工作。我想在此代码段中使用一些路径语法。具体来说,我想限制路径中使用“ wdt:P31”的次数。根据准则,这应该是正确的语法:
ASK WHERE { wd:Q734774 wdt:P31{,3} wd:Q3918. }
Run Code Online (Sandbox Code Playgroud)
但这给了我奇怪的错误信息。有任何想法吗?
我有一个我在Protege中构建的猫头鹰文件.什么是sparql查询,它将选择类的所有子类以及这些子类的所有子类,依此类推(广度优先搜索排序方式)?