DOT — язык описания графов.
Граф, описанный на языке DOT, обычно представляет собой текстовый файл с расширением .gv или .dot в понятном для человека и обрабатывающей программы формате.
В графическом виде графы, описанные на языке DOT, представляются с помощью специальных программ, например Graphviz.
Хотя язык допускает использование стандартных расширений .gv и .dot, следует отдавать предпочтение первому варианту — .gv, так как расширение .dot используется в Microsoft Office 2003[1].
Структура графа на языке DOT описывается в виде списка субграфов, каждый элемент которого представляет собой конструкцию:
graph %имя_графа% { }
внутри которой (в фигурных скобках — { }) находятся комментарии и инструкции, описывающие субграф. Инструкции описывают вершины и рёбра целевого графа и разделяются символом точкой с запятой — ;.
Язык DOT поддерживает комментарии в стиле языков C и C++ — // и /**/, а также используемый для этих целей в некоторых языках программирования символ # в качестве первого символа однострочного комментария.
// Комментарий в одну строку. # Комментарий в одну строку. /* Комментарий из нескольких строк. */
Неориентированный граф в языке DOT описывается списком вершин и рёбер, представленных названием вершин и двойным тире (--) между связанными вершинами.
graph graphname { a; b; c; d; a -- b; b -- c; b -- d; }
Или эквивалентным образом, опустив избыточные описания:
graph graphname { a -- b -- c; b -- d; }
Ориентированный граф в языке DOT описывается списком вершин и рёбер, представленных названием вершин и стилизованной тире и треугольной скобкой стрелочкой (->) между связанными вершинами:
digraph graphname { a -> b -> c; b -> d; }
Либо с избыточным описанием:
digraph graphname { a; b; c; d; a -> b; b -> c; b -> d; }
При описании графов на языке DOT можно использовать атрибуты, определяющие цвет, форму и стиль вершин и рёбер. Атрибуты описываются парами ключ=значение, заключёнными в квадратные скобки ([ключ=значение]). Для каждого элемента графа может быть определено несколько атрибутов, разделённых пробелом
graph graphname { // label - видимое название вершины a [label="Foo"]; // shape - определение формы вершины b [shape=box]; // color - определение цвета ребра a -- b -- c [color=blue]; // style - определение стиля ребра b -- d [style=dotted]; }
Так как язык 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 } }
Для представления графов, описанных на языке DOT используется множество программ, виджетов и библиотек, среди которых: