# DOT

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

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.

#### Grafos orientados

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.

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

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

## Programas de layout

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

É 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:
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.