データーフロー図 by Graphviz

データーフロー図をGraphvizで記述する試み。
題材:トム・デマルコ「構造化分析とシステム仕様」の図31

データーフロー図

f:id:borsalino:20161014201756p:plain

Graphvizスクリプト

digraph G { 
graph [fontname = "MS UI Gothic", fontsize = 16];
node  [fontname = "MS UI Gothic", fontsize = 16];
edge  [fontname = "MS UI Gothic", fontsize = 16];
node  [shape=rectangle,style=rounded];

P01 [label="1.更新をチェックする"];
P02 [label="2.マスター領域を設定する"];
P03 [label="3.レコードを置き換える"];
S01 [label="", shape=none, width=0,height=0];
S02 [label="", shape=none, width=0,height=0];
E01 [label="", shape=none, width=0,height=0];

subgraph cluster_0 {
  node [style=filled];
  label = "ダイアグラム0";

  S01->P01 [label="更新-\nカード"];
  S02->P02 [label="旧-\nマスター-\nレコード"]
  P01->P03 [label="フォーマット化した-\n更新-\nレコード"];
  P02->P03 [label="マスター-\n領域"];
  P03->E01 [label="新規-\nマスター-\nレコード"];
}



P11 [label="1.1順序をチェックする"];
P12 [label="1.2仕分ける"];
P13 [label="1.3書き換える"];
S11 [label="", shape=none, width=0,height=0];
E11 [label="", shape=none, width=0,height=0];
R12 [label="", shape=none, width=0,height=0];
R11 [label="", shape=none, width=0,height=0];

subgraph cluster_1 {
  node [style=filled];
  label = "ダイアグラム1";

  S11->P11 [label="更新-\nカード"];
  P11->P12 [label="順番になった-\nカード"];
  P12->P13 [label="有効-\nカード"];
  P13->E11 [label="フォーマット化した-\n更新-\nレコード"];
  P11->R11 [label="リジェクト"];
  P12->R12 [label="リジェクト"];
}


P21 [label="2.1チェック合計を確認する"];
P22 [label="2.2拡張する"];
R21 [label="", shape=none, width=0,height=0];
S21 [label="", shape=none, width=0,height=0];
E21 [label="", shape=none, width=0,height=0];

subgraph cluster_2 {
  node [style=filled];
  label = "ダイアグラム2";

  S21->P21 [label="旧-\nマスター-\nレコード"];
  P21->P22 [label="OK-\nマスター"];
  P22->E21 [label="マスター-\n領域"];
  P21->R21 [label="リジェクト"];
}


P31 [label="3.1照合する"];
P32 [label="3.2更新する"];
P33 [label="3.3フォーマットを出力する"];
P34 [label="3.4チェック合計を付ける"];
R31 [label="", shape=none, width=0,height=0];
S31 [label="", shape=none, width=0,height=0];
S32 [label="", shape=none, width=0,height=0];
E31 [label="", shape=none, width=0,height=0];

subgraph cluster_3 {
  node [style=filled];
  label = "ダイアグラム3";

  S31->P31 [label="マスター-\n領域"];
  S32->P31 [label="フォーマット化した-\n更新-\nレコード"];
  P31->P32 [label="一致した-\n組"];
  P31->P33 [label="不一致の-\n組"];
  P32->P33 [label="新規-\nマスター-\n領域"];
  P33->P34 [label="フォーマット化した-\nマスター"];
  P34->E31 [label="新規-\nマスター-\nレコード"];
  P31->R31 [label="リジェクト"];
}
}