<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           version="1.0">

<xs:annotation>
  <xs:documentation xml:lang="en">
     MDI levels 1.4, 1.5, and 2 data.
  </xs:documentation>
</xs:annotation>

<xs:complexType name="CartesianCoord">
  <xs:sequence>
    <xs:element name="X" type="xs:decimal"/>
    <xs:element name="Y" type="xs:decimal"/>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="HeliographicCoord">
  <xs:sequence>
    <xs:element name="Longtitude" type="xs:decimal"/>
    <xs:element name="Latitude" type="xs:decimal"/>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="Space">
  <xs:sequence>
  <xs:element name="Center" type="CartesianCoord"/>
  <xs:choice>
    <xs:sequence>
      <xs:element name="Start" type="CartesianCoord"/>
      <xs:element name="End"   type="CartesianCoord"/>
    </xs:sequence>
    <xs:element name="R" type="xs:decimal"/>
  </xs:choice>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="Time">
  <xs:sequence>
    <xs:element name="Start" type="xs:date"/>
    <xs:element name="End"   type="xs:date"/>
  </xs:sequence>
  <xs:attribute name="Campaign" type="xs:boolean"/>
</xs:complexType>

<xs:complexType name="SpaceTimeSpec"> 
  <xs:sequence> 
    <xs:element name="Space" type="Space"/> 
    <xs:element name="Time" type="Time"/> 
    <xs:element name="Sampling" type="Sampling" minOccurs="2" maxOccurs="2"/>
  </xs:sequence> 
</xs:complexType>

<xs:complexType name="Sampling" abstract="true">
  <xs:simpleContent>
    <xs:extension base="xs:string">
      <xs:anyAttribute/>
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>

<xs:complexType name="SpaceSampling">
  <xs:simpleContent>
    <xs:restriction base="Sampling">
      <xs:enumeration value="FD"/>
      <xs:enumeration value="HR"/>
      <xs:enumeration value="GaussianSmoothed"/>
      <xs:enumeration value="Binned"/>
      <xs:enumeration value="LOI"/>
    </xs:restriction>
  </xs:simpleContent>	     
</xs:complexType>

<xs:complexType name="TimeSampling">
  <xs:simpleContent>
    <xs:restriction base="Sampling">
       <xs:enumeration value="30sec"/>
       <xs:enumeration value="60sec"/>
    </xs:restriction>
  </xs:simpleContent>	     
</xs:complexType>

<xs:simpleType name="Polarization">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Linear"/>
    <xs:enumeration value="Circular"/>     
    <xs:enumeration value="None"/>
    <xs:enumeration value="Unknown"/>
  </xs:restriction>
</xs:simpleType>

<xs:simpleType name="ObservableName">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Dopplergram"/>
    <xs:enumeration value="Magnetogram"/>
    <xs:enumeration value="Filtergram"/>
    <xs:enumeration value="Continuum"/>
    <xs:enumeration value="Continuum Filtergram"/>
  </xs:restriction> 
</xs:simpleType>

<xs:complexType name="Observable">
  <xs:simpleContent>
    <xs:extension base="ObservableName">
    <xs:attribute name="Polarization" type="Polarization"/>
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>

<xs:element name="Processing" abstract="true" type="Processing"/>
<xs:element name="SphericalHarmonicTransform" substitutionGroup="Processing" type="Processing"/>
<xs:element name="EnhancedContrast" substitutionGroup="Processing" type="Processing"/>
<xs:element name="Averaged" substitutionGroup="Processing" type="Processing"/>
<xs:element name="Tracked" substitutionGroup="Processing" type="Tracked"/>
<xs:element name="TrackedPowerSpectrum" substitutionGroup="Processing" type="Tracked"/>
<xs:element name="LimbFigure" substitutionGroup="Processing" type="Processing"/>

<xs:complexType name="Processing">
  <xs:sequence>
    <xs:element name="Description" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="Tracked">
  <xs:complexContent>
    <xs:extension base="Processing">
      <xs:sequence>
        <xs:element name="Center" type="HeliographicCoord"/>
        <xs:element name="Extent" type="xs:decimal"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

<xs:element name="MDI">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="SpaceTimeSpec" type="SpaceTimeSpec"/>
      <xs:element name="Observable" type="Observable"/>
      <xs:element ref="Processing" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>