<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified"
           elementFormDefault="unqualified"
           targetNamespace="http://www.w3.org/2003/04/emma"
           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 (20041130)
      </xs:documentation>
   </xs:annotation>
   <xs:annotation>
      <xs:documentation>
      Copyright 1998-2004 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>
      property annotations
      </xs:documentation>
   </xs:annotation>
   <xs:attribute name="grammar-ref" type="xs:IDREF"/>
   <xs:attribute name="tokens" type="xs:string"/>
   <xs:attribute name="lang" type="xs:language"/>
   <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="source" type="xs:anyURI"/>
   <xs:attribute name="process" type="xs:anyURI"/>
   <xs:attribute name="no-input" type="xs:boolean"/>
   <xs:attribute name="uninterpreted" type="xs:boolean"/>
   <xs:attribute name="signal" type="xs:anyURI"/>
   <xs:attribute name="media-type" type="xs:string"/>
   <xs:annotation>
      <xs:documentation>
      endpoint annotations
      </xs:documentation>
   </xs:annotation>
   <xs:attribute name="endpoint-address" type="xs:anyURI"/>
   <xs:attribute name="port-num" type="xs:nonNegativeInteger"/>
   <xs:attribute name="port-type" type="xs:QName"/>
   <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:attribute name="message-id" type="xs:anyURI"/>
   <xs:attribute name="service-name" type="xs:string"/>
   <xs:attribute name="endpoint-pair-ref" type="xs:anyURI"/>
   <xs:attribute name="endpoint-info-ref" type="xs:IDREF"/>
   <xs:annotation>
      <xs:documentation>
      timestamp annotations
      </xs:documentation>
   </xs:annotation>
   <xs:attribute name="start" type="xs:unsignedLong"/>
   <xs:attribute name="end" type="xs:unsignedLong"/>
   <xs:attribute name="time-ref-uri" type="xs:anyURI"/>
   <xs:attribute default="start" name="time-ref-anchor">
      <xs:simpleType>
         <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="start"/>
            <xs:enumeration value="end"/>
         </xs:restriction>
      </xs:simpleType>
   </xs:attribute>
   <xs:attribute name="offset-to-start" type="xs:integer"/>
   <xs:attribute default="0" name="duration" type="xs:nonNegativeInteger"/>
   <xs:annotation>
      <xs:documentation>
      medium, mode, and function annotations
      </xs:documentation>
   </xs:annotation>
   <xs:attribute name="medium" type="xs:string"/>
   <xs:attribute name="mode" type="xs:string"/>
   <xs:attribute name="function" type="xs:string"/>
   <xs:attribute name="verbal" type="xs:boolean"/>
   <xs:annotation>
      <xs:documentation>
      hook for composite integration
      </xs:documentation>
   </xs:annotation>
   <xs:attribute name="hook" type="xs:string"/>
   <xs:annotation>
      <xs:documentation>
      cost
      </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>
      group annotations
      </xs:documentation>
   </xs:annotation>
   <xs:attributeGroup name="group.attribs">
      <xs:attribute ref="emma:message-id"/>
      <xs:attribute ref="emma:service-name"/>
      <xs:attribute ref="emma:endpoint-info-ref"/>   
      <xs:attribute ref="emma:grammar-ref"/>
      <xs:attribute ref="emma:tokens"/>
      <xs:attribute ref="emma:lang"/>
      <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"/>
      <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:attributeGroup>
   <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:process"/>
      <xs:attribute ref="emma:no-input"/>
      <xs:attribute ref="emma:uninterpreted"/>
      <xs:attribute ref="emma:signal"/>
      <xs:attribute ref="emma:media-type"/>
   </xs:attributeGroup>
   <xs:attributeGroup name="lattice.attribs">
      <xs:attribute name="initial" type="xs:nonNegativeInteger" use="required"/>
      <xs:attribute name="final" type="xs:nonNegativeInteger" use="required"/>
   </xs:attributeGroup>
   <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"/>
      <xs:attribute ref="emma:endpoint-address"/>
      <xs:attribute ref="emma:endpoint-role"/>      
      <xs:attribute ref="emma:port-num"/>
      <xs:attribute ref="emma:port-type"/>
      <xs:attribute ref="emma:message-id"/>
      <xs:attribute ref="emma:service-name"/>
      <xs:attribute ref="emma:endpoint-pair-ref"/>
   </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"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      lattice definition
      </xs:documentation>
   </xs:annotation>      
   <xs:complexType name="lattice">
      <xs:sequence>
         <xs:choice maxOccurs="unbounded" minOccurs="0">
            <xs:element ref="emma:arc"/>         
         </xs:choice>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:node"/>
         </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="emma:lattice.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:attributeGroup>
   <xs:complexType mixed="true" name="arc">
      <xs:attributeGroup ref="emma:arc.attribs"/>
      <xs:attributeGroup ref="emma:interpretation.attribs"/>
   </xs:complexType>
   <xs:attributeGroup name="node.attribs">
      <xs:attribute name="node-number" type="xs:nonNegativeInteger" use="required"/>
      <xs:attribute ref="emma:cost"/>
   </xs:attributeGroup>
   <xs:complexType name="node">
      <xs:attributeGroup ref="emma:node.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>
      model definition
      </xs:documentation>
   </xs:annotation>      
   <xs:attributeGroup name="model.attribs">
      <xs:attribute name="ref" type="xs:anyURI" use="required"/>
   </xs:attributeGroup>
   <xs:complexType name="model">
      <xs:attributeGroup ref="emma:model.attribs"/>
   </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:attributeGroup>
   <xs:complexType name="derived-from">
      <xs:attributeGroup ref="emma:derived-from.attribs"/>
   </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>
      info definition
      </xs:documentation>
   </xs:annotation>      
   <xs:complexType name="info">
      <xs:sequence>
         <xs:choice maxOccurs="unbounded" minOccurs="0">
            <xs:any namespace="##other" processContents="lax"/>
         </xs:choice>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      interpretation definition
      </xs:documentation>
   </xs:annotation>      
   <xs:group name="interpretation.class">
      <xs:sequence>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:model"/>
         </xs:choice>
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:endpoint-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" maxOccurs="unbounded"/>
         </xs:choice>                                          
         <xs:choice maxOccurs="1" minOccurs="0">
            <xs:element ref="emma:lattice"/>
            <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>
      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="unbounded" minOccurs="0">
            <xs:element ref="emma:model"/>
            <xs:element ref="emma:endpoint-info"/>
            <xs:element ref="emma:info"/>
            <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="unbounded" minOccurs="0">
            <xs:element ref="emma:model"/>
            <xs:element ref="emma:endpoint-info"/>
            <xs:element ref="emma:info"/>
            <xs:element ref="emma:interpretation"/>
            <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>
      sequence definition
      </xs:documentation>
   </xs:annotation>      
   <xs:group name="sequence.class">
      <xs:sequence>
         <xs:choice maxOccurs="unbounded" minOccurs="0">
            <xs:element ref="emma:model"/>
            <xs:element ref="emma:endpoint-info"/>
            <xs:element ref="emma:info"/>
            <xs:element ref="emma:interpretation"/>
            <xs:element ref="emma:group"/>
            <xs:element ref="emma:one-of"/>
         </xs:choice>         
      </xs:sequence>
   </xs:group>
   <xs:complexType name="sequence">
      <xs:group ref="emma:sequence.class"/>
      <xs:attribute name="id" type="xs:ID"/>
      <xs:attributeGroup ref="emma:group.attribs"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      emma definition
      </xs:documentation>
   </xs:annotation>      
   <xs:attributeGroup name="emma.root.attribs">
      <xs:annotation>
         <xs:documentation/>
      </xs:annotation>
      <xs:attribute name="version" type="xs:string" use="required"/>
   </xs:attributeGroup>
   <xs:group name="emma.class">
      <xs:annotation>
         <xs:documentation>
         emma content model
         </xs:documentation>
      </xs:annotation>
      <xs:sequence>
          <xs:choice maxOccurs="unbounded" minOccurs="0">
             <xs:element ref="emma:grammar"/>
             <xs:element ref="emma:info"/>
            <xs:element ref="emma:endpoint-info"/>
         </xs:choice>      
          <xs:choice maxOccurs="1" minOccurs="0">      
            <xs:element ref="emma:interpretation" maxOccurs="unbounded"/>
            <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 attributes
         </xs:documentation>
      </xs:annotation>
      <xs:group ref="emma:emma.class"/>
      <xs:attributeGroup ref="emma:emma.root.attribs"/>
   </xs:complexType>
   <xs:annotation>
      <xs:documentation>
      EMMA elements
      </xs:documentation>
   </xs:annotation>      
   <xs:element name="info" type="emma:info"/>
   <xs:element name="endpoint-info" type="emma:endpoint-info"/>
   <xs:element name="endpoint" type="emma:endpoint"/>
   <xs:element name="model" type="emma:model"/>
   <xs:element name="derived-from" type="emma:derived-from"/>
   <xs:element name="group-info" type="emma:group-info"/>
   <xs:element name="lattice" type="emma:lattice"/>
   <xs:element name="arc" type="emma:arc"/>
   <xs:element name="node" type="emma:node"/>
   <xs:element name="interpretation" type="emma:interpretation"/>
   <xs:element name="one-of" type="emma:one-of"/>
   <xs:element name="group" type="emma:group"/>
   <xs:element name="sequence" type="emma:sequence"/>
   <xs:element name="grammar" type="emma:grammar"/>
   <xs:element name="emma" type="emma:emma"/>
</xs:schema>
