DOT

Origem: Wikipédia, a enciclopédia livre.

DOT é uma linguagem de descrição de grafos em texto puro. Grafos em DOT normalmente são arquivos com a extensão de arquivo gv ou dot. A extensão gv é preferível, para evitar confusão com a extensão dot usada pelas primeiras (pré-2007) versões do Microsoft Word.[1]

Vários programas podem processar arquivos DOT. Alguns, como o OmniGraffle, dot, neato, twopi, circo, fdp, e sfdp, podem ler DOT e renderizá-lo em forma gráfica. Outros, como gvpr, gc, acyclic, ccomps, sccmap, e tred, lêem arquivos DOT e executam cálculos com o grafo representado. Finalmente, outros, tais como lefty, dotty, e grappa, fornecem uma interface interativa. A ferramenta GVedit combina um editor de texto com um visualizador de imagem não-interativo. A maioria dos programas fazem parte do pacote Graphviz ou o usam internamente.

Sintaxe[editar | editar código-fonte]

Tipos de grafo[editar | editar código-fonte]

Grafos não orientados[editar | editar código-fonte]

Um grafo não orientado

Na sua forma mais simples, DOT pode ser usado para descrever um grafo não-orientado. Um grafo não orientado mostra relações simples entre objetos, como por exemplo a amizade entre pessoas. A palavra-chave graph é utilizada para iniciar um novo grafo, e os nós são descritos dentro de chaves. Um hífen duplo (--) é utilizado para mostrar relações entre nós.

 // Nome e ponto-e-vírgula são opicionais
 graph nome {
     a -- b -- c;
     b -- d;
 }

Grafos orientados[editar | editar código-fonte]

Um grafo orientado

Semelhante aos grafos não orientados, DOT pode descrever grafos orientados, tais como fluxogramas e árvores de dependências. A sintaxe é a mesma dos grafos não-orientados, exceto que a palavra-chave digraph é usada para começar o grafo, e uma seta (->) é usada para mostrar as relações entre os nós.

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

Atributos[editar | editar código-fonte]

Um grafo com atributos

Vários atributos podem ser aplicados a grafos, nós (nodes) e arestas (edges) em arquivos DOT.[2] Estes atributos podem controlar aspectos como cor, forma e estilos de linha. Para nós e arestas, um ou mais pares de atributo-valor são colocados entre colchetes ([]) depois de uma instrução e antes do ponto-e-vírgula (que é opcional). Atributos de grafo são especificados como pares atributo-valor abaixo do elemento grafo. Vários atributos são separados por vírgulas ou usando vários conjuntos de colchetes. Atributos do nó são colocados depois de uma declaração contendo apenas o nome do nó, e nenhuma relação.

 graph graphname {
     // Este atributo se aplica ao gráfico
     size="1,1";
     // Label (rótulo) muda o rótulo de um nó
     a [label="Foo"];
     // Shape (forma) muda o formato do nó
     b [shape=box];
     // Essas arestas têm propriedades de linha diferentes
     a -- b -- c [color=blue];
     b -- d [style=dotted];
     // [style=invis] esconde um nó
 }

Rótulos no estilo HTML estão disponíveis apenas em versões do Graphviz que são mais recentes do que novembro de 2003. Em particular, eles não são parte da versão 1.10.[3]

Comentários[editar | editar código-fonte]

DOT suporta comentários de uma ou múltiplas linhas no estilo de C e C++. Além disso, ele ignora as linhas começando com o símbolo #.

 // Esse é um comentário de uma linha
 /* Esse é um
    comentário de
    várias linhas. */
 # Linhas como essa também são ignoradas

Um exemplo simples[editar | editar código-fonte]

A seguir, um exemplo de script que descreve a estrutura de ligação de uma molécula de etano. Este é um grafo não orientado e contém atributos do nó, como explicado acima.

 graph etano {
     C_0 -- H_0 [type=s];
     C_0 -- H_1 [type=s];
     C_0 -- H_2 [type=s];
     C_0 -- C_1 [type=s];
     C_1 -- H_3 [type=s];
     C_1 -- H_4 [type=s];
     C_1 -- H_5 [type=s];
 }

Programas de layout[editar | editar código-fonte]

Árvore binária gerada em Graphviz de uma descrição DOT gerada pelo gerador de árvores de Huffman

A linguagem DOT define um grafo, mas não fornece uma forma de renderizar o grafo. Existem vários programas que podem ser usados para processar, visualizar e manipular grafos no idioma DOT:

  • Graphviz - Uma coleção de bibliotecas e ferramentas para manipular e processar grafos
  • Canviz - uma biblioteca em JavaScript para o processamento de arquivos DOT.
  • Viz.js - Um simples cliente de Graphviz em JavaScript
  • Grappa - Implementação parcial de Graphviz em Java.[4][5]
  • Beluging - Um visualizador em Python & Google Cloud de DOT e Beluga.
  • Tulip pode importar arquivos DOT para análise
  • OmniGraffle pode importar um subconjunto de DOT, produzindo um documento editável. (Porém o resultado não pode ser exportado de volta para DOT.)
  • ZGRViewer, um visualizador Graphviz/DOT link
  • VizierFX, uma biblioteca de renderização de grafos link
  • Gephi - uma plataforma de visualização e exploração interativa para todos os tipos de redes e sistemas complexos, dinâmicos e grafos hierárquicos

Limitações[editar | editar código-fonte]

Uma imagem que parece renderizada incorretamente

É possível especificar detalhes de layout em DOT, mas nem todas as ferramentas que implementam DOT dão atenção aos atributos de posição. Assim, dependendo das ferramentas utilizadas, os usuários devem confiar em algoritmos de layout automatizado (potencialmente gerando resultados inesperados) ou tediosamente posicionando nós a mão.

Por exemplo:

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 }
}
Depois de mover os rótulos e as setas um pouco, e alterar o tamanho da fonte dos índices, a imagem parece correta.

Há dois problemas na imagem acima. O quadrado na direita não é um quadrado perfeito e o rótulo "(g o f)'" está no lugar errado.

Isto pode ser corrigido comInkscape ou outros editores de SVG. Em alguns casos, isso também pode ser corrigido usando o atributo pos para especificar uma posição.

Referências[editar | editar código-fonte]

  1. «File extension .dot or .gv?». Consultado em 8 de março de 2011 
  2. «Node, Edge and Graph Attributes» 
  3. «Node Shapes». www.graphviz.org. Consultado em 6 de outubro de 2017 
  4. AT&T Labs Research - Grappa. .research.att.com.
  5. http://www2.research.att.com/~john/Grappa/grappa.tgz

Ligações externas[editar | editar código-fonte]