<?xml version="1.0" encoding="UTF-8"?>
  <!-- PDS4 XML/Schema for Name Space Id:sb  Version:1.1.0.0 - Tue Jun 25 15:45:32 UTC 2024 -->
  <!-- Generated from the PDS4 Information Model Version 1.22.0.0 - System Build 14.1 -->
  <!-- *** This PDS4 product schema is an operational deliverable. *** -->
  <!--                                                                           -->
  <!--               Dictionary Stack                                            -->
  <!-- 1.22.0.0 - pds: - Common Dictionary                                       -->
  <!-- 1.1.0.0 - sb: - Small Bodies Studies                                      -->
  <!--                                                                           -->
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://pds.nasa.gov/pds4/sb/v1"
    xmlns:sb="http://pds.nasa.gov/pds4/sb/v1"
    xmlns:pds="http://pds.nasa.gov/pds4/pds/v1"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified"
    version="1.1.0.0">
 
    <xs:import namespace="http://pds.nasa.gov/pds4/pds/v1" schemaLocation="https://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1M00.xsd"/>
 
  <xs:annotation>
    <xs:documentation>

    The Small Bodies namespace provides classes and attributes for describing techniques 
    and metadata common in small bodies observations, space-based or ground-based. In
    some cases this metadata is in addition to the more general classes and attributes
    provided in other discipline namespaces, which is expected to be present.
    
    The initials "ACR" in the "submitter" field indicate Anne Raugh.

    version 1.1.0 2024-06-23
     - Added dead_time_correction, effective_area_correction, smear_removal_applied, and
       wavelength_solution_applied attributes, which are boolean checks that should be
       present if their respective calibration steps have been applied to the data product.
     - Updated Calibration_Applied class to allow for the above attributes.
     - Added Desmear_Matrix, Effective_Area_Table, and Wavelength_Solution classes, which
       are containers providing a file_name and Internal_Reference to the calibration
       product associated with a particular calibration process.
     - Updated Calibration_Reference_File class to allow for the above classes.
     - Added schematron rules specifying the reference_type used in pds:Internal_Reference
       for the above classes.
     - Added x_axis_position_angle attribute to Instrument_Position_Angles class along
       with schematron rules requiring exactly 2 of the 3 attributes in that class.
  
    </xs:documentation>
  </xs:annotation>
 
  <xs:element name="SB_Metadata" type="sb:SB_Metadata"> </xs:element>

  <xs:complexType name="Additional_Geometry_Metadata">
    <xs:annotation>
      <xs:documentation> The sb:Additional_Geometry_Metadata class
        provides information to supplement that already provided in the
        classes of the Geometry (geom:) namespace. This class is only
        useful in relatively simple cases where there is just a single
        geom:Geometry class the label, with a single target and orbiter
        reference. The optional sb:comment attribute may be used to note
        unusual circumstances. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Instrument_Position_Angles" type="sb:Instrument_Position_Angles" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Geometry_Vector_Time" type="sb:Geometry_Vector_Time" minOccurs="0" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Additional_Image_Metadata">
    <xs:annotation>
      <xs:documentation> The sb:Additional_Image_Metadata class provides
        metadata to supplement the standard image metadata supplied by
        the more general discipline classes. The sb:comment field may be
        used to note any unsual circumstances. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="pds:Local_Internal_Reference" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="image_observation_type" type="sb:image_observation_type" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="Ancillary_Data_Objects" type="sb:Ancillary_Data_Objects" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Additional_Geometry_Metadata" type="sb:Additional_Geometry_Metadata" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Per_Frame_Metadata" type="sb:Per_Frame_Metadata" minOccurs="0" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test="sb:image_observation_type = ('Frame Sequence', 'Single Image')"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </xs:complexType>

  <xs:complexType name="Ancillary_Data_Objects">
    <xs:annotation>
      <xs:documentation> The sb:Ancillary_Data_Objects class provides
        mappings between the primary image data in the product and the
        ancillary data (quality maps, error estimates, etc.) provided
        with it as part of the data product. The optional sb:comment
        field may be used to note any unusual circumstances.
        </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Quality_Map" type="sb:Quality_Map" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Error_Estimates_Map" type="sb:Error_Estimates_Map" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="SNR_Map" type="sb:SNR_Map" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Bad_Pixel_Map">
    <xs:annotation>
      <xs:documentation> The sb:Bad_Pixel_Map class identifies the PDS
        archive product containing the bad pixel map applied in
        processing the data in the product. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="file_name" type="sb:file_name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="pds:Internal_Reference" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Bias_Map">
    <xs:annotation>
      <xs:documentation> The sb:Bias_Map class identifies a PDS4 product
        that contains the pixel-by-pixel bias values applied during a
        calibration process. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="file_name" type="sb:file_name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="pds:Internal_Reference" minOccurs="1" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Calibration_Applied">
    <xs:annotation>
      <xs:documentation> The sb:Calibration_Applied class provide flags
        to indicate specific calibration processes that have been
        performed, as well as references to files provided with the
        archive that were used as part of the processing. The otpional
        sb:comment field may be used to note any unusual circumstances.
        </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="bias_subtraction" type="sb:bias_subtraction" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="dark_current_removal" type="sb:dark_current_removal" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="dead_time_correction" type="sb:dead_time_correction" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="effective_area_correction" type="sb:effective_area_correction" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="flat_field_applied" type="sb:flat_field_applied" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="scattered_light_correction" type="sb:scattered_light_correction" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="smear_removal_applied" type="sb:smear_removal_applied" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="wavelength_solution_applied" type="sb:wavelength_solution_applied" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="conversion_to_physical_units" type="sb:conversion_to_physical_units" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Calibration_Reference_Files" type="sb:Calibration_Reference_Files" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Calibration_Information">
    <xs:annotation>
      <xs:documentation> The sb:Calibration_Information class documents
        what processing steps have been applied to the data, and links
        to both the raw data file and the specific calibration files
        used to produce the processed product presented in the label.
        </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Raw_Data_Product" type="sb:Raw_Data_Product" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="Calibration_Applied" type="sb:Calibration_Applied" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="Calibration_Reference_Files" type="sb:Calibration_Reference_Files" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Calibration_Reference_Files">
    <xs:annotation>
      <xs:documentation> The sb:Calibration_Reference_Files class
        provides explicit references to key calibration files provided
        as part of the archive. Note that these references are required
        to be to specific versions of calibration files, as calibration
        processes and details typically evolve over time. The optional
        sb:comment should be used to note any unusual circumstances
        related to the calibration files as a group. The optional
        pds:comment field in the pds:Internal_Reference class should be
        used to note any unusual circumstances related to any particular
        referenced file. The subclasses mat be listed in any order, and
        may be repeated if that makes sense - although that should be
        explained in a "comment" field. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Bias_Map" type="sb:Bias_Map"> </xs:element>
        <xs:element name="Bad_Pixel_Map" type="sb:Bad_Pixel_Map"> </xs:element>
        <xs:element name="Dark_Field" type="sb:Dark_Field"> </xs:element>
        <xs:element name="Desmear_Matrix" type="sb:Desmear_Matrix"> </xs:element>
        <xs:element name="Effective_Area_Table" type="sb:Effective_Area_Table"> </xs:element>
        <xs:element name="Flat_Field" type="sb:Flat_Field"> </xs:element>
        <xs:element name="Wavelength_Solution" type="sb:Wavelength_Solution"> </xs:element>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Dark_Field">
    <xs:annotation>
      <xs:documentation> The sb:Dark_Field class identifies the PDS
        archive product containing the dark field used to calibrate the
        data in the product. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="file_name" type="sb:file_name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="pds:Internal_Reference" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Desmear_Matrix">
    <xs:annotation>
      <xs:documentation> The sb:Desmear_Matrix class identifies the PDS
        archive product containing the desmear matrix used to calibrate
        the data in the product. A desmear matrix is used to remove
        readout smear generated as charge is transferred across the CCD.
        </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="file_name" type="sb:file_name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="pds:Internal_Reference" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Effective_Area_Table">
    <xs:annotation>
      <xs:documentation> The sb:Effective_Area_Table class identifies
        the PDS archive product containing the effective area table used
        to calibrate the data in the product. An effective area table
        lists the calculated effected area of the detector at particular
        wavelengths. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="file_name" type="sb:file_name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="pds:Internal_Reference" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Error_Estimates_Map">
    <xs:annotation>
      <xs:documentation> The sb:Error_Estimates_Map class links the
        primary image data in the product to the data object (within the
        same product) containing the pixel-for-pixel error estimates.
        The definition of the data object itself should indicate the
        unit of measure of the errors and related information. The
        optional sb:comment in this class can be used to note any
        unusual circumstances not related to reading (that is,
        input/output of) the error map data. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="pds:Local_Internal_Reference" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Exposure">
    <xs:annotation>
      <xs:documentation> The Exposure class is used to provide
        attributes describing what constitutes an "exposure" in the
        particular circumstances of the observation. It is used
        primarily with non-imaging data, or imaging data that does not
        fit the circumstances covered by the Imaging namespace. The
        Imaging namespace class should be used when it is applicable.
        This class may be used in addition to the Imaging class in order
        to provide additional detail via the sb:exposure_description
        attribute. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="exposure_duration" type="sb:exposure_duration" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="exposure_description" type="sb:exposure_description" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Filter">
    <xs:annotation>
      <xs:documentation> The Filter class provides local and standard
        identification of the filter used to make the observation, as
        well as descriptive parameters to identify types of filter
        (broadband, LVF, etc.) and basic filter characteristics
        (bandpass, center wavelegth). </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="filter_name" type="sb:filter_name" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="standard_filter_identification" type="sb:standard_filter_identification" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="filter_type" type="sb:filter_type" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="center_wavelength" type="sb:center_wavelength" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="center_wavelength_is_weighted" type="sb:center_wavelength_is_weighted" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="short_wavelength_limit" type="sb:short_wavelength_limit" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="long_wavelength_limit" type="sb:long_wavelength_limit" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="known_short_wavelength_leak" type="sb:known_short_wavelength_leak" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="known_long_wavelength_leak" type="sb:known_long_wavelength_leak" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="pds:Internal_Reference" minOccurs="0" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test="sb:filter_type = ('Broadband', 'Linear Variable Filter (LVF)', 'Narrowband', 'Neutral')"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </xs:complexType>

  <xs:complexType name="Flat_Field">
    <xs:annotation>
      <xs:documentation> The sb:Flat_Field class identifies the PDS
        archive product containing the flat field used to calibrate the
        data in the product. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="file_name" type="sb:file_name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="pds:Internal_Reference" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Frame_Pointing">
    <xs:annotation>
      <xs:documentation> The sb:Frame_Pointing class provide pointing
        information specific to one frame in a "Frame Sequence"
        observation. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="frame_center_ra" type="sb:frame_center_ra" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="frame_center_dec" type="sb:frame_center_dec" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="celestial_north_clock_angle" type="sb:celestial_north_clock_angle" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Instrument_Position_Angles" type="sb:Instrument_Position_Angles" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Geometry_Vector_Time">
    <xs:annotation>
      <xs:documentation> The sb:Geometry_Vector_Time class identifies a
        vector or pair of related vectors included in the
        geom:Geometry_Orbiter class and provides details about the local
        time for an observer located at one of the endpoints of the
        vector at the time for which the vector was calculated. For
        example, if the geom:Vector_Cartesian_Position_Earth_to_Target
        vector was calculated for spacecraft UTC timeX, this class can
        be used to provide the additional information that the UTC time
        for an Earth Observer at that instant would have been timeY.
        </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="position_velocity_vectors" type="sb:position_velocity_vectors" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="time_at_Earth_UTC_YMD" type="sb:time_at_Earth_UTC_YMD" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="time_at_Earth_UTC_JD" type="sb:time_at_Earth_UTC_JD" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="time_at_Sun_UTC_YMD" type="sb:time_at_Sun_UTC_YMD" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="time_at_Sun_UTC_JD" type="sb:time_at_Sun_UTC_JD" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="time_at_target_UTC_YMD" type="sb:time_at_target_UTC_YMD" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="time_at_target_UTC_JD" type="sb:time_at_target_UTC_JD" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test="sb:position_velocity_vectors = ('Earth_to_Spacecraft', 'Earth_to_Target', 'Spacecraft_to_Target', 'Sun_to_Spacecraft')"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </xs:complexType>

  <xs:complexType name="Instrument_Position_Angles">
    <xs:annotation>
      <xs:documentation> The sb:Instrument_Position_Angles class provide
        position angles for the axes of the boresight on the place of
        the image, measured with respect to the location of the
        celestial North pole (also projected onto the plane of the
        image). Only two axes should be specified, with the third being
        the instrument's boresight. Note that the instrument frame's
        axis orientation is assumed to be right-handed, so the direction
        of the boresight axis (into or out of the image plane) can be
        inferred from the relative positions of the other two.
        </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="x_axis_position_angle" type="sb:x_axis_position_angle" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="y_axis_position_angle" type="sb:y_axis_position_angle" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="z_axis_position_angle" type="sb:z_axis_position_angle" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Instrument_to_J2000_Quaternion">
    <xs:annotation>
      <xs:documentation> The sb:Instrument_to_J2000_Quaternion is
        provides the quaterion to rotate from coordinates from the
        intrument frame to the EME J2000 frame for a single specific
        frame of a "Frame Sequence" observation. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="qcos" type="sb:qcos" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="qsin1" type="sb:qsin1" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="qsin2" type="sb:qsin2" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="qsin3" type="sb:qsin3" minOccurs="1" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Midframe_Time">
    <xs:annotation>
      <xs:documentation> The sb:Midframe_Time class provides timing
        information related to the mid-exposure time of one frame of a
        "Frame Sequence" observation. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="midobservation_time_UTC_YMD" type="sb:midobservation_time_UTC_YMD" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="midobservation_time_UTC_JD" type="sb:midobservation_time_UTC_JD" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="delta_time_from_sequence_start" type="sb:delta_time_from_sequence_start" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Observation_Parameters">
    <xs:annotation>
      <xs:documentation> The sb:Observational_Parameters class provides
        general attributes that small bodies researches find useful for
        a variety of types of observations. Not all subclasses will be
        applicable to all data types. The sb:Filter subclass may be
        repeated, but note that if this is a spectral observation, the
        relevant filter characteristics must be included the Spectral
        Dictionary (sp:). Additional filter information may be provided
        here if desired, of course. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Exposure" type="sb:Exposure" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Filter" type="sb:Filter" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element name="Timing" type="sb:Timing" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Per_Frame_Metadata">
    <xs:annotation>
      <xs:documentation> The sb:Per_Frame_Metadata class provides timing
        and pointing information specific to a single, specified frame
        within a "Frame Sequence" observation. It should not be used in
        the case of single-image observations. For single images, the
        full geom:Image_Display_Geometry class should be used.
        </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="frame_number" type="sb:frame_number" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="frame_exposure_duration" type="sb:frame_exposure_duration" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Midframe_Time" type="sb:Midframe_Time" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Frame_Pointing" type="sb:Frame_Pointing" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Instrument_to_J2000_Quaternion" type="sb:Instrument_to_J2000_Quaternion" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Quality_Flag_Definition">
    <xs:annotation>
      <xs:documentation> The sb:Quality_Flag_Definition class defines
        one flag value with its corresponding meaning within a
        sb:Quality_Map_Definition class. Note that flag values here
        should not be used to replace pds:Special_Constants values - in
        particular the pds:missing_constant value - that should be
        included in the defintion of the data array itself. The
        pds:Special_Constants class is used for visualization and data
        validation; the sb:Quality_Flag_Definitions are used for
        interpretation and analysis. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="flag_value" type="sb:flag_value" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="flag_meaning" type="sb:flag_meaning" minOccurs="1" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Quality_Map">
    <xs:annotation>
      <xs:documentation> The sb:Quality_Map class links the primary
        image data in the product to the data object (within the same
        product) containing the pixel-for-pixel quality assessment
        information. It also provides the definitions associated with
        the quality values. The optional sb:comment field may be used to
        note any unusual circumstances. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="pds:Local_Internal_Reference" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="Quality_Map_Definition" type="sb:Quality_Map_Definition" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Quality_Map_Definition">
    <xs:annotation>
      <xs:documentation> The sb:Quality_Map_Definition defines
        attributes related to a "Quality Map" data structure - that is,
        an array with dimensions corresponding to the primary data array
        that contains pixel-for-pixel quality information for every
        pixel in the primary array. sb:Quality_Map_Defintion lists the
        meaning of each quality values used in the map. Note that flag
        values defined for the Quality Map should not be used to replace
        pds:Special_Constants values - in particular the
        pds:missing_constant value - that should be included in the
        defintion of either the primary data array or the Quality Map
        array itself. The pds:Special_Constants class is used for
        visualization and data validation; the quality values defined
        are used for interpretation and analysis. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="flags_are_bit_flags" type="sb:flags_are_bit_flags" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="best_quality_value" type="sb:best_quality_value" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="Quality_Flag_Definition" type="sb:Quality_Flag_Definition" minOccurs="1" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Raw_Data_Product">
    <xs:annotation>
      <xs:documentation> The sb:Raw_Data_Product class identifies the
        raw data product in the PDS archive that is the immediate
        predecessor of the current, processed data product.
        </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="file_name" type="sb:file_name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="pds:Internal_Reference" minOccurs="1" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="SB_Metadata">
    <xs:annotation>
      <xs:documentation> The SBS_Metadata class provides metadata
        specific to the techniques and processes of small bodies
        research. In some cases the metadata is supplemental to more
        general metadata contained in other namespaces (metadata that
        should also be present in the product label). </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Observation_Parameters" type="sb:Observation_Parameters" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Calibration_Information" type="sb:Calibration_Information" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Additional_Image_Metadata" type="sb:Additional_Image_Metadata" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="SNR_Map">
    <xs:annotation>
      <xs:documentation> The sb:SNR_Map class links the primary image
        data in the product to the data object (within the same product)
        containing the pixel-for-pixel signal-to-noise ratio
        information. The optional sb:comment field may be used to note
        any unusual circumstances. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="pds:Local_Internal_Reference" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Timing">
    <xs:annotation>
      <xs:documentation> The sb:Timing class provides additional time
        specifications related to the observation. These might include
        times of particular interest, or alternate formats (Julian date,
        for example) of times expressed in ISO standard formats
        elsewhere. The sb:comment field should be used to explain any
        unusual or potentially ambiguous circumstances.
        </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="midobservation_time_UTC_YMD" type="sb:midobservation_time_UTC_YMD" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="midobservation_time_UTC_JD" type="sb:midobservation_time_UTC_JD" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="start_time_UTC_JD" type="sb:start_time_UTC_JD" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="stop_time_UTC_JD" type="sb:stop_time_UTC_JD" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Wavelength_Solution">
    <xs:annotation>
      <xs:documentation> The sb:Wavelength_Solution class identifies the
        PDS archive product containing the wavelength solution used to
        calibrate the data in the product. A wavelength solution is a
        row of data representing the wavelengths corresponding to the
        spectral dimension of the detector. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="file_name" type="sb:file_name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="pds:Internal_Reference" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="sb:comment" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

    <xs:annotation>
      <xs:documentation>This section contains the simpleTypes that provide more constraints
        than those at the base data type level. The simpleTypes defined here build on the base data
        types. This is another component of the common dictionary and therefore falls within the
        common namespace.
      </xs:documentation>
    </xs:annotation>

  <xs:simpleType name="best_quality_value">
    <xs:annotation>
      <xs:documentation> The sb:best_quality_value attribute provides
        the value used within a quality map to indicate the best quality
        pixels. When bit flags are in use, for example, the "best"
        quality is typically 0 (zero) - that is, no quality issues are
        flagged at all. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Integer">
     <xs:minInclusive value="-9223372036854775808"/>
     <xs:maxInclusive value="9223372036854775807"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="bias_subtraction">
    <xs:annotation>
      <xs:documentation> The sb:bias_subtraction attribute should be
        present and contain the value "true" if bias subtraction has
        been performed as part of the processing applied to the data
        comprising the product. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="celestial_north_clock_angle_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="360.0"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="celestial_north_clock_angle">
    <xs:annotation>
      <xs:documentation> The sb:celestial_north_clock_angle attribute is
        the angle, measured clockwise from "up" to the direction of the
        celestial north pole. It must be in the range 0-360, calculated
        with respect to the image display as indicated in the
        corresponding disp:Display_Settings_Class. </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:celestial_north_clock_angle_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Angle" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="center_wavelength_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="center_wavelength">
    <xs:annotation>
      <xs:documentation> The center_wavelength attribute defines the
        nominal transmission peak of the filter transmission curve,
        assuming the spectral response is a Gaussian function.
        </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:center_wavelength_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Length" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="center_wavelength_is_weighted">
    <xs:annotation>
      <xs:documentation> If the preceding center_wavelength is actually
        a weighted center wavelength (rather then the peak of a nominal
        Gaussian function), then this attribute should be present with a
        value of "true". The attribute should never appear without the
        center_wavelength attribute. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="comment">
    <xs:annotation>
      <xs:documentation> The comment attribute provides an opportunity
        to provide additional information in free-format (UTF-8) text.
        Note that characters special to XML parsing (greater-than,
        less-than, and ampersand, primarily) must be presented using
        character entity codes. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:UTF8_Text_Preserved">
     <xs:minLength value="1"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="conversion_to_physical_units">
    <xs:annotation>
      <xs:documentation> The sb:conversion_to_physical_units attribute
        should be present and contain the value "true" if the primary
        data is expressed in physical units once any value offset and
        scaling factor included in the definition of the data structure
        have been applied. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="dark_current_removal">
    <xs:annotation>
      <xs:documentation> The sb:dark_current_removal attribute should be
        present and contain the value "true" if dark current removal has
        been performed as part of the processing applied to the data
        comprising the product. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="dead_time_correction">
    <xs:annotation>
      <xs:documentation> The sb:dead_time_correction attribute should be
        present and contain the value "true" if deadtime correction has
        been performed as part of the processing applied to the data
        comprising the product. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="delta_time_from_sequence_start_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="delta_time_from_sequence_start">
    <xs:annotation>
      <xs:documentation> The sb:delta_time_from_sequence_start attribute
        provide the offset of a time of interest in the current frame
        (as indicated by the containing class) from the start of the
        sequence in a "Frame Sequence" observation. It is specified as a
        floating point number of the specified units of time.
        </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:delta_time_from_sequence_start_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Time" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="effective_area_correction">
    <xs:annotation>
      <xs:documentation> The sb:effective_area_correction attribute
        should be present and contain the value "true" if effective area
        correction based on the calculated effective area of the
        instrument due to varying sensitivity has been performed as part
        of the processing applied to the data comprising the product.
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="exposure_description">
    <xs:annotation>
      <xs:documentation> The exposure_description attribute should be
        used, typically in conjunction with the exposure_duration
        attribute, when the data collection process involves something
        other than simple photon collection over a continuous period of
        time. The exposure_description should define what constitutes as
        "exposure", and/or how the "duration" is determined.
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:UTF8_Text_Preserved">
     <xs:minLength value="1"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="exposure_duration_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="exposure_duration">
    <xs:annotation>
      <xs:documentation> As in the Imaging namespace, exposure_duration
        indicates the total time a detector was exposed to or gathering
        a "signal". This element is used in cases where non-standard
        imaging techniques (those not described by the Imaging
        dictionary) are used, or when the detector is detecting
        something other than photons. </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:exposure_duration_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Time" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="file_name">
    <xs:annotation>
      <xs:documentation> The sb:file_name attribute should contain the
        name, preferably without path information, of the file
        referenced more formally by a pds:Internal_Reference class in
        the same containing class. The file name is provided as a matter
        of convenience and for use as a validation cross-check when the
        data are accepted for archiving. Path information is unlikely to
        be useful once the data are archived, and as the data are
        curated both paths and file names may change. Consequently, the
        logical identifier appearing in the pds:Internal_Reference
        should be considered the positive identification of the file in
        question within the archive, rather than the name.
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_File_Name">
  <!-- format="file_name.file_extension" -->
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="filter_name">
    <xs:annotation>
      <xs:documentation> The filter_name is a (frequently informal)
        identifier for the filter within the context of the source data
        collection. Typical values will be things like "Red", "Clear",
        or "CH4". Values should be simple ASCII strings.
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="filter_type">
    <xs:annotation>
      <xs:documentation> The filter_type attribute is a broad
        categorization of the nature of the pass band. Permissible
        values are defined as they are needed - contact the SB Steward
        for assistance. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="flag_meaning">
    <xs:annotation>
      <xs:documentation> The sb:flag_meaning attribute defines the
        significance of the particular value when it occurs in the
        associated context (typically a quality map, for example).
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:UTF8_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="flag_value">
    <xs:annotation>
      <xs:documentation> The sb:flag_value attribute defines an integer
        value that corresponds to a specific condition or assessment
        within the containing data structure, typically a quality map.
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Integer">
     <xs:minInclusive value="-9223372036854775808"/>
     <xs:maxInclusive value="9223372036854775807"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="flags_are_bit_flags">
    <xs:annotation>
      <xs:documentation> The sb:flag_are_bit_flags attribute contains
        "true" if the flags being defined within the containing class
        correspond to specific bits within a single integer field. When
        this is the case, all flag should have values that are exponents
        of 2. Typically, when bit flags are used, several flags may be
        combined within a single field (so a quality value may be 10,
        indicating that the flags corresponding to the values 8 and 2
        are both set, for example). </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="flat_field_applied">
    <xs:annotation>
      <xs:documentation> The sb:flat_field_applied attribute should be
        present and contain the value "true" if flat fielding has been
        performed as part of the processing applied to the data
        comprising the product. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="frame_center_dec_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="-90.0"/>
     <xs:maxInclusive value="90.0"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="frame_center_dec">
    <xs:annotation>
      <xs:documentation> The sb:frame_center_dec attribute provide the
        declination, in degrees, of the center point of a single frame
        of a "Frame Sequence" observation. </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:frame_center_dec_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Angle" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="frame_center_ra_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="360.0"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="frame_center_ra">
    <xs:annotation>
      <xs:documentation> The sb:frame_center_ra attribute provide the
        right ascension, in degrees, of the center point of a single
        frame of a "Frame Sequence" observation. </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:frame_center_ra_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Angle" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="frame_exposure_duration_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="frame_exposure_duration">
    <xs:annotation>
      <xs:documentation> The sb:frame_exposure_duration attribute
        provides the exposure time for one frame of a framing sequence.
        </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:frame_exposure_duration_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Time" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="frame_number">
    <xs:annotation>
      <xs:documentation> The sb:frame_number attribute specifies the
        sequential frame number, starting with "0", to which the
        subsequent frame-specific metadata applies. The frame number is
        the subscript along the axis that defines the "frame" dimension.
        Frames must be physically stored in sequence in the file, so for
        a sequence of 2D frames the sb:frame_number will correspond to
        the (0-based) index along the third axis. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Integer">
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="9223372036854775807"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="image_observation_type">
    <xs:annotation>
      <xs:documentation> The sb:image_observation_type attribute
        indicates whether the data product is a single, 2D image, or an
        image "frame sequence" - a series of images obtained in a single
        observing sequence and processed as a set. If the images were
        intended to comprise a spectral cube or an movie sequence, then
        the data should be labeled accordingly and this class may not be
        present if there is no additional metadata needed. Additiona
        types can be added to the permissible value list as needs arise.
        When in doubt, check with the PDS node curating the data or
        raise an issue on this dictionary. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="known_long_wavelength_leak">
    <xs:annotation>
      <xs:documentation> If the filter in use has a known light leak on
        the long-wavelength side, the known_long_wavelength_leak flag
        should be present and set to "true". This does NOT indicate that
        a correction has been applied - check the calibration processing
        for that information. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="known_short_wavelength_leak">
    <xs:annotation>
      <xs:documentation> If the filter in use has a known light leak on
        the short-wavelength side, the known_short_wavelength_leak flag
        should be present and set to "true". This does NOT indicate that
        a correction has been applied - check the calibration processing
        for that information. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="long_wavelength_limit_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="long_wavelength_limit">
    <xs:annotation>
      <xs:documentation> The long_wavelength_limit defines the largest
        wavelength cutoff of a wavelength range. </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:long_wavelength_limit_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Length" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="midobservation_time_UTC_JD_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="midobservation_time_UTC_JD">
    <xs:annotation>
      <xs:documentation> The sb:midobservation_time_UTC_JD attribute
        contains the UTC time corresponding to the midpoint of the
        observation, in full (as opposed to modified) Julian date
        format. The unit of "julian day" must be included when this
        attribute is used. Unusual circumstances relating to the
        definition of "midobservation" should be explained briefly in
        the sb:comment field of the containing class. </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:midobservation_time_UTC_JD_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Time" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="midobservation_time_UTC_YMD">
    <xs:annotation>
      <xs:documentation> The sb:midobservation_time_UTC_YMD attribute
        contains the UTC time corresponding the midpoint of the
        observation, in the format YYYY-MM-DDThh:mm:ss.sssZ (that is,
        the ISO YMD format with the 'Z' timezone indicator required to
        be present). Unusual circumstances relating to the definition of
        "midobservation" should be explained briefly in the sb:comment
        field of the containing class. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Date_Time_YMD_UTC">
  <!-- format="YYYY-MM-DDTHH:MM:SS.SSSSSSZ" -->
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="position_velocity_vectors">
    <xs:annotation>
      <xs:documentation> The sb:position_velocity_vectors attribute
        identifies the type of position and velocity vectors relevant to
        the data provided by naming the start and end point pair. (In
        some cases the directionality of the velocity vector is opposite
        that of the position vector.) </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="qcos">
    <xs:annotation>
      <xs:documentation> The sb:qcos attribute is the "cos(theta/2)"
        element of a pointing quaternion. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="-1.000"/>
     <xs:maxInclusive value="1.000"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="qsin1">
    <xs:annotation>
      <xs:documentation> The sb:qsin1 attribute is the "ax*sin(theta/2)"
        element of a pointing quaternion. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="-1.7976931348623157e308"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="qsin2">
    <xs:annotation>
      <xs:documentation> The sb:qsin2 attribute is the "ay*sin(theta/2)"
        element of a pointing quaternion. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="-1.7976931348623157e308"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="qsin3">
    <xs:annotation>
      <xs:documentation> The sb:qsin3 attribute is the "az*sin(theta/2)"
        element of a pointing quaternion. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="-1.7976931348623157e308"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="scattered_light_correction">
    <xs:annotation>
      <xs:documentation> The sb:scattered_light_correction attribute
        should be present and contain the value "true" if scattered
        light correction has been applied as part of the processing of
        the data comprising the product. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="short_wavelength_limit_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="short_wavelength_limit">
    <xs:annotation>
      <xs:documentation> The short_wavelength_limit defines the smallest
        wavelength cutoff of a wavelength range. </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:short_wavelength_limit_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Length" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="smear_removal_applied">
    <xs:annotation>
      <xs:documentation> The sb:smear_removal_applied attribute should
        be present and contain the value "true" if a smear removal
        correction algorithm to remove readout smear generated as charge
        is transferred across the CCD has been applied as part of the
        processing of the data comprising the product.
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="standard_filter_identification">
    <xs:annotation>
      <xs:documentation> The standard_filter_identification is used when
        the filter is one of a standard or well-known bandpass, for
        example "Johnson V" or "WFPC2 R". </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="start_time_UTC_JD_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="start_time_UTC_JD">
    <xs:annotation>
      <xs:documentation> The start_time_UTC_JD attribute contains the
        UTC start time of a period of interest, typically the
        observation period, expressed as a Julian date. Units of "julian
        day" must be included when using this attribute.
        </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:start_time_UTC_JD_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Time" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="stop_time_UTC_JD_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="stop_time_UTC_JD">
    <xs:annotation>
      <xs:documentation> The stop_time_UTC_JD attribute contains the UTC
        ending time of a period of interest, typically the observation
        period, expressed as a Julian date. Units of "julian day" must
        be included when using this attribute. </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:stop_time_UTC_JD_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Time" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="time_at_Earth_UTC_JD_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="time_at_Earth_UTC_JD">
    <xs:annotation>
      <xs:documentation> The sb:time_at_Earth_UTC_YMD attribute give the
        local UTC time for an Earth observer at the time for which the
        corresponding positions and/or vectors were calculated. The time
        is stated in Julian date format, and must be given with units of
        "julian day". </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:time_at_Earth_UTC_JD_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Time" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="time_at_Earth_UTC_YMD">
    <xs:annotation>
      <xs:documentation> The sb:time_at_Earth_UTC_YMD attribute give the
        local UTC time for an Earth observer at the time for which the
        corresponding positions and/or vectors were calculated. The time
        is in the ISO standard YYYY-MM-DDThh:mm:ss.sssZ format.
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Date_Time_YMD_UTC">
  <!-- format="YYYY-MM-DDTHH:MM:SS.SSSSSSZ" -->
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="time_at_Sun_UTC_JD_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="time_at_Sun_UTC_JD">
    <xs:annotation>
      <xs:documentation> The sb:time_at_Sun_UTC_YMD attribute give the
        local UTC time for an observer at the Sun at the time for which
        the corresponding positions and/or vectors were calculated. The
        time is stated in Julian date format, and must be given with
        units of "julian day". </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:time_at_Sun_UTC_JD_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Time" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="time_at_Sun_UTC_YMD">
    <xs:annotation>
      <xs:documentation> The sb:time_at_Sun_UTC_YMD attribute give the
        local UTC time for an observer at the Sun at the time for which
        the corresponding positions and/or vectors were calculated. The
        time is in the ISO standard YYYY-MM-DDThh:mm:ss.sssZ format.
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Date_Time_YMD_UTC">
  <!-- format="YYYY-MM-DDTHH:MM:SS.SSSSSSZ" -->
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="time_at_target_UTC_JD_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="time_at_target_UTC_JD">
    <xs:annotation>
      <xs:documentation> The sb:time_at_Sun_UTC_YMD attribute give the
        local UTC time for an observer at the target at the time for
        which the corresponding positions and/or vectors were
        calculated. The time is stated in Julian date format, and must
        be given with units of "julian day". </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:time_at_target_UTC_JD_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Time" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="time_at_target_UTC_YMD">
    <xs:annotation>
      <xs:documentation> The sb:time_at_target_UTC_YMD attribute give
        the local UTC time for an observer at the target at the time for
        which the corresponding positions and/or vectors were
        calculated. The time is in the ISO standard
        YYYY-MM-DDThh:mm:ss.sssZ format. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Date_Time_YMD_UTC">
  <!-- format="YYYY-MM-DDTHH:MM:SS.SSSSSSZ" -->
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="wavelength_solution_applied">
    <xs:annotation>
      <xs:documentation> The sb:wavelength_solution_applied attribute
        should be present and contain the value "true" if a wavelength
        solution corresponding to the spectral dimension of the detector
        has been determined as part of the processing applied to the
        data comprising the product. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="x_axis_position_angle_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="360.0"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="x_axis_position_angle">
    <xs:annotation>
      <xs:documentation> The sb:x_axis_position_angle provides the angle
        measured East from celestial North in the plane of an image to
        the +X axis of the instrument boresight. The values are in the
        range 0-360 degrees. </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:x_axis_position_angle_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Angle" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="y_axis_position_angle_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="360.0"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="y_axis_position_angle">
    <xs:annotation>
      <xs:documentation> The sb:y_axis_position_angle provides the angle
        measured East from celestial North in the plane of an image to
        the +Y axis of the instrument boresight. The values are in the
        range 0-360 degrees. </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:y_axis_position_angle_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Angle" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="z_axis_position_angle_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="360.0"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="z_axis_position_angle">
    <xs:annotation>
      <xs:documentation> The sb:z_axis_position_angle provides the angle
        measured East from celestial North in the plane of an image to
        the +Z axis of the instrument boresight. The values are in the
        range 0-360 degrees. </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="sb:z_axis_position_angle_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Angle" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:schema>
