Esquema
Un ei\_esquema
genera un esquema utilizando GraphViz.
Funcionamiento
En la configuración se debe suministrar una definición GraphViz, ver la documentación online de esta herramienta. Por ejemplo la siguiente es la definición del automata finito:
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)" ];
}
Una vez suministrado la definición el componente inserta el tag HTML correcto según el tipo de formato de salida, este tag referencia a un URL donde el mismo componente estará esperando. Ya en el nuevo pedido de página, a través del esquema de servicios de toba, se invoca al comando asociado (si es un grafo dirigido se utiliza dot sino neato), se toma la salida de este comando y se pasa la salida al browser.
Formatos
La salida común es utilizando un formato de imagen (png o gif), aunque es posible utilizar el formato SVG. Este formato permite que los nodos y arcos del esquema sean seleccionables (pudiendo incluir comportamientos javascript). El problema con este formato es que requiere diferentes requisitos según el navegador:
Firefox: Desde la versión 1.5 lo soporta sin necesidad de ningún plugin, tanto con el tag
<embed>
como con<object>
IE: No tiene soporte, se necesita un plugin de Adobe (sólo funciona bien con el tag
<embed>
, justo el que no es estandar...)Opera: Soporta un conjunto mínimo de cosas (no se puede incluír scripts) y sólo funciona con el tag
<object>
.
Ejemplo
Existe un ejemplo de esquema en el proyecto de Referencia