使用sparql获取rdf类型序列中项的位置

时间:2015-05-30 01:18:19

标签: sequence rdf sparql

我在rdf中编码了这样的序列:

_:blanknode <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq>.
_:blanknode <http://www.w3.org/1999/02/22-rdf-syntax-ns#_0> uri:a.
_:blanknode <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1> uri:b.
_:blanknode <http://www.w3.org/1999/02/22-rdf-syntax-ns#_2> uri:c.

现在我希望在此列表中拥有给定uri的位置。 有这样的东西:

SELECT ?position
WHERE {
_:blanknode <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq>.
uri:a <http://www.w3.org/1999/02/22-rdf-syntax-ns#_?position> _:blanknode
}

作为一种解决方法,我认为我可以使用:

<http://www.w3.org/1999/02/22-rdf-syntax-ns#_0> uri:value "1".
<http://www.w3.org/1999/02/22-rdf-syntax-ns#_1> uri:value "2".
and so on...

查询:

SELECT ?position
WHERE {
_:blanknode <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq>.
uri:a ?seqUri _:blanknode.
?seqUri uri:value ?position
}

但必须有更优雅的方式

1 个答案:

答案 0 :(得分:2)

您可以使用REPLACE函数删除URI的命名空间部分,然后将结果转换为整数,如下所示:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX uri: <http://example.org/> 

SELECT (xsd:integer(REPLACE(str(?prop), 
           "http://www.w3.org/1999/02/22-rdf-syntax-ns#_", "")) as ?pos)
WHERE { [] a rdf:Seq; 
           ?prop uri:a . 
}

结果:

pos
---
0