SPARQL中的任意路径长度查询

时间:2014-03-05 22:00:42

标签: neo4j rdf sparql

是否可以在SPARQL中执行任意长度的路径查询。假设我有neo4j商店,它有一个只代表PARENT_OF关系的图表(例如考虑一个家族树)。用于获取人的所有祖先的密码查询看起来像

start n (some node from index query) match n<-[:PARENT_OF*]-k return k

如果将此neo商店表示为基于RDF的三元组商店,那么此查询在SPARQL中的外观如何?这甚至是可能的吗?

1 个答案:

答案 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         |
-------------------------

请注意,使用*允许出现关系,并将每个节点与自身相关联。如果您希望每件事物都是其祖先,那么您可以在我的查询中将+替换为*

相关问题