<?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, xpath profile.
		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 Schema Driver file for SCXML 1.0, xpath profile

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

        SCXML 1.0 includes the following Modules
            SCXML core module
            SCXML data module
            SCXML external module
		</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-datatypes.xsd">
		<xsd:annotation>
			<xsd:documentation>
				This includes brings in the common data types for SCXML
		    </xsd:documentation>
		</xsd:annotation>
	</xsd:include>

	<xsd:include schemaLocation="scxml-attribs.xsd">
		<xsd:annotation>
			<xsd:documentation>
				This includes brings in the common attributes for SCXML.
			</xsd:documentation>
		</xsd:annotation>
	</xsd:include>

	<xsd:redefine schemaLocation="scxml-module-data.xsd">
		<xsd:annotation>
			<xsd:documentation>
				This imports the data module for SCXML and redefines the following.
					[1] Redefines assign attribute group to allow dataid
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attributeGroup name="scxml.assign.attlist">
			<xsd:attributeGroup ref="scxml.assign.attlist"/>
			<xsd:attribute name="type" type="AssignType.datatype" default="replacechildren"/>
			<xsd:attribute name="attr" type="xsd:NMTOKEN"/>
		</xsd:attributeGroup>
	</xsd:redefine>

	<xsd:redefine schemaLocation="scxml-module-external.xsd">
		<xsd:annotation>
			<xsd:documentation>
				This imports the external module for SCXML and redefines the following.
					[1] Redefines send and invoke mix group to allow 
						param
					[2] Redefines finalize mix group to allow: 
						executable content 
			    </xsd:documentation>
		</xsd:annotation>
		<xsd:group name="scxml.send.mix">
			<xsd:choice>
				<xsd:group ref="scxml.send.mix"/>
				<xsd:element ref="param" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:choice>
		</xsd:group>
		<xsd:group name="scxml.invoke.mix">
			<xsd:choice>
				<xsd:group ref="scxml.invoke.mix"/>
				<xsd:element ref="param" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:choice>
		</xsd:group>
		<xsd:group name="scxml.finalize.mix">
			<xsd:choice>
				<xsd:group ref="scxml.finalize.mix"/>
				<xsd:group ref="scxml.core.executablecontent"/>
			</xsd:choice>
		</xsd:group>
	</xsd:redefine>

	<xsd:include schemaLocation="scxml-contentmodels.xsd">
		<xsd:annotation>
			<xsd:documentation>
				This includes the common content models. 
		    </xsd:documentation>
		</xsd:annotation>
	</xsd:include>
	<xsd:redefine schemaLocation="scxml-module-core.xsd">
		<xsd:annotation>
			<xsd:documentation>
				This imports the core module for SCXML and redefines the following.
					[1] Redefines executable content to allow 
						send, assign, validate, and cancel elements
					[2] Redefines state and parallel mix group to allow 
						invoke
						datamodel
					[3] Redefines scxml group to allow 
						datamodel
			    </xsd:documentation>
		</xsd:annotation>
		<xsd:group name="scxml.core.executablecontent">
			<xsd:choice>
				<xsd:group ref="scxml.core.executablecontent"/>
				<xsd:element ref="send"/>
				<xsd:element ref="assign"/>
				<xsd:element ref="validate"/>
				<xsd:element ref="cancel"/>
			</xsd:choice>
		</xsd:group>
		<xsd:group name="scxml.scxml.mix">
			<xsd:choice>
				<xsd:group ref="scxml.scxml.mix"/>
				<xsd:element ref="datamodel" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:choice>
		</xsd:group>
		<xsd:group name="scxml.state.mix">
			<xsd:choice>
				<xsd:group ref="scxml.state.mix"/>
				<xsd:element ref="datamodel" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element ref="invoke" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:choice>
		</xsd:group>
		<xsd:group name="scxml.parallel.mix">
			<xsd:choice>
				<xsd:group ref="scxml.parallel.mix"/>
				<xsd:element ref="datamodel" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element ref="invoke" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:choice>
		</xsd:group>
		<xsd:group name="scxml.donedata.mix">
			<xsd:choice>
				<xsd:group ref="scxml.donedata.mix"/>
				<xsd:element ref="param" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:choice>
		</xsd:group>
		<xsd:group name="scxml.raise.mix">
			<xsd:choice>
				<xsd:group ref="scxml.raise.mix"/>
				<xsd:element ref="param" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:choice>
		</xsd:group>
	</xsd:redefine>
</xsd:schema>
