GraphGists

使用 Maven dependency:list 转换为 Cypher 的 Neo4j 依赖图

引言

Neo4j 的 GitHub 仓库缺少一份概述文档,原因在于手动维护最新版本十分困难。

这个 GIST 是利用 Neo4j 来理解 Neo4j 的一种方法的第一个版本!

Maven → Neo4j

Maven 是 Neo4j 使用的构建工具,带有列出依赖项的插件。遗憾的是,由于命名约定问题,graphml 输出无法很好地与 graphml APOC 导入工具配合使用。这可以通过更新 APOC 代码以支持 Maven graphml 格式来解决,但本 GIST 展示了一种将 tgf 输出转换为 Cypher 以使其按原样工作的方法。

在 Windows 上,如果您已成功构建 Neo4j,则可以使用以下命令为每个 pom.xml 创建一个 pom.tgf 文件。

mvn dependency:tree "-DoutputFile=pom.tgf" "-DoutputType=tgf"

tgf 格式非常简单,易于转换为 Cypher。为此,我将 tgf 文件分成两部分。nodes.tgf 和 edges.tgf,节点在 # 标记上方,边在 # 标记下方。然后,我使用 awk(通过 Cygwin)生成 Cypher 来加载依赖项。

在本例中,我使用了 neo4j\packaging\standalone\standalone-community 中的 pom.tgf

cat nodes.tgf | awk -F "[ :]" '{print "CREATE (n:Package {name:'"'"'"$3"'"'"', mvnid:'"'"'"$1"'"'"', org:'"'"'"$2"'"'"', build:'"'"'"$4"'"'"', version:'                   "'"'"$5"'"'"'});" }' > nodes.cypher

 cat edges.tgf | awk '{print "MATCH (a:Package),(b:Package) WHERE a.mvnid = '"'"'"$1"'"'"' AND b.mvnid = '"'"'"$2"'"'"' CREATE (a)-[r:"$3"]->(b);"}' > ed                   ges.cypher

然后使用 cypher-shell 运行 nodes.cypher 和 edges.cypher。

设置

MATCH (n1)-[r]->(n2) RETURN r, n1, n2 LIMIT 250;