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.[1]

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

editar

Tipo de gráficas

editar

Gráficas indirectas

editar
 
Una gráfica indirecta

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

editar
 
Una gráfica directa

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

editar
 
Un diagrama con atributos

A los diagramas se les pueden aplicar atributos para modificar aspectos tales como el color, la forma, el tipo de línea, etc.[2]​ 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.[3]

Comentarios

editar

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

editar
 
generado] por Graphiviz a partir de una archivo DOT

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.[4][5]
  • 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

editar
 
Una imagen renderizada incorrectamente

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 } 
}
 
Después de mover las etiquetas y las flechas un poco, la imagen se ve correctamente.

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

editar

Véase también

editar

Referencias

editar
  1. «File extension .dot or .gv?». Consultado el 8 de marzo de 2011. 
  2. «Node, Edge and Graph Attributes». 
  3. HTML-Like Labels
  4. AT&T Labs Research - Grappa Archivado el 12 de octubre de 2010 en Wayback Machine.. .research.att.com. Retrieved on 2013-07-12.
  5. «Copia archivada». Archivado desde el original el 22 de octubre de 2014. Consultado el 21 de febrero de 2014. 

Enlaces externos

editar