|Developed by||World Wide Web Consortium|
(September 1, 2015)
|Type of format||Markup language|
SCXML stands for State Chart XML: State Machine Notation for Control Abstraction. It is an XML-based markup language that provides a generic state-machine based execution environment based on Harel statecharts.
SCXML is able to describe complex state-machines. For example, it is possible to describe notations such as sub-states, parallel states, synchronization, or concurrency, in SCXML.
The objective of this standard is to genericize state diagram notations that are already used in other XML contexts. For example, it is expected that SCXML notations will replace the State machines notations used in the next CCXML 2.0 version (an XML standard designed to provide telephony support to VoiceXML). It could also be used as a multimodal control language in the Multimodal Interaction Activity.
One of the goals of this language is to make sure that the language is compatible with CCXML and that there is an easy path for existing CCXML scripts to be converted to SCXML without major changes to the programming model or document structure (for example, by using an XSL Transformation).
The current version of the specification was released by the W3C in September 2015.
According to the W3C State Chart XML (SCXML): State Machine Notation for Control Abstraction specification, SCXML is a general-purpose event-based state machine language that can be used in many ways, including:
- As a high-level dialog language controlling VoiceXML 3.0's encapsulated speech modules (voice form, voice picklist, etc.)
- As a voice application metalanguage, where in addition to VoiceXML 3.0 functionality, it may also control database access and business logic modules.
- As a multimodal control language in the MultiModal Interaction framework, combining VoiceXML 3.0 dialogs with dialogs in other modalities including keyboard and mouse, ink, vision, haptics, etc. It may also control combined modalities such as lipreading (combined speech recognition and vision) speech input with keyboard as fallback, and multiple keyboards for multi-user editing.
- As the state machine framework for a future version of CCXML.
- As an extended call center management language, combining CCXML call control functionality with computer-telephony integration for call centers that integrate telephone calls with computer screen pops, as well as other types of message exchange such as chats, instant messaging, etc.
- As a general process control language in other contexts not involving speech processing.
The W3C Voice Extensible Markup Language (VoiceXML) 3.0 specification includes State Chart and SCXML Representation to define functionality.
Truly multimodal applications should allow the user to communicate through the interface most suitable for the context of the interaction. Consider an application that has voice as well as the mobile phones display and keyboard as interfaces. The user will favor the most effective interface and can make a voice request to avoid excessive typing and then “click” on a list or map on the display instead of listening to long descriptions of available options. SCXML makes it easy to do several things in parallel, and the Interaction Manager SCXML application will maintain the synchronization between Voice and Visual dialogues.
The W3C document Authoring Applications for the Multimodal Architecture describes a multimodal system that implements the W3C Multimodal Architecture and gives an example of a simple multimodal application authored using various W3C markup languages, including SCXML, CCXML, VoiceXML 2.1 and HTML.
The SCXML file describing the transitions in this diagram is:
<?xml version="1.0" encoding="UTF-8"?> <scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" initial="ready"> <state id="ready"> <transition event="watch.start" target="running"/> </state> <state id="running"> <transition event="watch.split" target="paused"/> <transition event="watch.stop" target="stopped"/> </state> <state id="paused"> <transition event="watch.unsplit" target="running"/> <transition event="watch.stop" target="stopped"/> </state> <state id="stopped"> <transition event="watch.reset" target="ready"/> </state> </scxml>
(Apache Licensed, see on this page)
- scxmlcc An efficient scxml to C++ compiler.
- Apache Commons SCXML, a pure Java library to parse and execute SCXML diagrams
- JSSCxml a Web browser implementation under active development. Highly conformant, with good support for DOM Events. Only supports the ECMAScript datamodel.
- LXSC Lua XML StateChart interpreter - parses and executes SCXML state machines with a Lua data model.
- Qt SCXML Engine implemented in C++ as well and tightly integrated with their Signals and Slots concept.
The following implementations are inactive, i.e., the last change to their source code was made more than two years ago:
- Web interface to an experimental SCXML implementation in the Oz programming language
- PySCXML a Python-implementation. Supports a wide range of technologies, including websockets and SOAP. Highly standards-compliant. Also supports the ECMAScript datamodel. (last push 2013)
- The PySCXML Console a web-based interactive SCXML console for running and interacting with SCXML documents. Supports the ECMAScript datamodel.
- SCXML4Flex ActionScript/Flex partial port of PySCXML.
- SCXMLgui Java Visual Editor for SCXML.
- "State Chart XML (SCXML): State Machine Notation for Control Abstraction". World Wide Web Consortium. September 1, 2015. Retrieved 2016-03-02.