<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:mcml="http://www.itu.int/xml-namespace/itu-t/h.625/MCML/"          
	targetNamespace="http://www.itu.int/xml-namespace/itu-t/h.625/MCML/" 
	elementFormDefault="qualified" 
	attributeFormDefault="unqualified">
	<xs:element name="MCML">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="User"/>
				<xs:element ref="Server" maxOccurs="unbounded"/>
				<xs:element ref="History" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="Version" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="User">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Transmitter"/>
				<xs:element ref="Receiver" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Transmitter">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Device"/>
				<xs:element ref="UserProfile" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Device">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Location">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="URI"/>
							<xs:element name="GlobalPosition" minOccurs="0">
								<xs:complexType>
									<xs:attributeGroup ref="Location"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:attributeGroup name="Location">
		<xs:attribute name="Longitude" type="xs:float" use="required"/>
		<xs:attribute name="Latitude" type="xs:float" use="required"/>
	</xs:attributeGroup>
	<xs:element name="UserProfile">
		<xs:complexType>
			<xs:attributeGroup ref="Profile"/>
		</xs:complexType>
	</xs:element>
	<xs:attributeGroup name="Profile">
		<xs:attribute name="ID" type="xs:string" use="required"/>
		<xs:attribute name="Age" type="xs:int" use="optional"/>
		<xs:attribute name="Gender" type="xs:string" use="optional" fixed='"female", "male"'/>
	</xs:attributeGroup>
	<xs:element name="Receiver">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Device"/>
				<xs:element ref="UserProfile" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Server">
		<xs:complexType>
			<xs:choice>
				<xs:element ref="Request" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation> </xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="Response">
					<xs:annotation>
						<xs:documentation> </xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:choice>
			<xs:attributeGroup ref="ServiceInfo"/>
		</xs:complexType>
	</xs:element>
	<xs:attributeGroup name="ServiceInfo">
		<xs:attribute name="Service" type="xs:string" use="required"/>
		<xs:attribute name="ProcessOrder" type="xs:int" use="required"/>
	</xs:attributeGroup>
	<xs:element name="Request">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Routing"/>
				<xs:element ref="InputUserProfile" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="TargetOutput" minOccurs="0"/>
				<xs:element ref="Input" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Response">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Routing"/>
				<xs:element ref="Output" maxOccurs="unbounded"/>
				<xs:element ref="Error"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Error">
		<xs:complexType>
			<xs:sequence>
				<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="Code" type="xs:string" use="required"/>
			<xs:attribute name="Service" type="xs:string" use="required"/>
			<xs:attribute name="Message" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="Routing">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="From">
					<xs:complexType>
						<xs:attribute name="URI" type="xs:string" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="To" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attribute name="URI" type="xs:string" use="required"/>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="InputUserProfile">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="InputModality" minOccurs="0">
					<xs:annotation>
						<xs:documentation> </xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
			<xs:attributeGroup ref="Profile"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="InputModality">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Speaking" minOccurs="0">
					<xs:complexType>
						<xs:sequence>
							<xs:element ref="Language"/>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="Writing" minOccurs="0">
					<xs:complexType>
						<xs:sequence>
							<xs:element ref="Language"/>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="Signing" minOccurs="0">
					<xs:complexType>
						<xs:sequence>
							<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Language">
		<xs:complexType>
			<xs:attributeGroup ref="LanguageSkill"/>
		</xs:complexType>
	</xs:element>
	<xs:attributeGroup name="LanguageSkill">
		<xs:attribute name="ID" type="xs:string" use="required"/>
		<xs:attribute name="Dialect" type="xs:string" use="optional"/>
		<xs:attribute name="Fluency" type="xs:int" use="required"/>
	</xs:attributeGroup>
	<xs:element name="TargetOutput">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="HypothesisFormat" minOccurs="0">
					<xs:complexType>
						<xs:attribute name="NofN-best" use="required">
							<xs:annotation>
								<xs:documentation> </xs:documentation>
							</xs:annotation>
						</xs:attribute>
					</xs:complexType>
				</xs:element>
				<xs:element ref="LanguageType" minOccurs="0"/>
				<xs:element name="Option" minOccurs="0" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attribute name="Key" use="required"/>
						<xs:attribute name="Value" use="required"/>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="LanguageType">
		<xs:complexType>
			<xs:attribute name="ID" type="xs:string" use="required"/>
			<xs:attribute name="Dialect" type="xs:string" use="optional"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="Input">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Data">
					<xs:annotation>
						<xs:documentation> </xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="AttachedBinary" minOccurs="0" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attributeGroup ref="BinaryInfo"/>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:attributeGroup name="BinaryInfo">
		<xs:attribute name="DataID" use="required"/>
		<xs:attribute name="DataType" type="xs:string" use="optional"/>
		<xs:attribute name="ChannelID" type="xs:int" use="required"/>
	</xs:attributeGroup>
	<xs:element name="Data">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Text" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="Audio" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="Image" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="Video" minOccurs="0" maxOccurs="unbounded"/>
				<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Text">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ModelType" minOccurs="0"/>
				<xs:element ref="SentenceSequence" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attributeGroup ref="Channel"/>
		</xs:complexType>
	</xs:element>
	<xs:attributeGroup name="Channel">
		<xs:attribute name="ChannelID" type="xs:int" use="required"/>
		<xs:attribute name="BeginTimestamp" type="xs:dateTime" use="required"/>
		<xs:attribute name="EndTimestamp" type="xs:dateTime" use="required"/>
		<xs:attribute name="EndPoint" type="xs:dateTime" use="optional"/>
	</xs:attributeGroup>
	<xs:element name="ModelType">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Domain" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element name="Personality" minOccurs="0">
					<xs:complexType>
						<xs:attributeGroup ref="UserModel"/>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:attributeGroup name="UserModel">
		<xs:attribute name="ID" type="xs:string" use="required"/>
		<xs:attribute name="Age" type="xs:int" use="required"/>
		<xs:attribute name="Gender" type="xs:string" use="required" fixed='"female", "male"'/>
	</xs:attributeGroup>
	<xs:element name="SentenceSequence">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Sentence" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attributeGroup ref="TextMetaInfo"/>
			<xs:attribute name="N-bestRank" type="xs:int"/>
		</xs:complexType>
	</xs:element>
	<xs:attributeGroup name="TextMetaInfo">
		<xs:attribute name="Order" type="xs:int" use="required"/>
		<xs:attribute name="Score" type="xs:float" use="optional"/>
		<xs:attribute name="TimeStamp" type="xs:dateTime" use="optional"/>
		<xs:attribute name="BeginTime" type="xs:integer" use="optional"/>
		<xs:attribute name="EndTime" type="xs:integer" use="optional"/>
	</xs:attributeGroup>
	<xs:element name="Sentence">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Function" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element name="Surface" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attribute name="Delimiter" type="xs:string"/>
					</xs:complexType>
				</xs:element>
				<xs:element ref="Chunk" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attributeGroup ref="TextMetaInfo"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="Chunk">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Surface" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attributeGroup ref="Dictionary"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="POS" minOccurs="0" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attributeGroup ref="Dictionary"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="Pronunciation" minOccurs="0" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attributeGroup ref="Dictionary"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="IPA" minOccurs="0" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attributeGroup ref="Dictionary"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="Accent" minOccurs="0" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attributeGroup ref="Dictionary"/>
					</xs:complexType>
				</xs:element>
				<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attributeGroup ref="TextMetaInfo"/>
		</xs:complexType>
	</xs:element>
	<xs:attributeGroup name="Dictionary">
		<xs:attribute name="DictionaryID" type="xs:string"/>
		<xs:attribute name="EntryID" type="xs:string"/>
		<xs:anyAttribute namespace="##other"/>
	</xs:attributeGroup>
	<xs:element name="Audio">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ModelType" minOccurs="0"/>
				<xs:element ref="Signal" maxOccurs="unbounded"/>
				<xs:element name="Feature" minOccurs="0" maxOccurs="unbounded">
					<xs:complexType>
						<xs:anyAttribute/>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
			<xs:attributeGroup ref="Channel"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="Signal">
		<xs:complexType>
			<xs:attributeGroup ref="SignalInfo"/>
		</xs:complexType>
	</xs:element>
	<xs:attributeGroup name="SignalInfo">
		<xs:attribute name="AudioFormat" type="xs:string" use="required" fixed='"PCM", "ADPCM"'/>
		<xs:attribute name="SamplingRate" type="xs:int" use="required"/>
		<xs:attribute name="BitRate" type="xs:int" use="required"/>
		<xs:attribute name="Endian" type="xs:string" use="required" fixed='"big", "little"'/>
		<xs:attribute name="ChannelQty" type="xs:int" use="required"/>
		<xs:attribute name="ValueType" type="xs:string" use="required" fixed='"float", "integer"'/>
	</xs:attributeGroup>
	<xs:element name="Image">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ModelType" minOccurs="0"/>
				<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attributeGroup ref="Channel"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="Video">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ModelType" minOccurs="0"/>
				<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attributeGroup ref="Channel"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="Output">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Data"/>
				<xs:element name="AttachedBinary" minOccurs="0" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attributeGroup ref="BinaryInfo"/>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="History">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Request"/>
				<xs:element ref="Response"/>
			</xs:sequence>
			<xs:attributeGroup ref="ServiceInfo"/>
		</xs:complexType>
	</xs:element>
</xs:schema>