Javascript направлена ​​библиотека ациклических графов?(Визуализация графика НЕ ​​обязательна) - PullRequest
9 голосов
/ 29 июля 2011

У меня есть набор данных, который лучше всего представить в виде графика. Он состоит из узлов 6 или 7 разных «типов» с направленными ребрами (зависимости друг от друга, гарантированно не имеющие циклических зависимостей). Набор данных по сути является шаблоном многоуровневой конфигурации, и пользователь должен иметь возможность выбирать биты и фрагменты конфигурации из разных уровней, которые необходимы, и чтобы зависимые биты вводились автоматически.

Общая потребность в пользовательском интерфейсе состоит в том, чтобы пользователь мог выбрать или отменить выбор элементов из блоков множественного выбора (по одному такому блоку для каждого типа узла), и чтобы "зависимые" элементы в других полях становились выбранными или не выбранными как необходимо. Мне нужно иметь возможность вытащить набор данных с сервера, позволить пользователю выбрать нужные биты (с обработкой зависимостей, выполняемой в javascript на стороне клиента для отзывчивости), а затем отправить результат обратно, когда они будут завершены.

Набор данных является достаточно большим и сложным, поэтому его фактическое отображение в виде графика может быть слишком сложным и запутанным для пользователя. Необходимы только базовые операции обхода графа, поскольку все, что требуется, - это каскадный выбор зависимостей. (Например, пользователь, отменивший выбор узла, приведет к тому, что зависимости узлов станут невыбранными, если не будет другого выбранного узла, который все еще зависит от них. Пользователь, выбравший узел, приведет к тому, что все зависимости этого узла станут выбранными.) A простого поиска по глубине или ширине сначала по направленным ребрам от начального узла будет достаточно, чтобы посетить все затронутые узлы. Если я могу следовать по краям в любом направлении, бонус. (Если нет, я могу легко сгенерировать перевернутый граф и использовать его при необходимости.)

Я копался здесь и нашел ссылки на ряд библиотек визуализации графов JavaScript, но большинство этих дискуссий, по-видимому, интерпретируют «график» как «диаграмму», и у меня нет необходимости в диаграммах здесь. Мои раскопки привели меня к этому списку: Рафаэль, Протовис, Флэр, Д3, ДжисВис, Дракула и Префуз. Из этого списка кажется, что jsVis или Dracula могут иметь базовые графовые конструкции, которые мне нужны, если я просто игнорирую сторону визуализации, но мне не ясно из документации, так ли это. Я должен исключить несколько других, потому что я не могу ввести какие-либо флэш-зависимости. К сожалению, у меня нет времени на прототипирование вещей с таким количеством библиотек. (Я буду больше копаться в jsVis и Дракуле, но здесь не будет удобного ввода.)

Если кто-то имеет опыт работы с чем-то из этого списка и считает, что его часть графика может использоваться независимо от части визуализации, это, безусловно, удовлетворит мои потребности. Если бы была какая-то другая библиотека, которую я мог бы использовать, которая отвечала бы моим потребностям, это тоже было бы здорово. Одно последнее требование в отношении лицензирования: библиотека должна быть «бесплатной» без использования авторского лева - в идеале Apache v2.0, BSD, MIT или что-то в этом роде.

1 Ответ

7 голосов
/ 01 августа 2011

Я не использовал его, но вы можете проверить data.js .Это MIT-лицензированная библиотека с набором утилит для структурирования данных.В частности, он включает Data.Node и Data.Graph:

. Data.Graph может использоваться для представления произвольных графов сложных объектов.Отношения между объектами выражаются через ссылки, которые указывают на упомянутые объекты.Data.Graphs можно просматривать различными способами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...