3

現在、graphiz で UML のような図を設計する際に問題が発生しています。問題の理由は、それらが正確に UML ダイアグラムではないことにあります。主な違いは、インデントを使用してオブジェクトのプロパティに階層を追加することです。これらの特異性を実装することは、私にとって少し難しいです。私が達成しようとしているのはこれです:

図1

record私は通常、これらのダイアグラムを設計するために呼び出されるノード シェイプを使用します。UML の関係、つまり集約、関連付け、構成などのように、これらの UML に似た図の 2 つをリンクする必要がある場合に問題が発生します。

ダイアグラムがある場合、矢印はあるノードのランダムな部分から別のノードの別のランダムな部分にしか移動しないため、矢印との関係を作成できません。UML のようなダイアグラムを作成する方法は良いのですが、あるノードの特定のポイントから別のノードの別の特定のポイントに矢印を移動させたいので、関係の矢印が原因で、私が望むものにはなりません。

図2

このグラフの作成に使用した DOT コードは次のようなものです。

digraph G {

    fontname = "Bitstream Vera Sans"
    fontsize = 8

    node [
        fontname = "Bitstream Vera Sans"
        fontsize = 8
        shape = "record"
    ]

    edge [
        fontname = "Bitstream Vera Sans"
        fontsize = 8    
    ]

    Person [
        label = "{Person \l\l \ age : int\l \ livesIn : City \l \  \ \ sinceYear : int}"
    ] // \l -new line, \ -indentation

    City [
        label = "{City \l \ \ name : string}"
    ]

    Person -> City
}

線が必要ないにもかかわらず、ノード内で水平線分割を使用してこの問題を回避しようとしました。水平線の分割により、ポートを使用してこの特定の関係を可能にすることができますが、それ自体が新しい問題を引き起こします。それらが作成する問題は、前のグラフで必要だったインデントを取り除くことです。矢印の問題を回避しようとした方法は機能しますが、新しい問題が作成されます-インデントが消え、水平線の分割を非表示にすることはできません

図 3.

このグラフを作成するために使用したコードは次のとおりです。

digraph G {

    fontname = "Bitstream Vera Sans"
    fontsize = 8

    node [
        fontname = "Bitstream Vera Sans"
        fontsize = 8
        shape = "record"
        penwidth = 0.5 
    ]

    edge [
        fontname = "Bitstream Vera Sans"
        fontsize = 8    
    ]

    Person [
        label = "{<g0> Person | <g1> age : int | <g2> livesIn : City | <g3> sinceYear : int}"
    ] // \l -new line, \ -indentation

    City [
        label = "{<f0> City | <f1> name : string}"
    ]

    Person:<g2> -> City:<f1> [arrowhead = "empty", headlabel = "*"]
}

これらのくぼみは関係の大きな部分を占めるので、これらのくぼみを図に戻すにはどうすればよいか、水平線の分割を非表示にするために何ができるかを誰かが知っているかどうか疑問に思っています?

図1を達成するのに役立つ、図2と3で行ったこととはまったく異なる、より良い方法/アイデアを誰かが持っていれば幸いです.

4

1 に答える 1