DOT

DOT es un lenguaje descriptivo en texto plano. Proporciona una forma simple de describir grafos entendible por humanos y computadoras. Los ficheros de DOT suelen usar la extensión .gv o .dot (aunque esta última esta en desuso debido a que puede confundirse con la usada por Microsoft Word en sus plantillas.

Existen varios programas que pueden procesar programas en DOT. Algunos, como OmniGraffle, dot, neato, twopi, circo, fdp y sfdp, renderizan la descripción y generan gráficos en diversos formatos de imagen. Otros, como gvpr, gc, accyclic, ccomps, sccmap y tred, ejecutan cálculos sobre los grafos y por último, programas como GVedit, KGraphEditor, lefty, dotty o grappa proveen una interfaz para editar archivos DOT. La mayoría de estos programas o forman parte del paquete Graphviz o lo usan parcialmente para ejecutar cálculos.

Sintaxis

Tipo de gráficas

Gráficas indirectas 

En su forma más simple, DOT puede describir un grafo no dirigido, que es aquel que muestra relaciones simétricas entre varios objetos, por ejemplo la amistad entre personas. La palabra clave graph se usa para iniciar la definición de un nuevo grafo, los nodos son descritos por llaves {} y el guion doble (--) se usa para trazar las aristas entre los nodos.

 
 // el nombre del grafo y el punto y coma al final de la línea son opcionales
 graph nombre_del_grafo {
     a -- b -- c;
     b -- d;
 }

Grafo dirigido 

DOT también puede describir grafos dirigidos, como diagramas de flujo o de árboles de dependencias. La sintaxis es la misma, exceptuando que la definición se inicia con digraph y que se usa la flecha (->) para indicar el sentido de la relación.

 digraph nombre_del_diagrama {
     a -> b -> c;
     b -> d;
 }

Atributos 

A los diagramas se les pueden aplicar atributos para modificar aspectos tales como el color, la forma, el tipo de línea, etc. Los atributos se describen entre corchetes, atributo="valor", después de la definición del elemento y antes del punto y coma. Se pueden definir varios atributos separándolos por comas (,) y espacios.

 graph nombre_del_diagrama {
     // Este atributo se aplica a todo el diagrama modificando su tamaño
     size="1,1";
     // El atributo ''label'' (etiqueta) puede usarse para modificar el título de un nodo
     a [label="Foo"];
     // Este atributo cambia la forma del nodo b
     b [shape=box];
     // Se puede cambiar el tipo de línea que rodea a las figuras con los atributos ''color'' y ''style'' (estilo )
     a -- b -- c [color=blue];
     b -- d [style=dotted];
 }

Las etiquetas definidas con el estilo HTML solo están disponibles en las versiones de Graphviz posteriores a noviembre de 2003). En particular, no son parte de la versión 1.10.

Comentarios 
DOT permite comentarios de una o múltiples líneas al estilo de los lenguajes de programación C y C++ e ignora también el texto que sigue a una almohadilla (#).

 // Este es un comentario que se extiende a una sola línea.
 /* Este es
    un comentario que se extiende
    en varias líneas. */
 # Líneas como esta también son ignoradas.

Programas 

El lenguaje DOT define grafos, pero no provee un framework para generarlos. Existen varios programas que pueden ser usados para renderizar, ver o manipular grafos definidas en DOT:
 Graphviz - Una colección de librerías y utilidades para manipular y renderizar imágenes.
 Canviz - Librería en JavaScript para renderizar archivos DOT.
 Viz.js - Un cliente para Graphviz en JavaScript
 Grappa - Una envoltura de la librería Graphviz en Java.
 Beluging - Un visor en Python alojado en la nube de Google y con extensiones Beluga.
 Tulip - Es un programa que puede importar archivos en DOT para su análisis
 ZGRViewer - Un visor basado en GraphViz

Limitaciones 

Es posible modificar la disposición de los diagramas DOT. sin embargo no todas las herramientas que lo implementan prestan atención a todos los atributos posibles. Por lo tanto, el usuario debe prestar atención a la forma en que se posicionan en cada programa y tener en cuenta que esas posiciones cambiarán de un programa a otro.

Ejemplo:
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 } 
}

Hay dos problemas en la imagen superior. El cuadrado de la derecha no es perfecto y las etiquetas g' y (g o f)''' están en el lugar incorrecto.

Estos errores pueden corregirse con programas como Inkscape u otros programas que reconozcan el formato SVG. En algunos casos, esto también puede solucionarse con el atributo pos''.

Otros formatos para describir grafos 
 TGF, un formato simple para la generación de grafos.
 GML un formato muy popular y simple -- GML
 GraphML, un formato basado en XML -- GraphML
 GXL, otro formato basado en XML -- GXL
 DGML, un formato desarrollado por Microsoft.

Véase también 
 Graphviz
 Grafo

Referencias

Enlaces externos 

 DOT tutorial and specification
 Drawing graphs with dot
 Node, Edge and Graph Attributes
 Node Shapes
 Gallery of examples
 Webapp generating DOT descriptions of Huffman trees
 Online graph visualization in SVG 
 Boost Graph Library
 Grappa Drawing Package

Lenguajes de marcado