【问题标题】:In Neo4j find path from root to a node in a tree在 Neo4j 中查找从根到树中节点的路径
【发布时间】:2021-06-18 00:54:27
【问题描述】:

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

【问题讨论】:

  • 您尝试过任何 Cypher 查询吗?我的意思是,你应该从一些东西开始,不是吗?喜欢,。如果您运行类似于MATCH path = (:Node {name:'node name here'})-[*]->(leaf) WHERE NOT (leaf)-->() RETURN path 的东西会发生什么-实际上,您可能会将开始节点的标签和属性以及可能的边缘标签调整为 subClassOf 关系的标签而不是* - 并且假设您希望从根到给定节点,甚至可能切换方向,当前它返回从给定节点到叶节点的所有路径。如果根节点是owl:thing 应该更简单高效
  • 我对 cypher 很陌生,所以一直在寻找方向。这很有帮助!
  • 一旦您找到了问题的解决方案,请随时在此处发布您的最终 Cypher 查询作为答案。肯定会帮助别人。干杯

标签: neo4j cypher rdf ontology rdfs


【解决方案1】:

如果您使用基本设置导入具有新语义的本体,您可以使用以下查询获取类与其父级之间的路径,一直到根。 (我已经导入了 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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多