SCXML-tutorial

Contents Overview Examples Editor Forum

<state>

Video version

Holds the representation of a state.

state - atomic

<scxml name="Scxml" version="1.0" xmlns="http://www.w3.org/2005/07/scxml">
	<state id="StateAtomic"/>
</scxml>

Attribute 'id'

The identifier for this state.

Attribute 'initial'

The id of the default initial state (or states) for this state.

Example: 'State1' is specified as initial

state - initial 1

<scxml name="Scxml" version="1.0" xmlns="http://www.w3.org/2005/07/scxml">
	<state id="Work" initial="State1">
		<state id="State1">
			<onentry>
				<log expr="Hello!" label="State 1"/>
			</onentry>
			<transition event="Step" target="State2"/>
		</state>
		<state id="State2">
			<onentry>
				<log expr="Hello!" label="State 2"/>
			</onentry>
			<transition event="Step" target="State3"/>
		</state>
		<state id="State3">
			<onentry>
				<log expr="Hello!" label="State 3"/>
			</onentry>
			<transition event="Step" target="State1"/>
		</state>
	</state>
</scxml>

Output:

[Log] State 1: "Hello!"

Example: 'State3' is specified as initial

state - initial 2

<scxml name="Scxml" version="1.0" xmlns="http://www.w3.org/2005/07/scxml">
	<state id="Work" initial="State3">
		<state id="State1">
			<onentry>
				<log expr="Hello!" label="State 1"/>
			</onentry>
			<transition event="Step" target="State2"/>
		</state>
		<state id="State2">
			<onentry>
				<log expr="Hello!" label="State 2"/>
			</onentry>
			<transition event="Step" target="State3"/>
		</state>
		<state id="State3">
			<onentry>
				<log expr="Hello!" label="State 3"/>
			</onentry>
			<transition event="Step" target="State1"/>
		</state>
	</state>
</scxml>

Warning!

1. MUST NOT be specified in conjunction with the <initial> element. state - initial - warning 1

<scxml name="Scxml" version="1.0" xmlns="http://www.w3.org/2005/07/scxml">
	<state id="Work" initial="State1">
		<state id="State1">
			<onentry>
				<log expr="Hello!" label="State 1"/>
			</onentry>
			<transition event="Step" target="State2"/>
		</state>
		<state id="State2">
			<onentry>
				<log expr="Hello!" label="State 2"/>
			</onentry>
		</state>
		<initial>
			<transition target="State1"/>
		</initial>
	</state>
</scxml>

Output:

Issue (WARNING) at //state[@id="Work"]: State with initial attribute cannot have <initial> child

2. MUST NOT occur in atomic states.

<scxml name="Scxml" version="1.0" xmlns="http://www.w3.org/2005/07/scxml">
	<state id="StateAtomic" initial="StateXXX"/>
</scxml>

Output:

Issue (FATAL) at //state[@id="StateAtomic"]: Initial attribute has invalid target state with id 'StateXXX'

Atomic state

Has no <state>, <parallel> or <final> children.

state - atomic

Compound state

Has <state>, <parallel>, or <final> children (or a combination of these).

state - compaund - atomic

<scxml name="Scxml" version="1.0" xmlns="http://www.w3.org/2005/07/scxml">
	<state id="StateCompaund">
		<state id="StateAtomic"/>
	</state>
</scxml>

Default initial state

Specified by the 'initial' attribute or <initial> element, if either is present. Otherwise it is the state's first child state in document order.

Example 1

state - initial - default

<scxml name="Scxml" version="1.0" xmlns="http://www.w3.org/2005/07/scxml">
	<state id="Work" initial="State2">
		<state id="State1">
			<transition event="Step" target="State2"/>
		</state>
		<state id="State2">
			<onentry>
				<log expr="I am initial!" label="State 1"/>
			</onentry>
			<transition event="Step" target="State1"/>
		</state>
	</state>
</scxml>

Example 2

state - initial - default - document order

<scxml name="Scxml" version="1.0" xmlns="http://www.w3.org/2005/07/scxml">
	<state id="Work">
		<state id="State1">
			<onentry>
				<log expr="I am initial!" label="State 1"/>
			</onentry>
			<transition event="Step" target="State2"/>
		</state>
		<state id="State2">
			<transition event="Step" target="State1"/>
		</state>
	</state>
</scxml>

W3C IRP tests

Test 364

Definition: The default initial state(s) of a compound state are those specified by the 'initial' attribute or initial element, if either is present. Otherwise it is the state's first child state in document order. If a compound state is entered either as an initial state or as the target of a transition (i.e. and no descendent of it is specified), then the SCXML Processor MUST enter the default initial state(s) after it enters the parent state.

test364

TOP Contents Overview Examples Editor Forum