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.
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
Tipos de grafo
Grafos não orientados
direita|miniaturadaimagem|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
direita|miniaturadaimagem|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 direita|miniaturadaimagem|Um grafo com atributos Vários atributos podem ser aplicados a grafos, nós (nodes) e arestas (edges) em arquivos DOT. 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.
Comentários 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
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
direita|miniaturadaimagem|Á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.AT&T Labs Research - Grappa. .research.att.com. http://www2.research.att.com/~john/Grappa/grappa.tgz 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
miniaturadaimagem|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 } }
miniaturadaimagem|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 com Inkscape 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
Ligações externas Tutorial e especificação de DOT Desenhando grafos com DOT Atributos de nós, arestas e grafos Formas de nós Galeria de exemplos Visualização online de grafos em SVG Boost Graph Library Grappa Drawing Package
Categoria:Software de matemática