<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://cmcs.org/schema/"
  targetNamespace="http://cmcs.org/schema/"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  elementFormDefault="qualified">
  <xs:import namespace="http://purl.org/dc/elements/1.1/"
    schemaLocation="http://dublincore.org/schemas/xmls/qdc/2003/04/02/dc.xsd"/>
  <xs:element name="reaction">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="reference" type="xs:string"/>
        <xs:element name="reactant" type="rpType" minOccurs="1" maxOccurs="unbounded"/>
        <xs:element name="product" type="rpType" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="bathGas" type="BathGasType" minOccurs="0"/>
        <xs:choice minOccurs="0">
          <xs:element name="rateExpression" type="ArrheniusExpressionType"/>
        </xs:choice>
        <xs:element name="referenceReaction" type="ReferenceReactionType" minOccurs="0"/>
        <xs:element name="descriptors" type="DescriptorsType" minOccurs="0"/>
        <xs:element name="copyright" type="xs:string" minOccurs="0"/>
        <xs:element ref="dc:format" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="BathGasType">
    <xs:sequence>
      <xs:element name="bathGasSpecies" type="BathGasSpeciesType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="BathGasSpeciesType">
    <xs:sequence>
      <xs:element ref="chemicalIdentifier"/>
      <xs:element name="moleFraction" type="xs:decimal"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ArrheniusExpressionType">
    <xs:sequence>
      <xs:element name="reactionOrder" type="xs:decimal"/>
      <xs:element name="temperature" type="RangeValueType"/>
      <xs:element name="pressure" type="RangeValueType" minOccurs="0"/>
      <xs:element name="a" type="ValueType"/>
      <xs:element name="n" type="ValueType" minOccurs="0"/>
      <xs:element name="referenceTemperature" type="ValueType" minOccurs="0"/>
      <xs:element name="ea" type="ValueType" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="type" type="xs:string" use="required" fixed="Arrhenius"/>
  </xs:complexType>
  <xs:complexType name="ReferenceReactionType">
    <xs:sequence>
      <xs:element name="reactant" type="rpType" minOccurs="1" maxOccurs="unbounded"/>
      <xs:element name="product" type="rpType" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="referenceReactionOrder" type="xs:decimal"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DescriptorsType">
    <xs:sequence>
      <xs:element name="rateConstantLimit" type="xs:string" minOccurs="0"/>
      <xs:element name="activationEnergyLimit" type="xs:string" minOccurs="0"/>
      <xs:element name="dataType" type="xs:string" minOccurs="0"/>
      <xs:element name="pressureDependence" type="xs:string" minOccurs="0"/>
      <xs:element name="experimentalProcedure" type="xs:string" minOccurs="0"/>
      <xs:element name="excitationTechnique" type="xs:string" minOccurs="0"/>
      <xs:element name="timeResolution" type="xs:string" minOccurs="0"/>
      <xs:element name="analyticalTechnique" type="xs:string" minOccurs="0"/>
      <xs:element name="comment" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="rpType">
    <xs:sequence>
      <xs:element ref="chemicalIdentifier" minOccurs="1" maxOccurs="unbounded"/>
      <xs:element name="stoichiometry" type="xs:decimal" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="chemicalIdentifier">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute name="type" type="xs:string"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="RangeValueType">
    <xs:sequence>
      <xs:choice>
        <xs:element name="range" type="RangeType"/>
        <xs:element name="value" type="xs:decimal"/>
      </xs:choice>
      <xs:element name="uncertainty" type="UncertaintyType" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="units" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="RangeType">
    <xs:sequence>
      <xs:element name="low" type="xs:decimal"/>
      <xs:element name="high" type="xs:decimal"/>
    </xs:sequence>
    <xs:attribute name="units" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="ValueType">
    <xs:sequence>
      <xs:element name="value" type="xs:float"/>
      <xs:element name="uncertainty" type="UncertaintyType" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="units" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="UncertaintyType">
    <xs:simpleContent>
      <xs:extension base="xs:float">
        <xs:attribute name="type" type="xs:string"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:schema>
