为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在SPARQL中的RDF集合中获取元素的位置?

/ 猿问

是否可以在SPARQL中的RDF集合中获取元素的位置?

是否可以在SPARQL中的RDF集合中获取元素的位置?

假设我有以下Turtle声明:


@prefix : <http://example.org#> .


:ls :list (:a :b :c)

有没有办法获得集合中元素的位置?


例如,使用此查询:


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 .

}

我明白了:


--------

| elem |

========

| :a   |

| :b   |

| :c   |

--------

但我想要一个查询来获取:


--------------

| elem | pos |

==============

| :a   |  0  |

| :b   |  1  |

| :c   |  2  |

--------------

可能吗?


查看完整描述

3 回答

?
动漫人物

简短的回答

不是没有超出标准,除非你的名单长度有限,那么你可以做一些像脏的事情:

{ ?x :list (:a) BIND(1 AS ?length) }UNION{ ?x :list ([], :a) BIND(2 AS ?length) }UNION{ ?x :list ([], [], :a) BIND(3 AS ?length) }...

等等

某些RDF查询引擎具有可在RDF列表上运行的非标准功能,但您必须查阅系统的文档。

答案很长

这是RDF列表的一个症状,具有可怕的结构和定义。不知何故,我们最终得到了两种表示列表的方式,这两种方式都很难用!

如果您控制数据,请使用更合理的表示,例如

<x> :member [
   rdf:value :a ;
   :ordinal 1 ;], [
   rdf:value :b ;
   :ordinal 2 ;], [
   rdf:value :c ;
   :ordinal 3 ;]...

然后你可以查询:

{ <x> :member [ rdf:value :a ; :ordinal ?position ] }


查看完整回答
反对 2019-08-19
  • 3 回答
  • 0 关注
  • 199 浏览

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信