The ym JSON format
yasmine's model can be populated from a standardized JSON file. A yasmine model JSON (.ym) file has this structure:
{
"version":"2.0",
"event_list":[
{
"name":"",
"ID":0,
"priority":0
}
],
"state_machine": {
"transitions": [
{
"name": "",
"kind": "",
"source": "",
"target": "",
"event_name": [],
"guard": "",
"behavior": ""
}
],
"root": {
"name": "",
"type": "composite_state",
"regions": [
{
"name": "",
"vertices": [
{
"name": "",
"type": "",
"enter_behavior": "",
"do_behavior": "",
"exit_behavior": "",
"deferred_event_name": [],
"error_event": []
}
]
}
],
"pseudostates": [],
"enter_behavior": "",
"exit_behavior": "",
"deferred_event_name": []
}
},
"externals":[
{
"name": "",
"type": ""
}
]
}
Example
A small example populated with data:
{
"version":"2.0",
"event_list":[
{
"name":"E1",
"ID":1,
"priority":0
},
{
"name":"E2",
"ID":2,
"priority":0
}
],
"state_machine":{
"transitions":[
{
"event_name":[
],
"name":"transition1",
"kind":0,
"source":"root/main_region/Initial",
"target":"root/main_region/State1",
"guard":"",
"behavior":""
},
{
"event_name":[
],
"name":"transition2",
"kind":0,
"source":"root/main_region/State1/Region1S1/Initial_S1",
"target":"root/main_region/State1/Region1S1/State2",
"guard":"",
"behavior":""
},
{
"event_name":[
{
"name":"E1"
}
],
"name":"transition3",
"kind":0,
"source":"root/main_region/State1",
"target":"root/main_region/State2",
"guard":"",
"behavior":""
},
{
"event_name":[
],
"name":"transition4",
"kind":0,
"source":"root/main_region/State2",
"target":"root/main_region/State3",
"guard":"",
"behavior":""
}
],
"root":{
"name":"root",
"type":"composite_state",
"regions":[
{
"vertices":[
{
"name":"Initial",
"type":"initial_pseudostate"
},
{
"name":"State1",
"type":"composite_state",
"regions":[
{
"vertices":[
{
"name":"Initial_S1",
"type":"initial_pseudostate"
},
{
"name":"State2",
"type":"simple_state",
"do_behavior":"logic.do_work",
"enter_behavior":"logic.initialize_work",
"exit_behavior":"",
"deferred_event_name":[
],
"error_event":[
]
},
{
"name":"State3",
"type":"simple_state",
"do_behavior":"logic.start_process",
"enter_behavior":"",
"exit_behavior":"",
"deferred_event_name":[
],
"error_event":[
]
}
],
"name":"region1S1"
}
],
"pseudostates":[
],
"enter_behavior":"logic.print_start_message",
"exit_behavior":"logic.print_end_message",
"deferred_event_name":[
]
}
],
"name":"main_region"
}
],
"pseudostates":[
],
"enter_behavior":"",
"exit_behavior":"",
"deferred_event_name":[
]
}
},
"externals":[
{
"name":"State2",
"type":"simple_state"
},
{
"name":"State3",
"type":"simple_state"
}
]
}
Version
The "version" is the version of the model file (currently 2.0).
Name |
Type |
Explanation |
Allowed values |
version |
string |
version of model file |
2.0 |
Event list
"event_list" represent a list of event objects.
Event
An event is an object that will have a string name and an integer ID as properties.
Name |
Type |
Explanation |
Allowed values |
name |
string |
name |
no restriction |
ID |
int |
identification number |
int |
priority |
int |
priority of event |
int |
State machine
The "state_machine" object describes the state machine's elements and behaviors. There are two major sections: transitions and the state machine description itself.
Transitions
"Transitions" is an array of transition objects. Each object has these properties:
Name |
Type |
Explanation |
Allowed values |
name |
string |
name |
no restrictions |
kind |
string |
kind |
transition kind |
source |
string |
URI of the source vertex |
valid URI of a vertex |
target |
string |
URI of the target vertex |
valid URI of a vertex |
event_name |
array[string] |
list of events names for which the transition can be enabled |
valid event name |
guard |
string |
implementation to use for the guard |
implementation referrer |
behavior |
string |
implementation to use for the behavior |
implementation referrer |
Root
"root" is the object representing the state machine's outer composite state that contains all vertices. "root" always implicitly has the "composite_state" type.
For the descriptions of the properties refer to the "composite state" object, since the "root" is a composite state.
Composite state
A composite state object is owned by a region. The root state is an exception because the root does not have an owner.
The properties of a composite state are summarized in the next table.
Name |
Type |
Explanation |
Allowed values |
name |
string |
name |
No restriction. |
type |
string |
type |
composite_state |
regions |
array[region] |
list of regions belonging to the composite state |
region objects |
pseudostates |
array[pseudostates] |
list of pseudostates objects belonging to the composite state object |
|
enter_behavior |
string |
implementation to use for the enter behavior. |
implementation referrer |
exit_behavior |
string |
implementation to use for the exit behavior. |
implementation referrer |
deferred_event_name |
array[string] |
list of names of events that shall be deferred |
valid event name |
Region
A region object is owned by a composite state object and have the following properties:
Name |
Type |
Explanation |
Allowed values |
name |
string |
name |
no restrictions |
vertices |
array[vertex] |
list of vertices belonging to the region |
|
Simple state and async simple state
This objects have the same structure but the type is different for each.
Name |
Type |
Explanation |
Allowed values |
name |
string |
name |
no restrictions |
type |
string |
type |
one of the following vertex types:
|
enter_behavior |
string |
implementation to use for the enter behavior. |
implementation referrer |
do_behavior |
string |
implementation to use for the do behavior. |
implementation referrer |
exit_behavior |
string |
implementation to use for the exit behavior. |
implementation referrer |
deferred_event_name |
array[string] |
list of names of events that shall be deferred |
valid event name |
error_event |
array[event_names] |
list of names of events that are processed when an error occurs. |
valid event name |
Pseudostates and final state
Pseudostates and the final state share the same structure. They contain a name and a type. The type is a predetermined string.
Name |
Type |
Explanation |
Allowed values |
name |
string |
name |
no restrictions |
type |
string |
type |
one of the following vertex types:
|
Data types
Transition kind
-
external
-
local
-
internal
URI
The URI represents a chain of names as a string. The URI of an element consists of the names of all the object's ancestors, both regions and composite states, up to the root of the state machine - excluding the root. The names in the URI chain are separated by the '/' character.
Implementation referrer
An implementation referrer is a description of a call to a behavior or a guard. It can be a method call or a free function call.
In the following table a list of possible calls can be seen. 'foo' and 'bar' will be replaced with the user's desired method/function and object name. The object has to be visible in the scope of the state machine.
Call |
Explanation |
this->foo |
Call of method 'foo' of containing object. |
bar->foo |
Call of method 'foo' of object 'bar' via pointer. |
bar.foo |
Call of method 'foo' from object 'bar' via reference. |
bar::foo |
Call of static method 'foo' of class 'bar'. |
foo |
Call of free function 'foo'. |
Vertex type
Vertices can have one of the following types:
Vertex |
Type value |
Simple state |
simple_state |
Asynchronous simple state |
async_simple_state |
Composite state |
composite_state |
Final state |
final_state |
Initial pseudostate |
initial_pseudostate |
Terminate pseudostate |
terminate_pseudostate |
Fork |
fork |
Join |
join |
Junction |
junction |
Choice |
choice |
Entry point |
entry_point |
Exit_point |
exit_point |
Shallow history |
shallow_history |
Deep history |
deep_history |
Externals
"externals" is a list of vertices (states or pseudostates) that are not part of the state machine described in the model file. The external vertices normally belong to a "parent" state machine (i.e. this state machine is a sub state machine of another state machine). They can be used as source or target of transitions.
Name |
Type |
Explanation |
Allowed values |
name |
string |
name |
no restrictions |
type |
string |
type |
one of the following vertex types:
|