Мова DOT
DOT - це текстова мова опису графів. Вона достатньо проста як для людей, так і для комп'ютерів. Графи DOT це зазвичай Файли з розширенням .gv (чи .dot).
DOT-файли можуть оброблятись різними програмами. Такі як dot, neato, twopi, circo, fdp, та sfdp, прочитають DOT файл і відтворять його в графічній формі. Інші, як наприклад gvpr, gc, accyclic, ccomps, sccmap, та tred, після читання графа будуть виконувати над ним різні обчислення. А такі програми як GVedit, lefty, dotty, та grappa, надають інтерактивний інтерфейс. Більшість програм є частиною пакету Graphviz.
Зміст |
Синтаксис [ред.]
Типи графів [ред.]
Ненаправлені [ред.]
Ключове слово graph використовують для створення нового графа, і його елементи описуються всередині фігурних дужок. Подвійний дефіс використовують щоб показати відношення між вершинами.
graph graphname { a -- b -- c; b -- d; }
Направлені графи [ред.]
Подібно до ненаправлених графів, мова DOT може описувати направлені, такі як блок-схеми та дерева залежностей. Синтакс такий самий, тільки на початку використовуєтсья ключове слово digraph (англ. directed graph), і зв'язки між вершинами позначаються стрілочками (->).
digraph graphname { a -> b -> c; b -> d; }
Атрибути [ред.]
Вершинам та ребрам можна присвоювати певні атрибути, які будуть змінювати вигляд графа, такі як колір, форма, чи стиль ліній. В квадратні дужки перед крапкою з комою ([]) поміщається одна, чи більше пар ім'я-значення, розділених комою. Щоб призначити атрибути для вершин, їх розміщують в рядку що містить тільки ім'я вершини, без відношень.
graph graphname { // Атрибут label можна використовувати щоб змінювати підпис вершини a [label="Foo"]; // тут змінюємо форму вершини b [shape=box]; // А тут змінюємо вигляд ребер. a -- b -- c [color=blue]; b -- d [style=dotted]; }
Коментарі [ред.]
Dot підтримує коментарі як в стилі C, так і в стилі скриптових мов:
// Однорядковий коментар /* А це - багаторядковий коментар. */ # І це коментар
Програми малювання [ред.]
Мова DOT описує граф, але не надає можливостей для його відображення. Існує кілька програм, що можуть використовуватись для перегляду та маніпулювання графами в мові DOT:
- Graphviz - колекція програм для обробки графів в мові DOT
- Grappa - Java редактор та переглядач графів, що базується на Graphviz
- Beluging - Переглядач графів що базується на Python та Google Cloud. [1]
- Tulip може імпортувати файли dot для аналізу.
- OmniGraffle може імпортувати підмножину DOT, та створює документ який можна редагувати. (Результат можна знову зберегти в DOT)
- ZGRViewer, переглядач GraphViz/DOT (Посилання)
- VizierFX, бібліотека рендерингу графів для Flex. Посилання.
Обмеження [ред.]
Хоча можливо явно задавати розміщення графа з DOT, але не всі інструменти що використовують мову DOT звертають увагу на атрибути позиції. Тому, іноді автоматичне розміщення графа відбувається не так як би того хотілось і доводиться доробляти все вручну.
Наприклад:
digraph g { node [shape=plaintext] A1 -> B1 A2 -> B2 A3 -> B3 A1 -> A2 [label=f] A2 -> A3 [label=g] B2 -> B3 [label="g'"] B1 -> B3 [label="(g o f)'" tailport=s headport=s] { rank=same; A1 A2 A3 } { rank=same; B1 B2 B3 } }
Зображення вище трохи скошене, і мітка "(g o f)'" розташована не там де потрібно.
Це можна виправити за допомогою Inkscape чи іншого SVG редактора. В деяких випадках, це також можна виправити використовуючи атрибут pos для явного задання позиції.
Інші формати зберігання графів [ред.]
- Trivial Graph Format, простий текстовий формат
- GML інший широко розповсюджений формат -- GML
- GraphML, формат зберігання графів на базі XML -- GraphML
- GXL, ще один XML формат -- GXL
- XGMML XML формат дуже схожий на GML -- XGMML
- DGML, Directed Graph Markup Language від Microsoft
Дивіться також [ред.]
- Graphviz
- Graph (структура даних)
- lisp2dot інструмент для трансляції дерева програми на мові LISP в мову DOT