Как сериализовать орграф в Erlang или Elixir для экспорта

Я использую Модуль орграфа Эрланга для хранения направленных ациклических графиков (Группы DAG). Итак, для аргументации, вот супер простой график (с использованием 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")

что выглядит так:

Как сериализовать орграф в Erlang или Elixir для экспорта

Мы видим, что все работает:

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 или другой?

Я мог бы написать свой собственный сериализатор, но предпочел бы что-нибудь уже существующее. Я не могу найти ничего, что делает это в диграф или digraph_utils.

Для тех, кто хочет сериализовать / десериализовать digraph для сохранения состояния процесса, передачи графиков между процессами и т. д. На языках на основе BEAM: Как передать орграф другому процессу и другому узлу?

toraritte 05.04.2020 03:28
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
1
389
1

Ответы 1

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

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

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

К сожалению, многим из них больше 5 лет, и, хотя это может быть нормально, я немного беспокоюсь о поддержке пакетов. Тем не менее, github.com/fenollp/erlang-dot выглядит хорошо, особенно в сочетании с некоторыми решениями, описанными здесь: stackoverflow.com/questions/22595493/…. Если вы хотите добавить этот последний URL к своему ответу, я приму его. Большое спасибо за вашу тяжелую работу и добро пожаловать в Stack Overflow!

Thomas Browne 16.12.2018 12:01

на самом деле erlang-dot, похоже, не компилируется под Elixir, graphvix кажется конкурент для орграфа и выглядит очень неоднородно, потому что он использует genserver для хранения графиков (риск DDOS), в то время как digraph_viz не дает мне возможность экспорта, которую я можно видеть. Боюсь, что ни один из них на самом деле не отвечает на мой вопрос, который я могу понять, если вы не покажете мне иное.

Thomas Browne 16.12.2018 23:57

Graphvix - это оболочка для орграфа, а не его конкурент, как видно здесь: github.com/mikowitz/graphvix/blob/… Он также не использует gen_server. Однако использование gen_server не влечет за собой никаких рисков для безопасности. Довольно часто библиотеки "lib" используют генеральные серверы для хранения состояния. Между тем, у digraph_vis действительно есть функции для экспорта, как видно здесь: github.com/jabarszcz/digraph_viz/blob/…

starbelly 17.12.2018 00:21

отлично спасибо. Пожалуйста, покажите какой-нибудь код в ответе, и я приму его. Обратите внимание, что мне нужна сериализация, которая не обязательно будет записана на диск, но может потребоваться передача по сети через zeromq или веб-сокеты и т. д.

Thomas Browne 17.12.2018 01:42

Другие вопросы по теме