在 Neo4j 中找到从根到树中节点的路径

问题描述

我正在使用 Neo4J 新语义插件来加载本体。 我想找到从树根到特定节点的路径(所有中间节点和边及其属性)。在 cypher 中获取此信息的最佳(最佳)方法是什么? 节点通过关系的子类连接。

解决方法

如果您使用基本设置导入具有新语义的本体,则可以使用以下查询获取类与其父类之间的路径,一直到根。 (我已经导入了 ESCO 本体):

MATCH path = (c:n4sch__Class)-[:n4sch__SCO*]->(root:n4sch__Class) //(1)
WHERE c.uri = "http://data.europa.eu/esco/skill/74ce6ebc-8886-437e-bee9-ce5735aaa020"   // (2)
    AND not (root)-[:n4sch__SCO]->() //(3)
RETURN path //(4)
  • 在 (1) 中,我们定义了探索模式:始终遵循 SCO 关系。这就是星号的含义。
  • 在(2)中,我们通过它的 uri 指定起始类( 尽管您可以使用标签或任何其他属性)
  • 在(3)中我们 指定根是根,因为它不是任何的孩子 其他类
  • 在(4)中,我们返回整个路径。非常适合在浏览器 like this one 中进行可视化。但是,如果您只想返回路径中节点的一个属性(例如 skos:prefLabel),您可以改用此片段:RETURN [n in nodes(path) | n.skos__prefLabel]