This extension contains functions for generating graphs. See attached files for documentation on the graph notation. Related Links: Extension Overview, DekiScript Overview, Extension Demos.
Assembly: mindtouch.deki.services
SID: http://services.mindtouch.com/deki/draft/2007/06/graphviz
This service requires Deki Wiki 1.8.2 or later.
To enable this extension, follow these steps:
- Go to Service management in the Control Panel of your wiki.
- Under Add Service, click on Local, and select type Extension.
- Enter a description and the extension SID: http://services.mindtouch.com/deki/draft/2007/06/graphviz
- Add any additional configuration settings that are required by the extension (see below).
- Click on add service.
Configuration:
Before the Graphviz service can be used, it must be configured with the
locations of the required Graphviz applications. Graphviz applications
can be downloaded here. VM users with SSH access can simply type apt-get install graphviz (paths are all prefixed with /usr/bin/: e.g., /usr/bin/dot, /usr/bin/neato, etc.).
| Config Key | Description |
| dot-path | Path to dot application. |
| neato-path | Path to neato application. |
| twopi-path | Path to twopi application |
| circo-path | Path to circo application. |
Functions: - graphviz.circo
- graphviz.dot
- graphviz.neato
- graphviz.twopi
graphviz.circo(graph : str) : uri
Generate graph using CIRCO layout.
Parameters:
| Name | Type | Description |
graph
| str
| Graph description. |
Samples:
| Output |
| To generate a simple "Hello World" graph using CIRCO layout: {{ graphviz.circo("digraph G { Hello -> World }") }} | |  |
| To generate a state-transition diagram using CIRCO layout: {{graphviz.circo("digraph finite_state_machine {
rankdir=LR;
size=\"8,5\"
node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
node [shape = circle];
LR_0 -> LR_2 [ label = \"SS(B)\" ];
LR_0 -> LR_1 [ label = \"SS(S)\" ];
LR_1 -> LR_3 [ label = \"S($end)\" ];
LR_2 -> LR_6 [ label = \"SS(b)\" ];
LR_2 -> LR_5 [ label = \"SS(a)\" ];
LR_2 -> LR_4 [ label = \"S(A)\" ];
LR_5 -> LR_7 [ label = \"S(b)\" ];
LR_5 -> LR_5 [ label = \"S(a)\" ];
LR_6 -> LR_6 [ label = \"S(b)\" ];
LR_6 -> LR_5 [ label = \"S(a)\" ];
LR_7 -> LR_8 [ label = \"S(b)\" ];
LR_7 -> LR_5 [ label = \"S(a)\" ];
LR_8 -> LR_6 [ label = \"S(b)\" ];
LR_8 -> LR_5 [ label = \"S(a)\" ];
}") }} | | |
| To an entity-relation diagram using CIRCO layout: {{graphviz.circo("graph ER {
node [shape=box]; course; institute; student;
node [shape=ellipse]; {node [label=\"name\"] name0; name1; name2;}
code; grade; number;
node [shape=diamond,style=filled,color=lightgrey]; \"C-I\"; \"S-C\"; \"S-I\";
name0 -- course;
code -- course;
course -- \"C-I\" [label=\"n\",len=1.00];
\"C-I\" -- institute [label=\"1\",len=1.00];
institute -- name1;
institute -- \"S-I\" [label=\"1\",len=1.00];
\"S-I\" -- student [label=\"n\",len=1.00];
student -- grade;
student -- name2;
student -- number;
student -- \"S-C\" [label=\"m\",len=1.00];
\"S-C\" -- course [label=\"n\",len=1.00];
}") }} | |  |
graphviz.dot(graph : str) : uri
Generate graph using DOT layout.
Parameters:
| Name | Type | Description |
graph
| str
| Graph description. |
Samples:
| Output |
| To generate a simple "Hello World" graph using DOT layout: {{ graphviz.dot("digraph G { Hello -> World }") }} | |  |
| To generate a state-transition diagram using DOT layout: {{graphviz.dot("digraph finite_state_machine {
rankdir=LR;
size=\"8,5\"
node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
node [shape = circle];
LR_0 -> LR_2 [ label = \"SS(B)\" ];
LR_0 -> LR_1 [ label = \"SS(S)\" ];
LR_1 -> LR_3 [ label = \"S($end)\" ];
LR_2 -> LR_6 [ label = \"SS(b)\" ];
LR_2 -> LR_5 [ label = \"SS(a)\" ];
LR_2 -> LR_4 [ label = \"S(A)\" ];
LR_5 -> LR_7 [ label = \"S(b)\" ];
LR_5 -> LR_5 [ label = \"S(a)\" ];
LR_6 -> LR_6 [ label = \"S(b)\" ];
LR_6 -> LR_5 [ label = \"S(a)\" ];
LR_7 -> LR_8 [ label = \"S(b)\" ];
LR_7 -> LR_5 [ label = \"S(a)\" ];
LR_8 -> LR_6 [ label = \"S(b)\" ];
LR_8 -> LR_5 [ label = \"S(a)\" ];
}") }} | | |
| To an entity-relation diagram using DOT layout: {{graphviz.dot("graph ER {
node [shape=box]; course; institute; student;
node [shape=ellipse]; {node [label=\"name\"] name0; name1; name2;}
code; grade; number;
node [shape=diamond,style=filled,color=lightgrey]; \"C-I\"; \"S-C\"; \"S-I\";
name0 -- course;
code -- course;
course -- \"C-I\" [label=\"n\",len=1.00];
\"C-I\" -- institute [label=\"1\",len=1.00];
institute -- name1;
institute -- \"S-I\" [label=\"1\",len=1.00];
\"S-I\" -- student [label=\"n\",len=1.00];
student -- grade;
student -- name2;
student -- number;
student -- \"S-C\" [label=\"m\",len=1.00];
\"S-C\" -- course [label=\"n\",len=1.00];
}") }} | |  |
graphviz.neato(graph : str) : uri
Generate graph using NEATO layout.
Parameters:
| Name | Type | Description |
graph
| str
| Graph description. |
Samples:
| Output |
| To generate a simple "Hello World" graph using NEATO layout: {{ graphviz.neato("digraph G { Hello -> World }") }} | |  |
| To generate a state-transition diagram using NEATO layout: {{graphviz.neato("digraph finite_state_machine {
rankdir=LR;
size=\"8,5\"
node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
node [shape = circle];
LR_0 -> LR_2 [ label = \"SS(B)\" ];
LR_0 -> LR_1 [ label = \"SS(S)\" ];
LR_1 -> LR_3 [ label = \"S($end)\" ];
LR_2 -> LR_6 [ label = \"SS(b)\" ];
LR_2 -> LR_5 [ label = \"SS(a)\" ];
LR_2 -> LR_4 [ label = \"S(A)\" ];
LR_5 -> LR_7 [ label = \"S(b)\" ];
LR_5 -> LR_5 [ label = \"S(a)\" ];
LR_6 -> LR_6 [ label = \"S(b)\" ];
LR_6 -> LR_5 [ label = \"S(a)\" ];
LR_7 -> LR_8 [ label = \"S(b)\" ];
LR_7 -> LR_5 [ label = \"S(a)\" ];
LR_8 -> LR_6 [ label = \"S(b)\" ];
LR_8 -> LR_5 [ label = \"S(a)\" ];
}") }} | | |
| To an entity-relation diagram using NEATO layout: {{graphviz.neato("graph ER {
node [shape=box]; course; institute; student;
node [shape=ellipse]; {node [label=\"name\"] name0; name1; name2;}
code; grade; number;
node [shape=diamond,style=filled,color=lightgrey]; \"C-I\"; \"S-C\"; \"S-I\";
name0 -- course;
code -- course;
course -- \"C-I\" [label=\"n\",len=1.00];
\"C-I\" -- institute [label=\"1\",len=1.00];
institute -- name1;
institute -- \"S-I\" [label=\"1\",len=1.00];
\"S-I\" -- student [label=\"n\",len=1.00];
student -- grade;
student -- name2;
student -- number;
student -- \"S-C\" [label=\"m\",len=1.00];
\"S-C\" -- course [label=\"n\",len=1.00];
}") }} | |  |
graphviz.twopi(graph : str) : uri
Generate graph using TWOPI layout.
Parameters:
| Name | Type | Description |
graph
| str
| Graph description. |
Samples:
| Output |
| To generate a simple "Hello World" graph using TWOPI layout: {{ graphviz.twopi("digraph G { Hello -> World }") }} | |  |
| To generate a state-transition diagram using TWOPI layout: {{graphviz.twopi("digraph finite_state_machine {
rankdir=LR;
size=\"8,5\"
node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
node [shape = circle];
LR_0 -> LR_2 [ label = \"SS(B)\" ];
LR_0 -> LR_1 [ label = \"SS(S)\" ];
LR_1 -> LR_3 [ label = \"S($end)\" ];
LR_2 -> LR_6 [ label = \"SS(b)\" ];
LR_2 -> LR_5 [ label = \"SS(a)\" ];
LR_2 -> LR_4 [ label = \"S(A)\" ];
LR_5 -> LR_7 [ label = \"S(b)\" ];
LR_5 -> LR_5 [ label = \"S(a)\" ];
LR_6 -> LR_6 [ label = \"S(b)\" ];
LR_6 -> LR_5 [ label = \"S(a)\" ];
LR_7 -> LR_8 [ label = \"S(b)\" ];
LR_7 -> LR_5 [ label = \"S(a)\" ];
LR_8 -> LR_6 [ label = \"S(b)\" ];
LR_8 -> LR_5 [ label = \"S(a)\" ];
}") }} | | |
| To an entity-relation diagram using TWOPI layout: {{graphviz.twopi("graph ER {
node [shape=box]; course; institute; student;
node [shape=ellipse]; {node [label=\"name\"] name0; name1; name2;}
code; grade; number;
node [shape=diamond,style=filled,color=lightgrey]; \"C-I\"; \"S-C\"; \"S-I\";
name0 -- course;
code -- course;
course -- \"C-I\" [label=\"n\",len=1.00];
\"C-I\" -- institute [label=\"1\",len=1.00];
institute -- name1;
institute -- \"S-I\" [label=\"1\",len=1.00];
\"S-I\" -- student [label=\"n\",len=1.00];
student -- grade;
student -- name2;
student -- number;
student -- \"S-C\" [label=\"m\",len=1.00];
\"S-C\" -- course [label=\"n\",len=1.00];
}") }} | |  |
I've been through a bit of a loop on this one: you need to add the config settings to the service - not to the control-panel->configuration page. It works well once you've done that :)
In other notes, the "graphviz" stuff does NOT show up on the Extensions list. I don't know if this means anything, but I thought I'd point it out. Any help in this is greatly appreciated.