【发布时间】:2019-05-16 20:06:21
【问题描述】:
我正在使用Erlang's digraph module 存储有向无环图 (DAGs)。所以为了论证,这里有一个超级简单的图(使用 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")
看起来像这样:
我们可以看到一切正常:
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 中找不到任何这样做的东西。
【问题讨论】:
-
对于那些想要在基于 BEAM 的语言中序列化/反序列化
digraphs 以保存进程状态、在进程之间传递图表等的人:How to pass a digraph to a different process and node?