We import Graphviz dot as translated to json. Here we do their one example which hints at possibilities. graphviz ![]()
echo 'digraph { a->b }' | dot -Tdot_json | pbcopy
{
"name": "%3",
"directed": true,
"strict": false,
"_subgraph_cnt": 0,
"objects": [
{
"_gvid": 0,
"name": "a",
"label": "\\N"
},
{
"_gvid": 1,
"name": "b",
"label": "\\N"
}
],
"edges": [
{
"_gvid": 0,
"tail": 0,
"head": 1
}
]
}
http://hsc.fed.wiki/assets/scripts/import-foreign-json.html HEIGHT 240
Add code here to extract nodes and relations from _json_ and add them to _graph_. Remember node ids in _nids_.
json.objects.forEach(n => { const type = n._gvid < json._subgraph_cnt ? 'Cluster' : 'Node' graph.addNode(type,{name:n.name}) })
json.edges.forEach(e => { const type = e.tail < json._subgraph_cnt ? 'Edge' : 'Child' graph.addRel('Edge',e.head,e.tail) }) json.objects.forEach(n => { if(n._gvid < json._subgraph_cnt) { n.nodes.forEach(s => graph.addRel('Child', n._gvid, s)) n.edges.forEach(s => graph.addRel('Child', n._gvid, s)) n.subgraphs?.forEach(e => graph.addRel('Child',n._gvid, e)) } })
digraph { layout = dot; overlap = false; splines=true node [shape=box style=filled fillcolor=gold] rankdir=LR node [fillcolor=palegreen] 0 [label="Node\na" tooltip="name: a"] 1 [label="Node\nb" tooltip="name: b"] 1->0 [label="Edge" labeltooltip=""] }
We extend import to handle Graphviz Clusters
{
"name": "%3",
"directed": false,
"strict": false,
"_subgraph_cnt": 3,
"objects": [
{
"name": "clusterX",
"_gvid": 0,
"subgraphs": [
1
],
"nodes": [
4,5,6,7
],
"edges": [
1,2
]
},
{
"name": "clusterZ",
"_gvid": 1,
"nodes": [
6,7
],
"edges": [
2
]
},
{
"name": "clusterY",
"_gvid": 2,
"nodes": [
8,9
],
"edges": [
4
]
},
{
"_gvid": 3,
"name": "e",
"label": "\\N"
},
{
"_gvid": 4,
"name": "a",
"label": "\\N"
},
{
"_gvid": 5,
"name": "b",
"label": "\\N"
},
{
"_gvid": 6,
"name": "C",
"label": "\\N"
},
{
"_gvid": 7,
"name": "D",
"label": "\\N"
},
{
"_gvid": 8,
"name": "d",
"label": "\\N"
},
{
"_gvid": 9,
"name": "f",
"label": "\\N"
},
{
"_gvid": 10,
"name": "clusterY",
"label": "\\N"
},
{
"_gvid": 11,
"name": "clusterZ",
"label": "\\N"
}
],
"edges": [
{
"_gvid": 1,
"tail": 4,
"head": 5
},
{
"_gvid": 2,
"tail": 6,
"head": 7
},
{
"_gvid": 4,
"tail": 8,
"head": 9
},
{
"_gvid": 3,
"tail": 8,
"head": 7
},
{
"_gvid": 0,
"tail": 3,
"head": 10
},
{
"_gvid": 5,
"tail": 11,
"head": 10
}
]
}