Как сериализовать орграф в эрланге или эликсире для целей экспорта - PullRequest
0 голосов
/ 16 декабря 2018

Я использую модуль орграфа Эрланга для хранения направленных ациклических графов ( DAG ).Итак, ради аргумента вот супер простой график (с использованием эликсира):

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 .

1 Ответ

0 голосов
/ 16 декабря 2018

Поиск. Существуют различные решения для экспорта данных орграфа в различные популярные форматы, но ничего канонического. Два самых популярных из этих форматов - DOT и GraphML .

Некоторые библиотеки Elixir и Erlang для экспорта орграфов в различные форматы:

Некоторые примеры Elixir и Erlang по обновлению внешнего интерфейса в soft realtime с использованием js-библиотек, таких как vis.js и веб-сокетов:

...