The graphviz vocabulary alone already follows the general structure of the DOT language: graph s and subgraph s consist of an ordered sequence of statements; each statement will add either a node, an edge, or some attribute declaration ( graph-attributes, node-attributes, edge-attributes ); and attributes may be set on individual node s and edge s. Even some DOT niceties are already supported, like being able to have an edge between anonymous subgraph s. For instance, compare