WrapupΒΆ

digraph element_wrapup {
rankdir = "LR";

subgraph cluster_metadata {
    label = "metadata";
    rank = "min";

    position; photo_info; camera_info; camera; lens;
}

subgraph cluster_media {
    label = "media";

    video;
    photo;

    {
    rank = "same";
    video_format;
    resized_video;
    photo_size;
    resized_photo;
    }
}


subgraph cluster_core {
    label = "core";
    rank = "same";

    subgraph {
    rank = "max";
    element;
    }
    subgraph {
    rank = "min";
    thumbnail;
    thumbnail_size;
    }
}

subgraph cluster_acl {
    label = "acl";
    rank = "min";

    token;
}

subgraph cluster_orga {
    label = "orga";
    rank = "min";

    roll;
    theme;
    directory;
    presence;
}

thumbnail [shape = "box", label="Thumbnail\nmg.core.element"];
thumbnail_size [shape = "box", label="ThumbnailSize\nmg.core.element"];
element [shape = "box", label="Element\nmg.core.element"];
photo [shape = "box", label="Photo\nmg.media.photo"];
photo_size [shape = "box", label="PhotoSize\nmg.media.photo"];
resized_photo [shape = "box", label="ResizedPhoto\nmg.media.photo"];
video [shape = "box", label="Video\nmg.media.video"];
video_format [shape = "box", label="VideoFormat\nmg.media.video"];
resized_video [shape = "box", label="ResizedVideo\nmg.media.video"];
photo_info [shape = "box", label="PhotoInfo\nmg.metadata.photo_info"];
position [shape = "box", label="Position\nmg.metadata.position"];
camera_info [shape = "box", label="CameraInfo\nmg.metadata.camera_info"];
camera [shape = "box", label="Camera\nmg.metadata.camera_info"];
lens [shape = "box", label="Lens\nmg.metadata.camera_info"];
token [shape = "box", label="Token\nmg.acl.tree_token"];
directory [shape = "box", label="Directory\nmg.orga.tree"];
presence [shape = "box", label="Presence\nmg.orga.tree", style="dotted"];
roll [shape = "box", label="Roll\nmg.orga.roll"];
theme [shape = "box", label="Theme\nmg.orga.theme"];

theme -> roll [headlabel = "*", taillabel = "1"];
roll -> element [headlabel = "*", taillabel = "1", constraint=false];
directory -> element [style="dotted", constraint=false];
directory -> presence [label = "children_elements"];
presence:e -> element [constraint=false];
token -> element [constraint=false];
camera_info -> element [headlabel = "1", taillabel = "1", constraint=false];
camera_info -> camera [headlabel = "1", taillabel = "*"];
camera_info -> lens [headlabel = "1", taillabel = "*"];
position -> element [headlabel = "1", taillabel = "1", constraint=false];
photo_info -> photo [headlabel = "1", taillabel = "1"];
photo -> element [style="dotted", constraint=false];
resized_photo -> photo_size [headlabel = "1", taillabel = "*"];
resized_photo -> photo [headlabel = "1", taillabel = "*"];
video -> element [style="dotted", constraint=false];
resized_video -> video_format [headlabel = "1", taillabel = "*"];
resized_video -> video [headlabel = "1", taillabel = "*"];
thumbnail -> element [headlabel = "1", taillabel = "*"];
thumbnail -> thumbnail_size [headlabel = "1", taillabel = "*"];
}