# 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.

#### 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.

### 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.
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 (#).

## 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:
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 Archivado el 28 de noviembre de 2009 en Wayback Machine.
* GraphML, un formato basado en XML -- GraphML
* GXL, otro formato basado en XML -- GXL
* DGML, un formato desarrollado por Microsoft.