Rdf 计算节点之间的路径长度?

Rdf 计算节点之间的路径长度?,rdf,sparql,jena,Rdf,Sparql,Jena,如何检索两个节点之间的路径长度?例如,给定一个组织层次结构,如何确定父组织和子组织之间的距离?考虑下面的场景: OrgA-hasSubOrganization->OrgB,OrgC 这是一个非常简单的例子,我想得到一个实体的所有直接子组织。因此路径长度为1 OrgA->OrgB->OrgC 还是一般情况 OrgA -> OrgB - - - - - - - - OrgZ 我希望递归遍历图表,通过hasSubOrganization属性找到属于另一个组织的每个组织。要使所有子组织递归,我

如何检索两个节点之间的路径长度?例如,给定一个组织层次结构,如何确定父组织和子组织之间的距离?考虑下面的场景:

  • OrgA-hasSubOrganization->OrgB,OrgC

    这是一个非常简单的例子,我想得到一个实体的所有直接子组织。因此路径长度为1

  • OrgA->OrgB->OrgC

    还是一般情况

    OrgA -> OrgB - - - - - - - - OrgZ
    
  • 我希望递归遍历图表,通过
    hasSubOrganization
    属性找到属于另一个组织的每个组织。要使所有子组织递归,我可以使用,例如
    +
    运算符:

    OrgA hasSubOrganization+ ?subOrg
    
    这将为我提供所有子组织,一直到叶节点。但我的最终目标是构建组织层次结构,但有关“子组织的节点数/步骤数/级别数/跳数”的信息丢失了。这意味着我无法为可视化重新创建组织结构


    除了子组织的名称之外,我如何捕获“节点数”信息?

    您不能使用属性路径来实现这一点,因为工作组特别选择不提供此信息,因为它使实现更加复杂

    如果您想生成一个层次结构,那么如果您的目标只是可视化层次结构,则可能同样有效地生成一系列SPARQL查询,其中每个查询都会扩展层次结构的一个叶,而根本不使用属性路径

    可能还有其他使用Jena本体API的方法——我建议在他们的邮件列表上询问Jena-users@incubator.apache.org有关更多专家帮助

    这是基于使用SPARQL计算RDF列表中元素位置时使用的相同技术,如中所述:

    如果您有这样的数据:

    @prefix : <http://example.org> .
    
    :orgA :hasSuborganization :orgB, :orgC, :orgD.
    :orgB :hasSuborganization :orgE, :orgF.
    :orgE :hasSuborganization :orgG.
    :orgG :hasSuborganization :orgH.
    

    这里的诀窍是要认识到,从X到Y的任何路径都可以被视为从X到某个中间节点Z的(可能是空的)路径(非空意味着可以选择X作为Z)与从Z到Y的(非空的)路径连接在一起。选择Z的可能方式的数量表示路径的长度。

    谢谢。我在semanticoverflow.com上问了同样的问题&也有人问你说了什么。我想我要做的是使用属性路径获取所有的层次结构,然后进行后处理以生成层次结构。听起来是个不错的方法。是的,我看到了你关于SemanticOverflow的问题,但是其他人已经回答了,所以没有看到复制我的答案的意义。这是可以做到的,使用相同的技术。这不是一个简单的在线查询,但这是可以做到的。简化为相同类型的查询,答案是响亮的“是”。需要注意的是,如果存在从X到Y的多条路径,则该查询将中断。计数将包括两条路径中的所有节点。
    prefix : <http://example.org> 
    
    select ?super ?sub (count(?mid) as ?distance) { 
      ?super :hasSuborganization* ?mid .
      ?mid :hasSuborganization+ ?sub .
    }
    group by ?super ?sub 
    order by ?super ?sub
    
    $ sparql --query query.rq --data subs.n3
    ----------------------------
    | super | sub   | distance |
    ============================
    | :orgA | :orgB | 1        |
    | :orgA | :orgC | 1        |
    | :orgA | :orgD | 1        |
    | :orgA | :orgE | 2        |
    | :orgA | :orgF | 2        |
    | :orgA | :orgG | 3        |
    | :orgA | :orgH | 4        |
    | :orgB | :orgE | 1        |
    | :orgB | :orgF | 1        |
    | :orgB | :orgG | 2        |
    | :orgB | :orgH | 3        |
    | :orgE | :orgG | 1        |
    | :orgE | :orgH | 2        |
    | :orgG | :orgH | 1        |
    ----------------------------