是否可以在SPARQL中执行任意长度的路径查询 . 假设我有neo4j商店,它有一个只代表PARENT_OF关系的图表(例如,考虑一个家族树) . 获取一个人的所有祖先的密码查询看起来像
start n (some node from index query) match n<-[:PARENT_OF*]-k return k
如果将此neo存储表示为基于RDF的三元组存储,那么此查询在SPARQL中的外观如何?这甚至是可能的吗?
如果你有这样的数据:
@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 | -------------------------
请注意,使用 * 允许零关系出现,并将每个节点与自身相关联 . 如果你希望每个东西都是它自己的祖先,那么你可以在我的查询中用 * 替换 + .
*
+
1 回答
如果你有这样的数据:
那么你可以使用SPARQL 1.1的property paths这样的查询:
得到这样的结果:
请注意,使用
*
允许零关系出现,并将每个节点与自身相关联 . 如果你希望每个东西都是它自己的祖先,那么你可以在我的查询中用*
替换+
.