是否可以在SPARQL中执行任意长度的路径查询。假设我有neo4j商店,它有一个只代表PARENT_OF关系的图表(例如考虑一个家族树)。用于获取人的所有祖先的密码查询看起来像
start n (some node from index query) match n<-[:PARENT_OF*]-k return k
如果将此neo商店表示为基于RDF的三元组商店,那么此查询在SPARQL中的外观如何?这甚至是可能的吗?
答案 0 :(得分:9)
如果你有这样的数据:
@prefix : <http://stackoverflow.com/q/22210295/1281433/> .
:a :parentOf :b .
:b :parentOf :c .
:c :parentOf :d .
然后您可以使用SPARQL 1.1的property paths:
来使用这样的查询prefix : <http://stackoverflow.com/q/22210295/1281433/>
select ?ancestor ?descendent where {
?ancestor :parentOf+ ?descendent
}
得到这样的结果:
-------------------------
| ancestor | descendent |
=========================
| :a | :b |
| :a | :c |
| :a | :d |
| :b | :c |
| :b | :d |
| :c | :d |
-------------------------
请注意,使用*
允许零出现关系,并将每个节点与自身相关联。如果您希望每件事物都是其祖先,那么您可以在我的查询中将+
替换为*
。