我在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
}
但必须有更优雅的方式
答案 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