首页 文章

SPARQL中的任意路径长度查询

提问于
浏览
5

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

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

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

1 回答

  • 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         |
    -------------------------
    

    请注意,使用 * 允许零关系出现,并将每个节点与自身相关联 . 如果你希望每个东西都是它自己的祖先,那么你可以在我的查询中用 * 替换 + .

相关问题