Ответ 1
Мне сразу приходят два варианта. Можно было бы использовать макропроцессор, например. m4. С учетом BigGraph.m4
:
digraph BigGraph {
define(`digraph',`subgraph')
include(`subgraph01.dot')
include(`subgraph02.dot')
A -> subgraph01.Node1
A -> subgraph02.Node1
subgraph.Node10 -> subgraph.Node99
/* etc. */
}
... running:
$ m4 BigGraph.m4
... производит:
digraph BigGraph {
subgraph subgraph01 {
/* lot of nodes and edges */
}
subgraph subgraph02 {
/* lot of nodes and edges */
}
A -> subgraph01.Node1
A -> subgraph02.Node1
subgraph.Node10 -> subgraph.Node99
/* etc. */
}
Другим вариантом, который может позволить более сложный подход, является использование
gvpr от GraphViz. Я попытался создать пример, чтобы сделать это с помощью gvpr
, однако я был неудачным, поэтому я предлагаю только попробовать его, если требуется подход, основанный на графе, а не простой подход с использованием m4
.