<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           version="1.0">
<xs:annotation>
  <xs:documentation xml:lang="en">
     VSO data service registry
  </xs:documentation>
</xs:annotation>

<xs:simpleType name="Facility">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Observatory"/>
    <xs:enumeration value="Telescope"/>
    <xs:enumeration value="Instrument"/>
  </xs:restriction> 
</xs:simpleType>

<xs:complexType name="Observable">
  <xs:sequence>
    <xs:element name="Description" type="xs:string"/>
  </xs:sequence>
  <xs:attribute name="Poe" type="xs:string"/>
</xs:complexType>

<xs:complexType name="Dopplergram">
  <xs:complexContent>
    <xs:extension base="Observable">
      <xs:sequence>
        <xs:element name="Polarization" type="Polarization"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</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:element name="Observable" abstract="true" type="Observable"/>
<xs:element name="Dopplergram" substitutionGroup="Observable" type="Dopplergram"/>
<xs:element name="Magnetogram" substitutionGroup="Observable" type="Observable"/>
<xs:element name="Filtergram" substitutionGroup="Observable" type="Observable"/>
<xs:element name="Continuum" substitutionGroup="Observable" type="Observable"/>
<xs:element name="ContinuumFiltergram" substitutionGroup="Observable" type="Observable"/>
<xs:element name="LineDepth" substitutionGroup="Observable" type="Observable"/>
<!-- MSU -->
<xs:element name="SoftXRay" substitutionGroup="Observable" type="Observable"/>
<!-- NSO -->
<xs:element name="LOS_Magnetogram" substitutionGroup="Observable" type="Observable"/>
<xs:element name="PC_Intensity" substitutionGroup="Observable" type="Observable"/>
<xs:element name="He_Line_Strength" substitutionGroup="Observable" type="Observable"/>
<xs:element name="He_Intensity" substitutionGroup="Observable" type="Observable"/>
<xs:element name="Doppler_Shift" substitutionGroup="Observable" type="Observable"/>
<xs:element name="Equivalent_Width" substitutionGroup="Observable" type="Observable"/>
<xs:element name="Line_Depth" substitutionGroup="Observable" type="Observable"/>
<xs:element name="FTS_Spectra" substitutionGroup="Observable" type="Observable"/>
<xs:element name="FTS_Interferograms" substitutionGroup="Observable" type="Observable"/>
<xs:element name="H_Alpha_Center" substitutionGroup="Observable" type="Observable"/>
<xs:element name="H_Alpha_Offset" substitutionGroup="Observable" type="Observable"/>
<xs:element name="CaK_Center" substitutionGroup="Observable" type="Observable"/>
<xs:element name="CaK_Offset" substitutionGroup="Observable" type="Observable"/>
<xs:element name="Vector_Magnetogram" substitutionGroup="Observable" type="Observable"/>
<xs:element name="Doppler_Images" substitutionGroup="Observable" type="Observable"/>
<xs:element name="Time_Series" substitutionGroup="Observable" type="Observable"/>
<xs:element name="Mode_Frequency_Table" substitutionGroup="Observable" type="Observable"/>
<xs:element name="Acoustic_Spectra" substitutionGroup="Observable" type="Observable"/>

<xs:complexType name="TimeCoverage">
  <xs:sequence>
    <xs:element name="Start" type="xs:date"/>
    <xs:element name="End" type="xs:date"/>		
  </xs:sequence>
</xs:complexType>

<xs:simpleType name="OperationStatus">
  <xs:restriction base="xs:string">
    <xs:enumeration value="On-line"/>
    <xs:enumeration value="Off-line"/>
  </xs:restriction>
</xs:simpleType>

<xs:simpleType name="Distribution">
  <xs:restriction base="xs:string">
    <xs:enumeration value="CDROM"/>
    <xs:enumeration value="HTTP"/>
  </xs:restriction>
</xs:simpleType>

<xs:complexType name="Dataset">
  <xs:sequence>
    <xs:element ref="Observable" maxOccurs="unbounded"/>
    <xs:element name="TimeCoverage" type="TimeCoverage" minOccurs="0"/>
    <xs:element name="URL" type="xs:anyURI"/>
    <xs:element name="OperationStatus" type="OperationStatus"/>
    <xs:element name="Distribution" type="Distribution"/>
  </xs:sequence>
  <xs:attribute name="Name" type="xs:string"/>
</xs:complexType>

<xs:complexType name="DataProvider">
  <xs:sequence>
    <xs:element name="Name" type="xs:string"/>
    <xs:element name="Organization" type="xs:string"/>
    <xs:element name="Facility" type="Facility"/>
    <xs:element name="Address" type="xs:string"/>
    <xs:element name="Contact" type="xs:string"/>
    <xs:element name="Dataset" type="Dataset" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>

<xs:element name="DataSources">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="DataProvider" type="DataProvider" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>
