强制执行显式节点创建(dot、graphviz)

Enforce explicit node creation (dot, graphviz)

我正在处理一个包含大量节点的大图,该图以点 dot -Tsvg graph.gv -o graph.svg 呈现。 为了保持概览,我 "explicitly" 定义了我在图表开头使用的所有节点。

现在我正在寻找一种方法来确保只使用那些 "explicitly" 定义的节点,并且我不会在边定义上得到 "implicitly" 创建的节点(例如节点中的拼写错误姓名).

下图的渲染不应该工作,或者在渲染时警告我使用了 "implicit" 节点。

graph main_graph {

  // explicit node definition
  node1[style=filled, color=grey];
  node2[style=filled, color=grey];
  node3[style=filled, color=grey];

  subgraph graph1 {
    edge [color=red,penwidth=2]
    node0 -- node2; //node0 implicitly defined
  }

  subgraph graph2 {
    edge [color="blue",penwidth=2]
    node2 -- node3;
    node1 -- node3;
  }
}

不存在官方支持。

我使用了如下提示。

1.为隐式节点添加标记

graph main_graph {

  // explicit node definition
  node1[style=filled, color=grey];
  node2[style=filled, color=grey];
  node3[style=filled, color=grey];

  // ---- lower boundary of explicit node definition ----
  // default node attribute used for the detection of implicit node definition
  node[label="IMPLICITLY-DEFINED"]

  subgraph graph1 {
    edge [color=red,penwidth=2]
    node0 -- node2; //node0 implicitly defined
  }

  subgraph graph2 {
    edge [color="blue",penwidth=2]
    node2 -- node3;
    node1 -- node3;
  }
}

2。找到隐式定义节点的标记

$ dot -Tplain graph.gv | awk '/IMPLICITLY-DEFINED/{print }'
node0

测试版本:macOS 上的 graphviz 版本 2.40.1 (20161225.0304)