<?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="Center">
  <xs:sequence>
    <xs:element name="C1" type="xs:anySimpleType"/>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="Center2D">
  <xs:complexContent>
    <xs:extension base="Center">
      <xs:sequence>
        <xs:element name="C2" type="xs:decimal"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

<xs:complexType name="SpaceCenter">
  <xs:complexContent>
    <xs:restriction base="Center2D">
      <xs:sequence>
      <xs:element name="C1" type="xs:decimal"/>
      <xs:element name="C2" type="xs:decimal"/>
      </xs:sequence>
    </xs:restriction>
  </xs:complexContent>
</xs:complexType>

<xs:complexType name="TimeCenter">
  <xs:complexContent>
    <xs:restriction base="Center">
      <xs:sequence>
        <xs:element name="C1" type="xs:date"/>
      </xs:sequence>
    </xs:restriction>
  </xs:complexContent>
</xs:complexType>

<xs:element name="Center" abstract="true" type="Center"/>
<xs:element name="SpaceCenter" substitutionGroup="Center" type="SpaceCenter"/>
<xs:element name="TimeCenter" substitutionGroup="Center" type="TimeCenter"/>

<xs:complexType name="Extent">
  <xs:sequence>
    <xs:element name="E1" type="xs:decimal"/>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="SpaceExtent">
  <xs:complexContent>
    <xs:extension base="Extent">
      <xs:sequence>
        <xs:element name="E2" type="xs:decimal"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

<xs:element name="Extent" abstract="true" type="Extent"/>
<xs:element name="SpaceExtent" substitutionGroup="Extent" type="SpaceExtent"/>
<xs:element name="TimeExtent" substitutionGroup="Extent" type="Extent"/>
 
<xs:complexType name="SpaceTime">
  <xs:sequence>
    <xs:element ref="Center"/>
    <xs:element ref="Extent"/>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="Space">
  <xs:complexContent>
    <xs:restriction base="SpaceTime">
      <xs:sequence>
        <xs:element ref="SpaceCenter"/>
        <xs:element ref="SpaceExtent"/>
      </xs:sequence>
    </xs:restriction>
  </xs:complexContent>	     
</xs:complexType>

<xs:complexType name="Time">
  <xs:complexContent>
    <xs:restriction base="SpaceTime">
      <xs:sequence>
        <xs:element ref="TimeCenter"/>
        <xs:element ref="TimeExtent"/>
      </xs:sequence>
    </xs:restriction>
  </xs:complexContent>	     
</xs:complexType>

<xs:element name="SpaceTime" abstract="true" type="SpaceTime"/>
<xs:element name="Space" substitutionGroup="SpaceTime" type="Space"/>
<xs:element name="Time" substitutionGroup="SpaceTime" type="Time"/>

<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:complexType name="SpaceTimeSpec">
  <xs:sequence>
    <xs:element ref="SpaceTime" minOccurs="2" maxOccurs="2"/>
    <xs:element name="Sampling" type="Sampling" minOccurs="2" maxOccurs="2"/>  
  </xs:sequence>
</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 ref="SpaceCenter"/>
        <xs:element ref="SpaceExtent"/>
      </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>