Найти - Пользователи
Полная версия: Языки разметки Workflow-ов
Начало » Python для новичков » Языки разметки Workflow-ов
1
alexiy
Привет!

Подскажите, какие есть языки разметки Workflow-ов?

К примеру (только пример) возьмём такой: http://wiki.coldbox.org/imagelibrary/WireBox-DependencyResolution.jpg

..т.е. с IF-ами, циклами, концом и прочим. Какие есть неочень замудрёные способы описать это текстом, чтоб Python скрипт мог распарсить и «понять», что где и в каком порядке?

Спасибо
doza_and
на ум приходит два продукта. graphviz https://ru.wikipedia.org/wiki/Graphviz - к нему есть биндинг.
и dia - у него это модифицированный xml не фонтан, но прочитать можно.

Тут еще другой вопрос. Описали текстом, распознали. Отрисовка нужна? Редактирование? Если нет, то описываете объектами питона и не заморачиваетесь.
alexiy
doza_and
на ум приходит два продукта. graphviz https://ru.wikipedia.org/wiki/Graphviz - к нему есть биндинг.и dia - у него это модифицированный xml не фонтан, но прочитать можно.Тут еще другой вопрос. Описали текстом, распознали. Отрисовка нужна? Редактирование? Если нет, то описываете объектами питона и не заморачиваетесь.

DOT язык в Graphviz похож на то, что надо. Посмотрим, под многие языки парсеры похоже есть.
По поводу отрисовки - нужна будет через веб. Потому просто питон-скриптом логику описать лучше и не пытаться - ибо потом этот код обработать чемто другим параллельно будет черезчур “весело”
doza_and
alexiy
По поводу отрисовки - нужна будет через веб.
Ну мы делали для себя отрисовку схем в вебе при помощи graphviz. (отрисовку не редактирование). Фичи типа переходов между разными видами и модификации страницы. Кода было пол странички. Сделали за 15 минут. Из минусов - количество примитивов ограничено, можно правда картинки вместо узлов сделать, Кроме того graphviz может скинуть граф в svg. Тогда потом можно в нем покапаться. Но нам было достаточно отрисовки. Например посмотрите как doxigen отрисовывает структуру программ при помощи graphviz.
alexiy
Потому просто питон-скриптом логику описать лучше и не пытаться
Это утверждение непонятно. Если ваш граф имеет представление в виде связанных объектов питона, то отформатировать его в любой другой формат задача крайне примитивная. На фоне большого веб проекта практически ничего не весит. Более того фаза с представлением блок схемы в питоне практически неизбежна, если вы хот чтото будете делать с этим графом. Можно конечно все на javascript сделать, но это друга тема.

По объему текста описание графа что в языке dot что в питоне будет практически идентично.

Получше опишите задачу. может что получше присоветуют.
alexiy
doza_and

Граф будет обрабатываться скриптом, да. Потому попробую связку “DOT file -> Python Object” (бекэнд), а когда нужно будет это отобразить веб-сервером (фронтэнд), то возьмём “DOT file -> любой веб-язык” и показываем картинки в браузере. Ведь веб может быть не на питоне и работать абсолютно отдельно, за основу беря лишь DOT файл с описанием графа.

Есть более удобные способы? Парсить текстовой скрипт питона чем-то другим ведь сложнее будет
doza_and
alexiy
“DOT file -> любой веб-язык”
По поводу любой язык веб разметки. Помоему тут выбора нет. Это html (в который входит css, javascript, svg, json).
Если я вас правильно понял, то вы отправите в браузер dot файл и попробуете его там преобразовать в html (точнее в элементы dom). При этом graphviz использовать не будете. Т.е. будут преобразования:

сервер: что-то прикладное ->python->dot
клиент(браузер) : dot->html

Делать преобразование в dot а потом из него если вы не используете graphviz нет никакого смысла.
тогда просто:

сервер: что-то прикладное ->python->html

клиент(браузер) : -

Мы делали иначе:

сервер: что-то прикладное ->python->dot->html
клиент(браузер) : -

преобразование dot->html выполнял graphviz.

Самое сложное в этой задаче не персинг данных, а преобразование dot->html. Это десятки или сотни килобайт текста на C++, python. Посмотрите исходники graphviz или networkx. javascript язык достаточно убогий, делать это на нем, тем более с нуля?

alexiy
Парсить текстовой скрипт питона чем-то другим ведь сложнее будет?
чем-то другим? Чем? Обычно парсер питона называется инерпрететор питона и никак не иначе.
Это вопрос библиотек javascript
http://www.brython.info/
т.е. распарсить питон код на стороне клиента не сложно. Но мое мнение что там вообще не нужно ничего парсить или генерировать html/svg.

p.s.
У меня сложилось мнение что вы не очень представляете как вообще веб приложение работает.
Я советую сделать сайтик с одной страничкой на которой Hello world! заменяется на Get out!!! при клике в него. Вот тут добрые люди советуют flask или bottle. Думаю тогда все эти вопросф по поводу “ужасного нечто” что будет прасить на стороне клиента данные и отрисовывать картинки уйдут сами собой.
alexiy
doza_and

Я не эксперт, да. Да и приложения этого еще нету, только продумываю, что и как будет работать. Не так и много технологий знаю.

Про Flask/Bottle - предлагаете полностью всё на питоне делать? Как с производительностью у этих двух?

А есть рекомендации по поводу Go? Веб часть думал на нём делать, т.е. подружить Go и Python. Потому DOT думал как прослойку между ними сделать, которую оба понимают и могут использовать
doza_and
alexiy
А есть рекомендации по поводу Go? Веб часть думал на нём делать
Скрещивание языков почти всегда нетривиальная задача. Выделять в Go веб часть (точнее веб сервер) помомему нет смысла. Не увидите разницы ни в сложности кода ни в быстродействии. Сами смотрите по поводу сложности текста: http://bottlepy.org/docs/dev/index.html.

По поводу быстродействия. В вебе отлично уживаются скриптовые языки, в том числе и для высоконагруженных приложений. Тормозит обычно обмен с СУБД или транспорт по сети. Сами скрипты отрабатывают достаточно быстро. Если есть сложная математика, она выносится в динамические библиотеки. В обычных веб проектах такого практически не требуется.

Лучше пишите или все на Питоне или все на GO.
alexiy
doza_and

Допустим попробовать всё на питоне. Нашел, что самое простое как задать граф это Json:

graph = { "a" : ["c"],
          "b" : ["c", "e"],
          "c" : ["a", "b", "d", "e"],
          "d" : ["c"],
          "e" : ["c", "b"],
          "f" : []
        }

..где каждая пара это “откуда” и “куда”. Как это преобразовать в связанные HTML объекты, которые можно отобразить?
doza_and
alexiy
Как это преобразовать в связанные HTML объекты, которые можно отобразить?
В общем случае никак. Этих данных совершенно недостаточно для того чтобы однозначно понять где какие квадратики рисовать и стрелочки. Какого это все стиля и цвета.

Ну пишете из этого дела dot файл.
Генерируете из этого дела граф.
В соответствии с примером: https://networkx.github.io/documentation/latest/examples/pygraphviz/pygraphviz_attributes.html
Дальше вызываете graphviz с опцией генерации svg, png или еще чего. И отдаете картинку. веб сервером.

Или пользуетесь примером как делать картинку без graphviz https://networkx.github.io/documentation/latest/examples/javascript/force.html

Или оставляете запись dot и сам файл парсите и отрисовыаете на стороне клиента:
Сам не пользовался но можно попробовать http://visjs.org/
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB