<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.w3.org/2003/04/emma"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified"
           xmlns:emma="http://www.w3.org/2003/04/emma"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:annotation>
      <xs:documentation>
      EMMA 1.0 schema (20050830)
      </xs:documentation>
   </xs:annotation>
   <xs:annotation>
      <xs:documentation>
      Copyright 1998-2005 W3C (MIT, ERCIM, Keio),
      All Rights Reserved. Permission to use, copy,
      modify and distribute the EMMA schema and its
      accompanying documentation for any purpose and
      without fee is hereby granted in perpetuity,
      provided that the above copyright notice and this
      paragraph appear in all copies. The copyright
      holders make no representation about the suitability
      of the schema for any purpose. It is provided
      "as is" without expressed or implied warranty.
      </xs:documentation>
   </xs:annotation>
   <xs:annotation>
      <xs:documentation>
      EMMA element reference annotations
      </xs:documentation>
   </xs:annotation>
   <xs:attribute name="grammar-ref" type="xs:IDREF"/>
   <xs:attribute name="model-ref" type="xs:IDREF"/>
   <xs:attribute name="endpoint-info-ref" type="xs:IDREF"/>
   <xs:annotation>
      <xs:documentation>
      endpoint annotations
      </xs:documentation>
   </xs:annotation>
   <xs:attribute name="endpoint-pair-ref" type="xs:anyURI"/>
   <xs:attribute name="service-name" type="xs:string"/>
   <xs:attribute name="message-id" type="xs:anyURI"/>
   <xs:attribute name="port-num" type="xs:nonNegativeInteger"/>
   <xs:attribute name="port-type" type="xs:QName"/>
   <xs:attribute name="endpoint-address" type="xs:anyURI"/>
   <xs:attribute name="endpoint-role">
      <xs:simpleType>
         <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="source"/>
            <xs:enumeration value="sink"/>
            <xs:enumeration value="reply-to"/>
            <xs:enumeration value="router"/>
         </xs:restriction>
      </xs:simpleType>
   </xs:attribute>
   <xs:annotation>
      <xs:documentation>
      cost annotation
      </xs:documentation>
   </xs:annotation>
   <xs:attribute name="cost">
      <xs:simpleType>
         <xs:restriction base="xs:decimal">
            <xs:minInclusive value="0.0"/>
            <xs:maxInclusive value="10000000"/>
         </xs:restriction>
      </xs:simpleType>
   </xs:attribute>
   <xs:annotation>
      <xs:documentation>
      hook annotation for composite integration
      </xs:documentation>
   </xs:annotation>
   <xs:attribute name="hook" type="xs:string"/>
   <xs:annotation>
      <xs:documentation>
      medium, mode, and function annotations
      </xs:documentation>
   </xs:annotation>
   <xs:attribute name="verbal" type="xs:boolean"/>
   <xs:attribute name="function" type="xs:string"/>
   <xs:attribute name="mode" type="xs:string"/>
   <xs:attribute name="medium">
      <xs:simpleType>
         <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="acoustic"/>
            <xs:enumeration value="tactile"/>
            <xs:enumeration value="visual"/>
         </xs:restriction>
      </xs:simpleType>
   </xs:attribute>
   <xs:annotation>
      <xs:documentation>
      timestamp annotations
      </xs:documentation>
   </xs:annotation>
   <xs:attribute name="duration" type="xs:nonNegativeInteger" default="0"/>
   <xs:attribute name="offset-to-start" type="xs:integer" default="0"/>
   <xs:attribute name="time-ref-anchor-point" default="start">
      <xs:simpleType>
         <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="start"/>
            <xs:enumeration value="end"/>
         </xs:restriction>
      </xs:simpleType>
   </xs:attribute>
   <xs:attribute name="time-ref-uri" type="xs:anyURI"/>
   <xs:attribute name="start" type="xs:unsignedLong"/>
   <xs:attribute name="end" type="xs:unsignedLong"/>
   <xs:attribute name="source" type="xs:anyURI"/>
   <xs:attribute name="confidence">
      <xs:simpleType>
         <xs:restriction base="xs:decimal">
            <xs:minInclusive value="0.0"/>
            <xs:maxInclusive value="1.0"/>
         </xs:restriction>
      </xs:simpleType>
   </xs:attribute>
   <xs:attribute name="media-type" type="xs:string"/>
   <xs:attribute name="signal" type="xs:anyURI"/>
   <xs:attribute name="lang" type="xs:language"/>
   <xs:attribute name="uninterpreted" type="xs:boolean"/>
   <xs:attribute name="no-input" type="xs:boolean"/>
   <xs:attribute name="process" type="xs:anyURI"/>
   <xs:attribute name="tokens" type="xs:string"/>
   <xs:annotation>
      <xs:documentation>
      endpoint definition
      </xs:documentation>
   </xs:annotation>
   <xs:complexType name="endpoint">
      <xs:sequence>
         <xs:choice maxOccurs="unbounded" minOccurs="1">
            <xs:any namespace="##other" processContents="lax"/>
         </xs:choice>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID" use="required"/>
      <xs:attribute ref="emma:endpoint-role"/>
      <xs:attribute ref="emma:endpoint-address"/>
      <xs:attribute ref="emma:message-id"/>
      <xs:attribute ref="emma:port-num"/>
      <xs:attribute ref="emma:port-type"/>
      <xs:attribute ref="emma:endpoint-pair-ref"/>
      <xs:attribute ref="emma:service-name"/>
      <xs:attribute ref="emma:media-type"/>
      <xs:attribute ref="emma:medium"/>
      <xs:attribute ref="emma:mode"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      endpoint-info definition
      </xs:documentation>
   </xs:annotation>
   <xs:complexType name="endpoint-info">
      <xs:sequence>
         <xs:choice maxOccurs="unbounded" minOccurs="1">
            <xs:element ref="emma:endpoint"/>
         </xs:choice>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID" use="required"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      info definition
      </xs:documentation>
   </xs:annotation>
   <xs:complexType name="info">
      <xs:sequence>
         <xs:choice maxOccurs="unbounded" minOccurs="1">
            <xs:any namespace="##other" processContents="lax"/>
         </xs:choice>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      grammar definition
      </xs:documentation>
   </xs:annotation>
   <xs:attributeGroup name="grammar.attribs">
      <xs:attribute name="id" type="xs:ID" use="required"/>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
   </xs:attributeGroup>
   <xs:complexType name="grammar">
      <xs:attributeGroup ref="emma:grammar.attribs"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      derivation definition
      </xs:documentation>
   </xs:annotation>
   <xs:complexType name="derivation">
      <xs:sequence>
         <xs:choice maxOccurs="unbounded" minOccurs="1">
            <xs:element ref="emma:interpretation"/>
            <xs:element ref="emma:one-of"/>
            <xs:element ref="emma:sequence"/>
            <xs:element ref="emma:group"/>
         </xs:choice>
      </xs:sequence>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      derived-from definition
      </xs:documentation>
   </xs:annotation>
   <xs:attributeGroup name="derived-from.attribs">
      <xs:attribute name="resource" type="xs:anyURI" use="required"/>
      <xs:attribute name="composite" type="xs:boolean"/>
   </xs:attributeGroup>
   <xs:complexType name="derived-from">
      <xs:attributeGroup ref="emma:derived-from.attribs"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      model definition
      </xs:documentation>
   </xs:annotation>
   <xs:attributeGroup name="model.attribs">
      <xs:attribute name="id" type="xs:ID" use="required"/>
      <xs:attribute name="ref" type="xs:anyURI"/>
   </xs:attributeGroup>
   <xs:complexType name="model">
      <xs:sequence>
         <xs:choice maxOccurs="unbounded" minOccurs="0">
            <xs:any namespace="##other" processContents="lax"/>
         </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="emma:model.attribs"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      literal definition
      </xs:documentation>
   </xs:annotation>
   <xs:complexType name="literal" mixed="true"/>
   <xs:annotation>
      <xs:documentation>
      lattice definition
      </xs:documentation>
   </xs:annotation>
   <xs:attributeGroup name="node.attribs">
      <xs:attribute name="node-number" type="xs:nonNegativeInteger" use="required"/>
      <xs:attribute ref="emma:start"/>
      <xs:attribute ref="emma:end"/>
      <xs:attribute ref="emma:offset-to-start"/>
      <xs:attribute ref="emma:confidence"/>
      <xs:attribute ref="emma:cost"/>
   </xs:attributeGroup>
   <xs:complexType name="node">
      <xs:sequence>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:info"/>
         </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="emma:node.attribs"/>
   </xs:complexType>
   <xs:attributeGroup name="arc.attribs">
      <xs:attribute name="from" type="xs:nonNegativeInteger" use="required"/>
      <xs:attribute name="to" type="xs:nonNegativeInteger" use="required"/>
      <xs:attribute ref="emma:start"/>
      <xs:attribute ref="emma:end"/>
      <xs:attribute ref="emma:offset-to-start"/>
      <xs:attribute ref="emma:duration"/>
      <xs:attribute ref="emma:confidence"/>
      <xs:attribute ref="emma:cost"/>
      <xs:attribute ref="emma:lang"/>
      <xs:attribute ref="emma:medium"/>
      <xs:attribute ref="emma:mode"/>
      <xs:attribute ref="emma:source"/>
   </xs:attributeGroup>
   <xs:complexType name="arc" mixed="true">
      <xs:sequence>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:any namespace="##other" processContents="lax"/>
         </xs:choice>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:info"/>
         </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="emma:arc.attribs"/>
   </xs:complexType>
   <xs:attributeGroup name="lattice.attribs">
      <xs:attribute name="initial" type="xs:nonNegativeInteger" use="required"/>
      <xs:attribute name="final" use="required">
         <xs:simpleType>
            <xs:list itemType="xs:nonNegativeInteger"/>
         </xs:simpleType>
      </xs:attribute>
      <xs:attribute ref="emma:time-ref-uri"/>
      <xs:attribute ref="emma:time-ref-anchor-point"/>
   </xs:attributeGroup>
   <xs:complexType name="lattice">
      <xs:sequence>
         <xs:choice maxOccurs="unbounded" minOccurs="1">
            <xs:element ref="emma:arc"/>
         </xs:choice>
         <xs:choice maxOccurs="unbounded" minOccurs="0">
            <xs:element ref="emma:node"/>
         </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="emma:lattice.attribs"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      group annotations
      </xs:documentation>
   </xs:annotation>
   <xs:attributeGroup name="group.attribs">
      <xs:attribute ref="emma:tokens"/>
      <xs:attribute ref="emma:process"/>
      <xs:attribute ref="emma:lang"/>
      <xs:attribute ref="emma:signal"/>
      <xs:attribute ref="emma:media-type"/>
      <xs:attribute ref="emma:confidence"/>
      <xs:attribute ref="emma:source"/>
      <xs:attribute ref="emma:start"/>
      <xs:attribute ref="emma:end"/>
      <xs:attribute ref="emma:time-ref-uri"/>
      <xs:attribute ref="emma:time-ref-anchor-point"/>
      <xs:attribute ref="emma:offset-to-start"/>
      <xs:attribute ref="emma:duration"/>
      <xs:attribute ref="emma:medium"/>
      <xs:attribute ref="emma:mode"/>
      <xs:attribute ref="emma:function"/>
      <xs:attribute ref="emma:verbal"/>
      <xs:attribute ref="emma:cost"/>
      <xs:attribute ref="emma:grammar-ref"/>
      <xs:attribute ref="emma:endpoint-info-ref"/>
      <xs:attribute ref="emma:model-ref"/>
   </xs:attributeGroup>
   <xs:annotation>
      <xs:documentation>
      sequence definition
      </xs:documentation>
   </xs:annotation>
   <xs:group name="sequence.class">
      <xs:sequence>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:info"/>
         </xs:choice>
         <xs:choice maxOccurs="unbounded" minOccurs="0">
            <xs:element ref="emma:derived-from"/>
         </xs:choice>
         <xs:choice maxOccurs="unbounded" minOccurs="1">
            <xs:element ref="emma:interpretation"/>
            <xs:element ref="emma:one-of"/>
            <xs:element ref="emma:group"/>
            <xs:element ref="emma:sequence"/>
         </xs:choice>
      </xs:sequence>
   </xs:group>
   <xs:complexType name="sequence">
      <xs:group ref="emma:sequence.class"/>
      <xs:attribute name="id" type="xs:ID" use="required"/>
      <xs:attributeGroup ref="emma:group.attribs"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      group-info definition
      </xs:documentation>
   </xs:annotation>
   <xs:attributeGroup name="group-info.attribs">
      <xs:attribute name="ref" type="xs:anyURI"/>
   </xs:attributeGroup>
   <xs:complexType name="group-info">
      <xs:sequence>
         <xs:choice maxOccurs="unbounded" minOccurs="0">
            <xs:any namespace="##other" processContents="lax"/>
         </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="emma:group-info.attribs"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      group definition
      </xs:documentation>
   </xs:annotation>
   <xs:group name="group.class">
      <xs:sequence>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:group-info"/>
         </xs:choice>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:info"/>
         </xs:choice>
         <xs:choice maxOccurs="unbounded" minOccurs="0">
            <xs:element ref="emma:derived-from"/>
         </xs:choice>
         <xs:choice maxOccurs="unbounded" minOccurs="1">
            <xs:element ref="emma:interpretation"/>
            <xs:element ref="emma:one-of"/>
            <xs:element ref="emma:group"/>
            <xs:element ref="emma:sequence"/>
         </xs:choice>
      </xs:sequence>
   </xs:group>
   <xs:complexType name="group">
      <xs:group ref="emma:group.class"/>
         <xs:attribute name="id" type="xs:ID" use="required"/>
         <xs:attributeGroup ref="emma:group.attribs"/>
      </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      one-of definition
      </xs:documentation>
   </xs:annotation>
   <xs:group name="one-of.class">
      <xs:sequence>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:info"/>
         </xs:choice>
         <xs:choice maxOccurs="unbounded" minOccurs="0">
            <xs:element ref="emma:derived-from"/>
         </xs:choice>
         <xs:choice maxOccurs="unbounded" minOccurs="1">
            <xs:element ref="emma:interpretation"/>
            <xs:element ref="emma:one-of"/>
            <xs:element ref="emma:group"/>
            <xs:element ref="emma:sequence"/>
         </xs:choice>
      </xs:sequence>
   </xs:group>
   <xs:complexType name="one-of">
      <xs:group ref="emma:one-of.class"/>
      <xs:attribute name="id" type="xs:ID" use="required"/>
      <xs:attributeGroup ref="emma:group.attribs"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      interpretation definition
      </xs:documentation>
   </xs:annotation>
   <xs:annotation>
      <xs:documentation>
      interpretation annotations
      </xs:documentation>
   </xs:annotation>
   <xs:attributeGroup name="interpretation.attribs">
      <xs:attributeGroup ref="emma:group.attribs"/>
      <xs:attribute ref="emma:no-input"/>
      <xs:attribute ref="emma:uninterpreted"/>
   </xs:attributeGroup>
   <xs:group name="interpretation.class">
      <xs:sequence>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:info"/>
         </xs:choice>
         <xs:choice maxOccurs="unbounded" minOccurs="0">
            <xs:element ref="emma:derived-from"/>
         </xs:choice>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:lattice"/>
            <xs:element ref="emma:literal"/>
            <xs:any namespace="##other" processContents="lax" maxOccurs="unbounded"/>
         </xs:choice>
      </xs:sequence>
   </xs:group>
   <xs:complexType name="interpretation">
      <xs:group ref="emma:interpretation.class"/>
      <xs:attribute name="id" type="xs:ID" use="required"/>
      <xs:attributeGroup ref="emma:interpretation.attribs"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      emma definition
      </xs:documentation>
   </xs:annotation>
   <xs:group name="emma.class">
      <xs:annotation>
         <xs:documentation>
         emma content model
         </xs:documentation>
      </xs:annotation>
      <xs:sequence>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:derivation"/>
         </xs:choice>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:info"/>
         </xs:choice>
         <xs:choice maxOccurs="unbounded" minOccurs="0">
            <xs:element ref="emma:grammar"/>
            <xs:element ref="emma:model"/>
            <xs:element ref="emma:endpoint-info"/>
         </xs:choice>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:interpretation"/>
            <xs:element ref="emma:one-of"/>
            <xs:element ref="emma:group"/>
            <xs:element ref="emma:sequence"/>
         </xs:choice>
      </xs:sequence>
   </xs:group>
   <xs:complexType name="emma">
      <xs:annotation>
         <xs:documentation>
         emma content model and root attributes
         </xs:documentation>
      </xs:annotation>
      <xs:group ref="emma:emma.class"/>
      <xs:attribute name="version" type="xs:string" use="required"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      EMMA elements
      </xs:documentation>
   </xs:annotation>
   <xs:element name="endpoint" type="emma:endpoint"/>
   <xs:element name="endpoint-info" type="emma:endpoint-info"/>
   <xs:element name="info" type="emma:info"/>
   <xs:element name="grammar" type="emma:grammar"/>
   <xs:element name="derivation" type="emma:derivation"/>
   <xs:element name="derived-from" type="emma:derived-from"/>
   <xs:element name="model" type="emma:model"/>
   <xs:element name="literal" type="emma:literal"/>
   <xs:element name="node" type="emma:node"/>
   <xs:element name="arc" type="emma:arc"/>
   <xs:element name="lattice" type="emma:lattice"/>
   <xs:element name="sequence" type="emma:sequence"/>
   <xs:element name="group-info" type="emma:group-info"/>
   <xs:element name="group" type="emma:group"/>
   <xs:element name="one-of" type="emma:one-of"/>
   <xs:element name="interpretation" type="emma:interpretation"/>
   <xs:element name="emma" type="emma:emma"/>
</xs:schema>
