gpt4 book ai didi

erlang - 出于导出目的,如何在 Erlang 或 Elixir 中序列化有向图

转载 作者:行者123 更新时间:2023-12-05 00:46:45 26 4
gpt4 key购买 nike

我正在使用 Erlang's digraph module用于存储有向无环图 ( DAGs )。所以为了论证,这里是一个 super 简单的图(使用 Elixir):

gr = :digraph.new()
:digraph.add_vertex(gr, "A")
:digraph.add_vertex(gr, "B")
:digraph.add_vertex(gr, "C")
:digraph.add_edge(gr, "A", "B")
:digraph.add_edge(gr, "A", "C")

看起来像这样:

enter image description here

我们可以看到这一切都奏效了:
iex(7)> :digraph.vertices(gr)
["A", "C", "B"]
iex(8)> :digraph.edges(gr)
[[:"$e" | 0], [:"$e" | 1]]
iex(9)> :digraph.out_neighbours(gr, "A")
["C", "B"]
iex(10)> :digraph.out_neighbours(gr, "B")
[]
iex(11)> :digraph.out_neighbours(gr, "C")
[]
iex(12)> :digraph_utils.is_acyclic(gr)
true

现在我将添加和删除更多的顶点和边,但我想将这些图传输到 Elixir/Erlang 生态系统之外的应用程序,例如 Cytoscape.js .是否有一种标准化的方法可以将有向图序列化为一些行业标准的可读格式(例如 json 或 xml),例如 JGF , Netlix的 Falcor JSON Graph格式,还是其他?

我可以编写自己的序列化程序,但我更喜欢预先存在的东西。我在 digraph 中找不到任何这样做的东西或 digraph_utils .

最佳答案

搜索有各种将有向图数据导出为各种流行格式的解决方案,但没有规范的格式中最流行的两种格式是 DOTGraphML .

一些用于将有向图导出为各种格式的 Elixir 和 Erlang 库:

  • https://github.com/mikowitz/graphvix
  • https://github.com/jabarszcz/digraph_viz
  • https://github.com/fenollp/erlang-dot

  • 一些使用 js 库(例如 vis.js)软实时更新前端的 Elixir 和 Erlang 示例和网络套接字:
  • http://blog.songsaboutsnow.com/elixir/graphviz/2018/06/26/graphvix-part1.html
  • https://github.com/swelham/digraph_viewer
  • https://rshestakov.wordpress.com/2013/03/17/extended-example-with-graphviz-updates-via-websockets/
  • 关于erlang - 出于导出目的,如何在 Erlang 或 Elixir 中序列化有向图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53798583/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com