<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.w3.org/2005/07/scxml"
    xmlns="http://www.w3.org/2005/07/scxml"
    elementFormDefault="qualified">

	<xsd:annotation>
		<xsd:documentation>
			This is the XML Schema driver for SCXML 1.0.
			Please use this namespace for SCXML 1.0 elements:

			"http://www.w3.org/2005/07/scxml"

		</xsd:documentation>
		<xsd:documentation source="scxml-copyright.xsd"/>
	</xsd:annotation>
	<xsd:annotation>
		<xsd:documentation>
			This is the XML Schema driver file for SCXML 1.0.

			This schema:
			+ sets the namespace for SCXML 1.0
			+ imports external schemas (xml.xsd)
			+ imports SCXML common datatypes, attributes and content models
			+ imports modular schemas

        	SCXML 1.0 includes:
			+ SCXML core constructs
			+ SCXML executable content
			+ SCXML data model and manipulation
			+ SCXML external communications

			This schema is permissive such that it accomodates all
			datamodels, but validating documents may contain markup that
			is ignored in certain datamodels.
		</xsd:documentation>
	</xsd:annotation>

	<xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd">
		<xsd:annotation>
			<xsd:documentation>
				This import brings in the XML namespace attributes
				The XML attributes are used by various modules.
			</xsd:documentation>
		</xsd:annotation>
	</xsd:import>

<xsd:include schemaLocation="scxml-module-core.xsd">
		<xsd:annotation>
			<xsd:documentation>
				This imports the core elements for SCXML.
			    </xsd:documentation>
		</xsd:annotation>
	</xsd:include>
	
	<xsd:include schemaLocation="scxml-module-data.xsd">
		<xsd:annotation>
			<xsd:documentation>
				This imports the data modelelements for SCXML.
			</xsd:documentation>
		</xsd:annotation>
	</xsd:include>

	<xsd:include schemaLocation="scxml-module-external.xsd">
		<xsd:annotation>
			<xsd:documentation>
				This imports the external communications elements for SCXML. 
			</xsd:documentation>
		</xsd:annotation>
	</xsd:include>
	
<!-- the various elements of executable content are defined in the relevant modules. 
This gathers them up into a single type -->
	<xsd:group name="scxml.core.executablecontent">
		<xsd:choice>
	    <xsd:group ref="scxml.extra.content" minOccurs="0" maxOccurs="unbounded"/> 
			<xsd:element ref="raise"/> 
    	<xsd:element ref="if"/> 
			<xsd:element ref="foreach"/> 
			<xsd:element ref="send"/> 
			<xsd:element ref="script"/>
			<xsd:element ref="assign"/> 
			<xsd:element ref="log"/>
			<xsd:element ref="cancel"/>
	</xsd:choice>
	</xsd:group>

</xsd:schema>
