<?xml version="1.0" encoding="UTF-8"?>
  <!-- PDS4 XML/Schema for Name Space Id:img  Version:1.8.6.0 - Wed Aug 11 03:36:34 UTC 2021 -->
  <!-- Generated from the PDS4 Information Model Version 1.14.0.0 - System Build 10b -->
  <!-- *** This PDS4 product schema is an operational deliverable. *** -->
  <!--                                                                           -->
  <!--               Dictionary Stack                                            -->
  <!-- 1.14.0.0 - pds: - Common Dictionary                                       -->
  <!-- 1.8.6.0 - img: - Imaging                                                  -->
  <!--   file:/home/runner/work/ldd-img/ldd-img/src/PDS4_IMG_IngestLDD.xml       -->
  <!--                                                                           -->
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://pds.nasa.gov/pds4/img/v1"
    xmlns:img="http://pds.nasa.gov/pds4/img/v1"
    xmlns:pds="http://pds.nasa.gov/pds4/pds/v1"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified"
    version="1.8.6.0">
 
    <xs:import namespace="http://pds.nasa.gov/pds4/pds/v1" schemaLocation="https://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1E00.xsd"/>
 
  <xs:annotation>
    <xs:documentation>
 This dictionary contains high level classes and attributes used in imaging and
    spectrometer products. It also contains classes with attributes used during active mission
    operations. Many of these classes are designed to be extended into local mission dictionaries.
    
    ## CHANGE LOG ##
    1.4.0.0
    - upgraded to v1900 of the IM
    - removed specific Autoexposure algorithm classes and introduced generic Algorithm_Parameter class
    - new/improved definitions for Companding_Parameters, Downsampling_Parameters, Exposure_Parameters
    - removed the following attributes: Data_Correction.data_correction_subtype
    - removed the following classes because they were insufficiently multi-mission:
    - Derived_Product_Parameters
    - Frame_Parameters
    - Product_Identification 
    - Stereo_Product_Parameters
    - Vector_Range_Origin
    - added exposure_type enumeration
    - new flat_field_algorithm attribute
    - changed compression_type to compression_class and compression_mode_name to compression_type
    - added new enumerations for compression_class and compression_type
    - added new Instrument_Device_Currents class
    
    1.5.0.0
    - upgraded to v1A10 of the IM
    - removed old blocks of commented out XML
    
    1.5.1.0
    - changed unit of bandwidth attribute from Units_of_Frequency to Units_of_Length
    
    1.6.0.0
    - Upgraded to v1B00 of the IM.
    - Re-organized attributes into alphabetical order.
    - Re-organized classes to make most commonly used parts of label easier to find.
    - Created new classes for housekeeping data (Instrument_State_Parameters, Commanded_Parameters) and placed them at the bottom.
    - Re-wrote numerous class and attribute definitions, to make dictionary easier for users to understand.
    - Renamed some classes and attributes to remove redundant words.
    - Re-designed data correction classes (such as Flat_Field_Correction, Radiometric_Correction, etc.) and 
      other data processing classes such as Companding, Downsampling, etc. to share a common base class.
    - Renamed Compression class and related attributes to Onboard_Compression_*. This is to make it clear 
      that any image compression was performed for data storage/transmission. PDS4 does not allow compressed images.
    - Renamed Filter_Parameters to Optical_Filter
    
    1.6.1.0
    - Added Brightness_Correction class and associated subclasses/attributes
    - Added Pointing_Correction class and associated subclasses/attributes (moved from IMG_SURFACE LDD)
    - Added attributes to Color_Processing class: color_dn_scaling_method, color_dn_scaling_factor
    - Corrected typo in local_reference_type_check_optical_filter rule
    
    1.7.0.0
    - Upgraded to v1D00 of core IM.
    - Added Illumination class and associated subclasses/attributes.
    - Added Video class to Commanded_Parameters. (bugfix)
    
    1.7.1.0, T.Hare
    - Added filter
    - Added atmospheric_opacity and atmospheric_opacity_reference under Radiometric_Correction class
    - Added detector_to_image_flip
    - Changed Flat_Field_Correction from 0:1 to 0:* (unbounded)
    - Added Spatial_Filter and Image_Filter classes and 6 new children (*filter_window*)
    - Under Video added frame_index and gop_start_index
    - Under Sampling added saturated_pixel_count, valid_pixel_count and missing pixel_count attributes
    - Added Image_Mask, Image_Mask_File clases and under mask_type, horizon_mask_elevation attributes.
        anded new Image_Mask added under both Imaging and Commanded_Parameters classes
    - Added mask_transparent_value attribute to Image_Mask_File class
    
    1.7.2.0 P.Geissler
    - added classes Companding_Table and Companding_Table_Mapping to accomodate attributes:
        input_dn_min, input_dn_max, and output_dn
    - added the missing y_center attribute. Fixed saturated_pixel_count, missing_pixel_count, valid_pixel_count

    1.7.3.0, T.Hare
    - Fixes for new enforced rules at LDDTool v11.2.2
    - No longer can one use *_type as non enumerated so changing: 
        radiometric_type, mask_type, and subframe_type to have enumerations
    - Add "Sun Subframe Or Full" and None to subframe_type
    - If an optional attribute, don't set nilable to true, 
        so setting current_value, erase_count and voltage_value to nilable=false
    - Added abstract_flag and element_flag for all Classes with defaults of false
    - Changed Companding, Detector, Exposure, Focus, Onboard_Compression, Optical_Filter, 
      Subframe, and Instrument_State to element_flag = true (allows to be exposed class)
    - update lots of indentations in the classes to be more consistent
    - Add focus_distance to Focus.
    - Add Manual Last, Auto Last, and None to exposure_type
    - Change the minimum for icer_quality to 0 and updated definition
    - Add bad_pixel_replacement_flag, bad_pixel_replacement_table, instrument_idle_timeout, early_image_return to Detector
    - Add exposure_table, exposure_table_update_flag to Autoexposure
    - Add exposure_scale_factor, exposure_coadd_count, exposure_readout_count to Exposure
    - Add early_scaling to Companding
    
    1.8.0.0 T.Hare
    - Update to PDS IM 1.E.0.0
    - Added GZIP and LZO to onboard_compression_type enumeration options
    - Added Optical_Properties class with focal_length, f_number, zoom_position attributes
    - Added focus_initialization_flag attribute under the Focus class
    - Updated Subframe class for first_line, first_sample, lines, and samples attributes to have minOccurs=0
    - Updated img_temperature_value to allow nillable=true
    - Added auto_exposure_lower_threshold, auto_exposure_lower_limit, auto_exposure_upper_threshold,
        auto_exposure_upper_limit, auto_exposure_roi_lines, auto_exposure_roi_samples,
        auto_exposure_roi_first_line, auto_exposure_roi_first_sample attributes to Autoexposure
    - Added Image_Compression_Segment under JPEG_Parameters class
    - Renamed attribute bad_pixel_replacement_table to bad_pixel_replacement_table_id and updated definition
    - Added Special_Point class and special_line, special_sample attributes
    - Added High_Dynamic_Range and High_Dynamic_Range_Exposure classes
       and attibutes hdr_acquisition_mode, hdr_frame_count, hdr_clexposure_count ipping_threshold, exposure_time_delta
    - Added observation_number under Frame class and parameter_table_id under Detector class
    - Added valid_minimum_pixel and valid_maximum_pixel under Autoexposure class
    - Created Thumbnail, Row_Sum, Col_Sum, Reference_Pixel, Histogram classes and attributes added
        to Imaging and Commanded_Parameters class
    - Added delta_focus_count attribute for Focus_Stack class
    - set LED_Illumination_Source to min occurance=0 to any
    
    1.8.1.0 T.Hare
    - Updated exposure_count set minimum to 0
    - Added Image_Compression_Segment class to LOCO_Parameters
    - Added illumination_state attribute to LED_Illumination_Source class
    - Allow motor_count to be negative
    - Allow jpeg_quality to 0
    - Added segment_count to LOCO_Parameters class
    - Added onboard_compression_venue to Onboard_Compression class
    - Added 'Lossless' as a valid for onboard_compression_type attribute
    - Allow decomposition_stages to have a minimum of 0
    - Updated exposure_time_delta to Units_of_Time
    - Updated High_Dynamic_Range_Exposure to be unbounded

    1.8.2.0 T.Hare
    - Added Tiling Class and uts attributes
    - Added "StarPixel Lossless" and "StarPixel Flexible" as compression types under onboard_compression_type
        for Hayabusa2 ONC and TIR instruments. For more see: https://www.mdpi.com/1424-8220/15/10/24926/htm
    - Added Spatial_Filter and Image_Filter under Imaging and Commanded_Parameters (both were not yet added)
    - Updated attrbiutes under Spatial/Image_Filter to be Units_of_None
    - Updated horizon_mask_elevation attribute to be allowed as a direct child under Image_Mask
    - Add array_band_number attribute to Optical_Filter
    - Add original_sample_bits to Sampling class
    
    1.8.3.0 T.Hare
    - Added illumination_mode as an optional child of lllumination
    
    1.8.4.0 T.Hare
    - Added "Always" and "None" as additional valids for shutter_subtraction_mode
	  - Added frame_index to Focus_Stack class

    1.8.5.0 T.Hare
    - Added choice between Internal_Reference/External_Reference in Video class, created reference rules for it also
    - Added rule for Tile Internal_Reference for reference type to be "data_to_tile_source_data"
    - Added "H.264 Frame" enumeration to onboard_compression_type
    - Updated definition to specify only unsigned integer are valid to have a sample_bit_mask (need to still add rule)
    - Updated definition for tile_num_bands

    1.8.6.0. T.Hare
    - Added StarPixel_Lossless_Parameters and StarPixel_Flexible_Parameters class and attributes:
    starpixel_initial_subsampling_interval, starpixel_degradation segment_corrupted_flag, and two rules
    - Updated to main (required github move)
    - Changed filter_position_count to allow for negative values
    - Changed exposure_duration_count to ASCII_Real (for Mars2020 helicopter)
    - Allow frame_index to be negative as seen returned during M2020 mission
    - Added responsivity_std (to Class Radiometric_Correction) to describe the 1-sigma standard 
    deviation in the "responsivity_pan" radiometric coefficients. Added for M2020 Mastcam-Z
    - Added new enumeration radiance factor for radiometric_type and add iof_conversion_coefficient
    and iof_conversion_coefficient_std to the Radiometric_Correction class
    - Added effective_wavelength to Radiometric_Correction class
    - Added new Data_Quality Class and required several required classes and attributes to support it.
    - Allowed responsivity_r,g,b,pan,std attributes to be nillable

  
    </xs:documentation>
  </xs:annotation>
 
  <xs:element name="Companding" type="img:Companding"> </xs:element>
  <xs:element name="Detector" type="img:Detector"> </xs:element>
  <xs:element name="Exposure" type="img:Exposure"> </xs:element>
  <xs:element name="Focus" type="img:Focus"> </xs:element>
  <xs:element name="High_Dynamic_Range" type="img:High_Dynamic_Range"> </xs:element>
  <xs:element name="Imaging" type="img:Imaging"> </xs:element>
  <xs:element name="Instrument_State" type="img:Instrument_State"> </xs:element>
  <xs:element name="Onboard_Compression" type="img:Onboard_Compression"> </xs:element>
  <xs:element name="Optical_Filter" type="img:Optical_Filter"> </xs:element>
  <xs:element name="Sampling" type="img:Sampling"> </xs:element>
  <xs:element name="Subframe" type="img:Subframe"> </xs:element>

  <xs:complexType name="Autoexposure">
    <xs:annotation>
      <xs:documentation>The Autoexposure class contains attributes used
        to identify or describe the algorithm used to automatically
        calculate the proper exposure time. This is generally based on
        some kind of histogram analysis. The specific autoexposure
        algorithm used is defined in the processing_algorithm attribute,
        and the specific set of attributes needed to describe it will
        vary based on the algorithm. Examples of autoexposure algorithms
        include "Maki 2003" used on MER, MSL ECAMs, M2020 ECAMS;
        "Maurice 2012" used on MSL ChemCam; "Smith 1997" used on Mars
        Pathfinder Imager.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing">
        <xs:sequence>
          <xs:element name="auto_exposure_data_cut" type="img:auto_exposure_data_cut" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="auto_exposure_percent" type="img:auto_exposure_percent" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="auto_exposure_pixel_fraction" type="img:auto_exposure_pixel_fraction" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="auto_exposure_lower_threshold" type="img:auto_exposure_lower_threshold" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="auto_exposure_lower_limit" type="img:auto_exposure_lower_limit" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="auto_exposure_roi_first_line" type="img:auto_exposure_roi_first_line" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="auto_exposure_roi_first_sample" type="img:auto_exposure_roi_first_sample" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="auto_exposure_roi_lines" type="img:auto_exposure_roi_lines" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="auto_exposure_roi_samples" type="img:auto_exposure_roi_samples" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="auto_exposure_upper_threshold" type="img:auto_exposure_upper_threshold" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="auto_exposure_upper_limit" type="img:auto_exposure_upper_limit" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="max_auto_exposure_iteration_count" type="img:max_auto_exposure_iteration_count" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="exposure_table" type="img:exposure_table" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="exposure_table_update_flag" type="img:exposure_table_update_flag" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="valid_maximum_pixel" type="img:valid_maximum_pixel" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="valid_minimum_pixel" type="img:valid_minimum_pixel" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Brightness_Correction">
    <xs:annotation>
      <xs:documentation>The Brightness_Correction class describes
        brightness corrections that were applied to an image or mosaic.
        Brightness correction is the process of adjusting the DN values
        of adjacent frames in a mosaic so they match visually. It may
        also involve contrast or vignetting adjustments. The result may
        no longer be radiometrically calibrated due to the adjustments.
        The processing_algorithm child of Brightness_Correction
        describes the type of brightness correction, and should
        correspond to the classes within Brightness_Correction_Image. If
        the algorithm is "MIXED", multiple algorithms were used, in
        which case the specific information in each
        Brightness_Correction_Image must be used.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing">
        <xs:sequence>
          <xs:element name="Brightness_Correction_File" type="img:Brightness_Correction_File" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="Brightness_Correction_Image" type="img:Brightness_Correction_Image" minOccurs="1" maxOccurs="unbounded"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Brightness_Correction_File">
    <xs:annotation>
      <xs:documentation>The Brightness_Correction_File identifies a file
        containing brightness correction information. The project SIS
        should define the format of this file. Correction information
        may appear in the file, in instances of the
        Brightness_Correction_Image class, or both (if both, they should
        be consistent).</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:restriction base="img:Data_Processing_File">
        <xs:sequence>
          <xs:element name="description" type="pds:description" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:choice minOccurs="0" maxOccurs="1">
            <xs:element ref="pds:Internal_Reference"> </xs:element>
            <xs:element ref="pds:External_Reference"> </xs:element>
          </xs:choice>
          <xs:element name="name" type="pds:name" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Brightness_Correction_HSI_Linear">
    <xs:annotation>
      <xs:documentation>The Brightness_Correction_HSI_Linear class works
        just like Brightness_Correction_Linear, except that the color
        image is first converted to HSI (Hue, Saturation, Intensity)
        space, the correction is applied only to Intensity, and then the
        result is converted back to RGB space.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="brightness_scale" type="img:brightness_scale" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="brightness_offset" type="img:brightness_offset" minOccurs="1" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Brightness_Correction_Image">
    <xs:annotation>
      <xs:documentation>The Brighness_Correction_Image class describes
        the brightness correction that was applied to a single image,
        whether alone or part of a mosaic. The image this correction
        applies to may be identified via the enclosed
        Internal_Reference, or via the order in which the
        Brightness_Correction_Image objects appear (which matches the
        order given in Input_Product_List).</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="pds:Internal_Reference" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:choice minOccurs="1" maxOccurs="1">
        <xs:element name="Brightness_Correction_Linear" type="img:Brightness_Correction_Linear"> </xs:element>
        <xs:element name="Brightness_Correction_HSI_Linear" type="img:Brightness_Correction_HSI_Linear"> </xs:element>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Brightness_Correction_Linear">
    <xs:annotation>
      <xs:documentation>The Brightness_Correction_Linear class describes
        a simple linear brightness correction, with an additive
        (brightness_offset) and multiplicative (brightness_scale) factor
        applied. The result is: output = input * brightness_scale +
        brightness_offset. If there are multiple bands, the same
        correction is applied to each band.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="brightness_scale" type="img:brightness_scale" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="brightness_offset" type="img:brightness_offset" minOccurs="1" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Col_Sum">
    <xs:annotation>
      <xs:documentation>Describes a Column Summation product, which is a
        single row containing the sum of all pixels in each column of
        the image.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="download_priority" type="img:download_priority" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="product_flag" type="img:product_flag" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Color_Filter_Array">
    <xs:annotation>
      <xs:documentation>The Color_Filter_Array class describes whether
        or not an image was acquired using a Color Filter Array (CFA)
        and if so, whether and how the CFA pattern was removed. A CFA is
        a method for making color images using one exposure on a single
        sensor plane, where microfilters of different wavelengths are
        put in front of pixels in a specific pattern. The most common
        pattern is the Bayer pattern, which has a red, blue, and two
        green pixels in every 2x2 pixel square. Although generally used
        for RGB color, CFA filters can be of any number and wavelength
        (see color_filter_array_type).</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing">
        <xs:sequence>
          <xs:element name="color_filter_array_type" type="img:color_filter_array_type" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="color_filter_array_state" type="img:color_filter_array_state" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
        <!-- Begin assert statements for schematron - Enumerated Values -->
        <!-- <xs:assert test="img:color_filter_array_type = ('Bayer RGGB', 'None')"/> -->
        <!-- <xs:assert test="img:color_filter_array_state = ('Decoded', 'Encoded', 'No CFA')"/> -->
        <!-- End assert statements for schematron - Enumerated Values -->
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Color_Processing">
    <xs:annotation>
      <xs:documentation>The Color_Processing class contains parameters
        describing color correction or processing and how the image is
        represented in color.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing">
        <xs:sequence>
          <xs:element name="color_space" type="img:color_space" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="color_component" type="img:color_component" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="illuminant" type="img:illuminant" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="encoded_display_gamma" type="img:encoded_display_gamma" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="color_dn_scaling_method" type="img:color_dn_scaling_method" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="color_dn_scaling_factor" type="img:color_dn_scaling_factor" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="Onboard_Responsivity" type="img:Onboard_Responsivity" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="Onboard_Color_Matrix" type="img:Onboard_Color_Matrix" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Commanded_Parameters">
    <xs:annotation>
      <xs:documentation>The Commanded_Parameters class contains
        attributes used to identify or describe the commands sent to a
        spacecraft to perform one or more actions resulting in the
        acquisition of the current data product. These are distinct from
        similar values in the root Imaging class which indicate the
        state of the image as acquired.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="description" type="pds:description" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Brightness_Correction" type="img:Brightness_Correction" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Col_Sum" type="img:Col_Sum" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Color_Filter_Array" type="img:Color_Filter_Array" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Color_Processing" type="img:Color_Processing" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Dark_Current_Correction" type="img:Dark_Current_Correction" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Data_Quality" type="img:Data_Quality" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element ref="img:Detector" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Downsampling" type="img:Downsampling" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Exposure" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Flat_Field_Correction" type="img:Flat_Field_Correction" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element ref="img:Focus" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element name="Focus_Stack" type="img:Focus_Stack" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element name="Frame" type="img:Frame" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:High_Dynamic_Range" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element name="Histogram" type="img:Histogram" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Illumination" type="img:Illumination" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Image_Filter" type="img:Image_Filter" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Image_Mask" type="img:Image_Mask" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Onboard_Compression" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element ref="img:Optical_Filter" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element name="Optical_Properties" type="img:Optical_Properties" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Pointing_Correction" type="img:Pointing_Correction" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Radiometric_Correction" type="img:Radiometric_Correction" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Reference_Pixel" type="img:Reference_Pixel" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Row_Sum" type="img:Row_Sum" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Sampling" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Shutter_Subtraction" type="img:Shutter_Subtraction" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Spatial_Filter" type="img:Spatial_Filter" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Subframe" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Thumbnail" type="img:Thumbnail" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Tiling" type="img:Tiling" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element name="Video" type="img:Video" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Companding">
    <xs:annotation>
      <xs:documentation> The Companding class describes whether or not
        data is or has had its bit depth reduced (for example conversion
        from 12 to 8 bits via a lookup table or bit scaling), the venue
        where it occurred (Software or Hardware), and the method used to
        complete the companding. The processing_algorithm attribute
        specifies how data was companded. Generally this will either be
        via a lookup table (such as a square root encoding), or by
        shifting bits to preserve the high order bits and discard the
        low order bits. The value of this keyword is mission specific
        but there are recommended values that should apply across
        missions when possible: NONE - no scaling. LUTn - use the
        numbered lookup table. Lookup tables are defined in the mission
        SIS. It is preferred for "n" to be a number but it could be a
        name, for example LUT_MMM_3 to indicate LUT 3 for the MMM
        instruments (on MSL). MSB_BITn - Shift to make bit "n" the most
        significant. Bits start numbering at 0 so MSB_BIT7 means no
        shift for a 12->8 bit companding, while MSB_BIT11 means to shift
        right 4 bits for a 12->8 bit companding. AUTOSHIFT - Data should
        be shifted to preserve the highest value. This value should only
        appear in a command echo; one of the MSB_BITn values should be
        used in downlinked data to specify what the actual shift
        was.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing">
        <xs:sequence>
          <xs:element name="companding_state" type="img:companding_state" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="early_scaling" type="img:early_scaling" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="Companding_File" type="img:Companding_File" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="Companding_Table" type="img:Companding_Table" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
        <!-- Begin assert statements for schematron - Enumerated Values -->
        <!-- <xs:assert test="img:companding_state = ('Companded', 'Expanded', 'None')"/> -->
        <!-- End assert statements for schematron - Enumerated Values -->
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Companding_File">
    <xs:annotation>
      <xs:documentation>The Companding _File class specifies the file
        containing the decompanding (inverse LUT) table used to process
        the data.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:restriction base="img:Data_Processing_File">
        <xs:sequence>
          <xs:element name="description" type="pds:description" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:choice minOccurs="0" maxOccurs="1">
            <xs:element ref="pds:Internal_Reference"> </xs:element>
            <xs:element ref="pds:External_Reference"> </xs:element>
          </xs:choice>
          <xs:element name="name" type="pds:name" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Companding_Table">
    <xs:annotation>
      <xs:documentation>The Companding_Table class specifies the look up
        table used to compand the data.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing_File">
        <xs:sequence>
          <xs:element name="Companding_Table_Mapping" type="img:Companding_Table_Mapping" minOccurs="1" maxOccurs="unbounded"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Companding_Table_Mapping">
    <xs:annotation>
      <xs:documentation>The Companding_Table_Mapping class specifies the
        mapping between the input DN range and the output DN as the data
        are companded.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="input_dn_min" type="img:input_dn_min" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="input_dn_max" type="img:input_dn_max" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="output_dn" type="img:output_dn" minOccurs="1" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Correction_Parameter">
    <xs:annotation>
      <xs:documentation> The Correction_Parameter class specifies
        identifier(s) and value for a data correction parameter
        applicable to the parent class.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:restriction base="img:List_Index_No_Units_Imaging">
        <xs:sequence>
          <xs:choice minOccurs="1" maxOccurs="3">
            <xs:element name="sequence_number" type="img:sequence_number"> </xs:element>
            <xs:element name="name" type="pds:name"> </xs:element>
            <xs:element name="id" type="img:id"> </xs:element>
          </xs:choice>
          <xs:choice minOccurs="1" maxOccurs="1">
            <xs:element name="value_number" type="img:value_number"> </xs:element>
            <xs:element name="value_string" type="img:value_string"> </xs:element>
          </xs:choice>
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Dark_Current_Correction">
    <xs:annotation>
      <xs:documentation>Specifies how dark current removal was performed
        on this image.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing">
        <xs:sequence>
          <xs:element name="striping_count" type="img:striping_count" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="striping_overlap_rows" type="img:striping_overlap_rows" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Data_Processing">
    <xs:annotation>
      <xs:documentation>The Data_Processing class contains attributes
        describing how processing and/or calibration was performed on a
        data product. It is not intended to be used on its own; rather
        it is intended to be extended by classes specific to a
        particular type of processing, such as Shutter_Subtraction,
        Flat_Field_Correction, Companding, etc. The attributes of this
        class thus become attributes of the extension class.
        </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="active_flag" type="img:active_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="processing_venue" type="img:processing_venue" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="processing_algorithm" type="img:processing_algorithm" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="sequence_number" type="img:sequence_number" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Data_Processing_File">
    <xs:annotation>
      <xs:documentation>The Data_Processing_File class contain
        attributes which identify a file containing calibration data
        that was applied to the science data. It is not intended to be
        used on its own; rather it is intended to be extended by classes
        specific to a particular type of file, such as Flat_Field_File.
        Note that the "name" attribute is the name of the file; this
        attribute should only be used if the file is either not included
        in an archive, or if the delivery status is unknown by the data
        provider. The External_Reference or Internal_Reference class
        should be used instead of name if at all
        possible.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="description" type="pds:description" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:choice minOccurs="0" maxOccurs="1">
        <xs:element ref="pds:Internal_Reference"> </xs:element>
        <xs:element ref="pds:External_Reference"> </xs:element>
      </xs:choice>
      <xs:element name="name" type="pds:name" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Data_Quality">
    <xs:annotation>
      <xs:documentation>The Data_Quality class contain attributes which
        identify quality issues in the observation including saturated
        pixels, hot pixels, nonlinear pixels and flags for listing
        states for example the observation was out of focus, the
        pointing was incorrect, the defined zoomed was not achieved, and
        other states listed below. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="dq_band" type="img:dq_band" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="dq_bayer_cell" type="img:dq_bayer_cell" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="pds:comment" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Hot_Pixel" type="img:Hot_Pixel" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Saturated_Pixel" type="img:Saturated_Pixel" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Nonlinear_Pixel" type="img:Nonlinear_Pixel" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="no_signal_count" type="img:no_signal_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="above_aft_flag" type="img:above_aft_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="below_aft_flag" type="img:below_aft_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="full_well_limit_flag" type="img:full_well_limit_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="missing_temperature_flag" type="img:missing_temperature_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="out_of_focus_flag" type="img:out_of_focus_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="saturated_flag" type="img:saturated_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="sequence_terminated_flag" type="img:sequence_terminated_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="wrong_filter_flag" type="img:wrong_filter_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="wrong_pointing_flag" type="img:wrong_pointing_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="wrong_zoom_flag" type="img:wrong_zoom_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="zero_value_pixels_flag" type="img:zero_value_pixels_flag" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Detector">
    <xs:annotation>
      <xs:documentation>The Detector class contains attributes
        describing the state of the instrument detector. These are
        values directly read from the detector and do not necessarily
        reflect the state of the image after onboard processing. For
        example, the entire image may be read into memory and then
        subframed in software, in which case the subframe attributes in
        this class reflect the entire image (as read from the detector),
        whereas those in the Subframe class represent the final subframe
        results.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="first_line" type="img:first_line" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="first_sample" type="img:first_sample" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="lines" type="img:lines" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="samples" type="img:samples" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="detector_to_image_rotation" type="img:detector_to_image_rotation" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="detector_to_image_flip" type="img:detector_to_image_flip" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="erase_count" type="img:erase_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="readout_rate" type="img:readout_rate" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="gain_mode_id" type="img:gain_mode_id" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="gain_number" type="img:gain_number" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="analog_offset" type="img:analog_offset" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="bad_pixel_replacement_flag" type="img:bad_pixel_replacement_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="bad_pixel_replacement_table_id" type="img:bad_pixel_replacement_table_id" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="instrument_idle_timeout" type="img:instrument_idle_timeout" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="early_image_return" type="img:early_image_return" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="parameter_table_id" type="img:parameter_table_id" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Special_Point" type="img:Special_Point" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="pds:Internal_Reference" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test="img:detector_to_image_flip = ('Horizontal', 'None', 'Vertical')"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </xs:complexType>

  <xs:complexType name="Device_Component_State">
    <xs:annotation>
      <xs:documentation>The Device_Component_State class describes the
        state of one component of an imaging instrument or other imaging
        device. The meaning of "state" is
        device-specific.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Device_Parameters">
        <xs:sequence>
          <xs:element name="device_state" type="img:device_state" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Device_Component_States">
    <xs:annotation>
      <xs:documentation>The Device_Component_States class provides a
        container for the set of states of a component of an imaging
        instrument or other imaging device.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Device_Component_State" type="img:Device_Component_State" minOccurs="1" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Device_Current">
    <xs:annotation>
      <xs:documentation>The Device_Current class provides the current of
        some point on an imaging instrument or other imaging
        device.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Device_Parameters">
        <xs:sequence>
          <xs:element name="current_value" type="img:current_value" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Device_Currents">
    <xs:annotation>
      <xs:documentation>The Device_Currents class provides a container
        for the set of currents of an imaging instrument or other
        imaging device.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Device_Current" type="img:Device_Current" minOccurs="1" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Device_Motor_Count">
    <xs:annotation>
      <xs:documentation>The Device_Motor_Count class describes the raw
        motor count of one actuator on an imaging instrument or other
        imaging device (such as a filter wheel, focus motor, or zoom
        motor). This information should typically be reported in a more
        specific and useable form in other classes, such as a filter
        number or wavelength in the Optical_Filter class or a focus
        distnace in the Focus class.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Device_Parameters">
        <xs:sequence>
          <xs:element name="motor_count" type="img:motor_count" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Device_Motor_Counts">
    <xs:annotation>
      <xs:documentation>The Device_Motor_Counts class provides a
        container for the set of raw motor counts of actuators on an
        imaging instrument or other imaging device (such as a filter
        wheel, focus motor, or zoom motor).</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Device_Motor_Count" type="img:Device_Motor_Count" minOccurs="1" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Device_Parameters">
    <xs:annotation>
      <xs:documentation>The Device_Parameters class identifies where a
        measurement was made. It may refer to an individual imaging
        instrument, imaging instrument device, or some defined point on
        the instrument or device. The class is intended to be extended
        (for example, by Device_Temperature) to add the associated
        measurement rather than being used directly.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:choice minOccurs="1" maxOccurs="3">
        <xs:element name="device_name" nillable="true" type="img:device_name"> </xs:element>
        <xs:element name="device_id" type="img:device_id"> </xs:element>
        <xs:element name="sequence_number" type="img:sequence_number"> </xs:element>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Device_Temperature">
    <xs:annotation>
      <xs:documentation>The Device_Temperature class provides a
        container for the temperature of some point on an imaging
        instrument or other imaging device. </xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Device_Parameters">
        <xs:sequence>
          <xs:element name="raw_count" type="img:raw_count" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="temperature_value" nillable="true" type="img:temperature_value" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="temperature_status" type="img:temperature_status" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Device_Temperatures">
    <xs:annotation>
      <xs:documentation>The Device_Temperatures class provides a
        container for the set of temperatures of an imaging instrument
        or other imaging device. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Device_Temperature" type="img:Device_Temperature" minOccurs="1" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Device_Voltage">
    <xs:annotation>
      <xs:documentation>The Device_Voltage class provides the voltage of
        some point on an imaging instrument or other imaging device.
        </xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Device_Parameters">
        <xs:sequence>
          <xs:element name="voltage_value" type="img:voltage_value" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Device_Voltages">
    <xs:annotation>
      <xs:documentation>The Device_Voltage class provides a container
        for the set of voltages of an imaging instrument or other
        imaging device.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Device_Voltage" type="img:Device_Voltage" minOccurs="1" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Downsampling">
    <xs:annotation>
      <xs:documentation> The Downsampling class describes whether or not
        downsampling occurred, the venue where it occurred (Software or
        Hardware), the method used to downsample, and the pixel
        averaging dimensions. A downsampled image is a smaller version
        of the image, resulting in reduced resolution of the same
        coverage area. The processing_algorithm attribute specifies the
        pixel resolution downsample method used. This varies by mission,
        but examples from MSL include: 'Mean' - Downsampling done in
        software by calculation of the mean., 'Conditional' - Use
        hardware binning if downsampling (by mean calculation) and
        subframe arguments are consistent.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing">
        <xs:sequence>
          <xs:element name="Pixel_Averaging_Dimensions" type="img:Pixel_Averaging_Dimensions" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Exposure">
    <xs:annotation>
      <xs:documentation>The Exposure class contains attributes
        identifying the image instrument exposure configuration and
        image exposure values. As a child of the Imaging class, these
        attribute values identify the actual exposure values when the
        image was taken. As a child of the Commanded_Parameters class,
        these attribute values are those that were commanded to the
        spacecraft at the time the image was taken.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="exposure_count" type="img:exposure_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="exposure_duration" type="img:exposure_duration" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="exposure_duration_count" type="img:exposure_duration_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="exposure_type" type="img:exposure_type" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="exposure_scale_factor" type="img:exposure_scale_factor" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="exposure_coadd_count" type="img:exposure_coadd_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="exposure_readout_count" type="img:exposure_readout_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Autoexposure" type="img:Autoexposure" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test="img:exposure_type = ('Auto', 'Auto Last', 'Manual', 'Manual Last', 'None', 'Test')"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </xs:complexType>

  <xs:complexType name="Flat_Field_Correction">
    <xs:annotation>
      <xs:documentation> The Flat_Field_Correction class specifies how
        flat-field correction was performed on this image. This can be
        done either algorithmically, using a
        Radial_Flat_Field_Correction, or using a
        Flat_Field_File.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing">
        <xs:sequence>
          <xs:element name="Radial_Flat_Field_Function" type="img:Radial_Flat_Field_Function" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="Flat_Field_File" type="img:Flat_Field_File" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Flat_Field_File">
    <xs:annotation>
      <xs:documentation>The Flat_Field_File class specifies the image
        used for flat field correction. The image is divided by this
        flat field image in order to apply the flat field correction
        (which is the opposite of Radial_Flat_Field_Function).
        </xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:restriction base="img:Data_Processing_File">
        <xs:sequence>
          <xs:element name="description" type="pds:description" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:choice minOccurs="0" maxOccurs="1">
            <xs:element ref="pds:Internal_Reference"> </xs:element>
            <xs:element ref="pds:External_Reference"> </xs:element>
          </xs:choice>
          <xs:element name="name" type="pds:name" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Focus">
    <xs:annotation>
      <xs:documentation>The Focus class contains attributes that
        describe the focus or autofocus parameters for an observation.
        As a child of Commanded_Parameters, these indicate the focus
        settings used to command the instrument. Otherwise, they
        indicate the actual focus used by the
        observation.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="focus_mode" type="img:focus_mode" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="focus_position" type="img:focus_position" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="focus_position_count" type="img:focus_position_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="autofocus_step_size" type="img:autofocus_step_size" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="autofocus_step_count" type="img:autofocus_step_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="focus_distance" type="img:focus_distance" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="focus_initialization_flag" type="img:focus_initialization_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="minimum_focus_distance" type="img:minimum_focus_distance" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="best_focus_distance" type="img:best_focus_distance" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="maximum_focus_distance" type="img:maximum_focus_distance" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Focus_Stack">
    <xs:annotation>
      <xs:documentation>The Focus_Stack class contains attributes that
        describe a set of images taken at different focus settings,
        which are often merged to create a best-focus image or combined
        to extract range information. Focus stacks are also sometimes
        called ZStacks. </xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing">
        <xs:sequence>
          <xs:element name="focus_stack_flag" type="img:focus_stack_flag" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="frame_count" type="img:frame_count" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="frame_index" type="img:frame_index" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="focus_merge_blending_flag" type="img:focus_merge_blending_flag" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="focus_merge_registration_flag" type="img:focus_merge_registration_flag" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="delta_focus_count" type="img:delta_focus_count" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Frame">
    <xs:annotation>
      <xs:documentation>The Frame class contains attributes providing
        information specific to an image frame. A frame consists of a
        sequence of measurements made over a specified time interval,
        and may include measurements from different instrument modes. In
        the context of Frame, product_flag refers to the actual
        image.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="frame_id" type="img:frame_id" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="frame_type_name" type="img:frame_type_name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="product_flag" type="img:product_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="observation_number" type="img:observation_number" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test=")"/> -->
    <!-- <xs:assert test="img:frame_type_name = ('Mono', 'Stereo')"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </xs:complexType>

  <xs:complexType name="High_Dynamic_Range">
    <xs:annotation>
      <xs:documentation>Specifies parameters related to High Dynamic
        Range processing, which combines multiple exposures of different
        lengths into a single product with a greater dynamic range than
        any of the inputs.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing">
        <xs:sequence>
          <xs:element name="hdr_acquisition_mode" type="img:hdr_acquisition_mode" minOccurs="1" maxOccurs="1"> </xs:element>
          <xs:element name="hdr_frame_count" type="img:hdr_frame_count" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="hdr_clipping_threshold" type="img:hdr_clipping_threshold" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="High_Dynamic_Range_Exposure" type="img:High_Dynamic_Range_Exposure" minOccurs="0" maxOccurs="unbounded"> </xs:element>
        </xs:sequence>
        <!-- Begin assert statements for schematron - Enumerated Values -->
        <!-- <xs:assert test="img:hdr_acquisition_mode = ('Multiframe', 'None', 'Piecewise', 'Single')"/> -->
        <!-- End assert statements for schematron - Enumerated Values -->
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="High_Dynamic_Range_Exposure">
    <xs:annotation>
      <xs:documentation>Specifies parameters for each individual
        exposure in an HDR image.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="exposure_duration" type="img:exposure_duration" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="exposure_duration_count" type="img:exposure_duration_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="exposure_time_delta" type="img:exposure_time_delta" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="pds:Internal_Reference" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Histogram">
    <xs:annotation>
<xs:documentation>Describes a Histogram product.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="download_priority" type="img:download_priority" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="product_flag" type="img:product_flag" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Hot_Pixel">
    <xs:annotation>
      <xs:documentation>Specifies a data class that describes pixels
        whose responsivity on the sensor exceeds by some amount that of
        the average detector element. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="pixel_count" type="img:pixel_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="threshold_factor" type="img:threshold_factor" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ICER_Parameters">
    <xs:annotation>
      <xs:documentation> The ICER_Parameters class contains attributes
        describing onboard compression parameters specific to Joint
        Photographic Experts Group (JPEG) image compression. ICER is a
        wavelet-based image compression file format used by the NASA
        Mars Rovers. ICER has both lossy and lossless compression
        modes.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="wavelet_filter" type="img:wavelet_filter" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="icer_quality" type="img:icer_quality" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="decomposition_stages" type="img:decomposition_stages" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="segment_count" type="img:segment_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Image_Compression_Segment" type="img:Image_Compression_Segment" minOccurs="0" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Illumination">
    <xs:annotation>
      <xs:documentation> The Illumination class provides attributes
        describing the illumination sources used to illuminate the
        imaging target.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="name" type="pds:name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="illumination_mode" type="img:illumination_mode" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="LED_Illumination_Source" type="img:LED_Illumination_Source" minOccurs="0" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Image_Compression_Segment">
    <xs:annotation>
      <xs:documentation> The Image_Compression_Segment class provides
        attributes describing each segment into which data was
        partitioned for error containment purposes as part of the
        compression process. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="segment_number" type="img:segment_number" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="first_line" type="img:first_line" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="first_sample" type="img:first_sample" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="lines" type="img:lines" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="samples" type="img:samples" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="segment_quality" type="img:segment_quality" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="segment_status" type="img:segment_status" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="segment_corrupted_flag" type="img:segment_corrupted_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="missing_pixel_count" type="img:missing_pixel_count" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Image_Filter">
    <xs:annotation>
      <xs:documentation>The Image_Filter class specifies what kind of
        image filtering has been done to the image. Image filtering
        looks at image intensity rather the geometry of pixels (cf.
        Spatial_Filter).</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing">
        <xs:sequence>
          <xs:element name="filter_window_line" type="img:filter_window_line" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="filter_window_sample" type="img:filter_window_sample" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="max_filter_window_line" type="img:max_filter_window_line" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="max_filter_window_sample" type="img:max_filter_window_sample" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="min_filter_window_line" type="img:min_filter_window_line" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="min_filter_window_sample" type="img:min_filter_window_sample" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Image_Mask">
    <xs:annotation>
      <xs:documentation>The Image_Mask specifies how pixels were masked
        (removed) from an image. Masks are typically used to suppress
        results in areas where they don't belong, for example masking
        off spacecraft hardware or removing pixels that did not meet
        some processing threshold. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="active_flag" type="img:active_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="horizon_mask_elevation" type="img:horizon_mask_elevation" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="processing_venue" type="img:processing_venue" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="processing_algorithm" type="img:processing_algorithm" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="sequence_number" type="img:sequence_number" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Image_Mask_File" type="img:Image_Mask_File" minOccurs="0" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Image_Mask_File">
    <xs:annotation>
      <xs:documentation>This class identifies a file used for image
        masking. The mask_type defines the type of file; if mask_type is
        missing then "image" is assumed.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="description" type="pds:description" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:choice minOccurs="0" maxOccurs="1">
        <xs:element ref="pds:Internal_Reference"> </xs:element>
        <xs:element ref="pds:External_Reference"> </xs:element>
      </xs:choice>
      <xs:element name="name" type="pds:name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="mask_type" type="img:mask_type" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="horizon_mask_elevation" type="img:horizon_mask_elevation" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="mask_transparent_value" type="img:mask_transparent_value" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test="img:mask_type = ('description', 'image')"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </xs:complexType>

  <xs:complexType name="Imaging">
    <xs:annotation>
      <xs:documentation>The Imaging class contains classes and
        attributes describing both the image product itself and the
        imaging instrument. Image product information can include
        exposure duration, filters, data correction, sampling, frame,
        sub-frames, and how the product was derived. For the imaging
        instrument, information can be provided describing the dynamic
        physical or operating characteristics of the imaging
        instrument.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="pds:Local_Internal_Reference" minOccurs="1" maxOccurs="unbounded"> </xs:element>
      <xs:element name="Brightness_Correction" type="img:Brightness_Correction" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Col_Sum" type="img:Col_Sum" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Color_Filter_Array" type="img:Color_Filter_Array" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Color_Processing" type="img:Color_Processing" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Dark_Current_Correction" type="img:Dark_Current_Correction" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Data_Quality" type="img:Data_Quality" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element ref="img:Detector" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Downsampling" type="img:Downsampling" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Exposure" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Flat_Field_Correction" type="img:Flat_Field_Correction" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element ref="img:Focus" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element name="Focus_Stack" type="img:Focus_Stack" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element name="Frame" type="img:Frame" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:High_Dynamic_Range" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element name="Histogram" type="img:Histogram" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Illumination" type="img:Illumination" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Image_Filter" type="img:Image_Filter" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Image_Mask" type="img:Image_Mask" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Onboard_Compression" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element ref="img:Optical_Filter" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element name="Optical_Properties" type="img:Optical_Properties" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Pointing_Correction" type="img:Pointing_Correction" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Radiometric_Correction" type="img:Radiometric_Correction" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Reference_Pixel" type="img:Reference_Pixel" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Row_Sum" type="img:Row_Sum" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Sampling" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Shutter_Subtraction" type="img:Shutter_Subtraction" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Spatial_Filter" type="img:Spatial_Filter" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Subframe" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Tiling" type="img:Tiling" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element name="Thumbnail" type="img:Thumbnail" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Video" type="img:Video" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Instrument_State" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:element name="Commanded_Parameters" type="img:Commanded_Parameters" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Instrument_State">
    <xs:annotation>
      <xs:documentation>The Instrument_State class contains classes
        providing the values of any dynamic physical or operating
        characteristics of the imaging instruments.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Device_Component_States" type="img:Device_Component_States" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Device_Currents" type="img:Device_Currents" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Device_Motor_Counts" type="img:Device_Motor_Counts" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Device_Temperatures" type="img:Device_Temperatures" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Device_Voltages" type="img:Device_Voltages" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="JPEG_Parameters">
    <xs:annotation>
      <xs:documentation> The JPEG_Parameters class contains attributes
        describing onboard compression parameters specific to Joint
        Photographic Experts Group (JPEG) image
        compression.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="color_subsampling_mode" type="img:color_subsampling_mode" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="jpeg_quality" type="img:jpeg_quality" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="jpeg_parameter" type="img:jpeg_parameter" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Image_Compression_Segment" type="img:Image_Compression_Segment" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test="img:color_subsampling_mode = ('4:2:2', '4:4:4', 'Grayscale')"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </xs:complexType>

  <xs:complexType name="JPEG_Progressive_Parameters">
    <xs:annotation>
      <xs:documentation> The JPEG_Progressive_Parameters class contains
        attributes describing an interlaced progressive JPEG format, in
        which data is compressed in multiple passes of progressively
        higher detail. This is ideal for large images that will be
        displayed while downloading over a slow connection, allowing a
        reasonable preview after receiving only a portion of the
        data.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:JPEG_Parameters">
        <xs:sequence>
          <xs:element name="progressive_stage" type="img:progressive_stage" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
        <!-- Begin assert statements for schematron - Enumerated Values -->
        <!-- <xs:assert test="img:color_subsampling_mode = ('4:2:2', '4:4:4', 'Grayscale')"/> -->
        <!-- End assert statements for schematron - Enumerated Values -->
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="LED_Illumination_Source">
    <xs:annotation>
      <xs:documentation>The LED_Illumination_Source class provides
        attributes describing an individual LED used to illuminate an
        imaging target.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="name" type="pds:name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="description" type="pds:description" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="illumination_state" type="img:illumination_state" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="illumination_wavelength" type="img:illumination_wavelength" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test="img:illumination_state = ('Off', 'On')"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </xs:complexType>

  <xs:complexType name="LOCO_Parameters">
    <xs:annotation>
      <xs:documentation> The LOCO_Parameters class contains attributes
        describing onboard compression parameters specific to Low
        Complexity Lossless Compression (LOCO) image compression, a
        lossless submode of ICER</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="wavelet_filter" type="img:wavelet_filter" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="missing_pixel_count" type="img:missing_pixel_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="segment_count" type="img:segment_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Image_Compression_Segment" type="img:Image_Compression_Segment" minOccurs="0" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="List_Index_No_Units_Imaging">
    <xs:annotation>
      <xs:documentation>Used when the list values have no units.
        </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:choice minOccurs="1" maxOccurs="3">
        <xs:element name="sequence_number" type="img:sequence_number"> </xs:element>
        <xs:element name="name" type="pds:name"> </xs:element>
        <xs:element name="id" type="img:id"> </xs:element>
      </xs:choice>
      <xs:choice minOccurs="1" maxOccurs="1">
        <xs:element name="value_number" type="img:value_number"> </xs:element>
        <xs:element name="value_string" type="img:value_string"> </xs:element>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Nonlinear_Pixel">
    <xs:annotation>
      <xs:documentation>A data class describing pixels where electronic
        non-linear behavior may occur. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="pixel_count" type="img:pixel_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="threshold_value" type="img:threshold_value" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Onboard_Color_Matrix">
    <xs:annotation>
      <xs:documentation>The Onboard_Color_Matrix class represents a 3x3
        matrix that is used onboard to perform color correction. It is
        done after de-Bayering, as all three color bands are needed for
        each pixel. The first three elements are multiplied by the R,G,B
        (respectively) pixel values and summed to get the output Red
        pixel value. Similarly, the second three create the output
        Green, and the last three the output Blue. If the label is not
        present, no correction was performed.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="onboard_R_r" type="img:onboard_R_r" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="onboard_R_g" type="img:onboard_R_g" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="onboard_R_b" type="img:onboard_R_b" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="onboard_G_r" type="img:onboard_G_r" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="onboard_G_g" type="img:onboard_G_g" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="onboard_G_b" type="img:onboard_G_b" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="onboard_B_r" type="img:onboard_B_r" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="onboard_B_g" type="img:onboard_B_g" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="onboard_B_b" type="img:onboard_B_b" minOccurs="1" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Onboard_Compression">
    <xs:annotation>
      <xs:documentation>The Onboard_Compression class contains
        attributes describing the compression performed onboard a
        spacecraft or instrument for data storage and
        transmission.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="onboard_compression_class" type="img:onboard_compression_class" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="onboard_compression_mode" type="img:onboard_compression_mode" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="onboard_compression_type" type="img:onboard_compression_type" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="onboard_compression_rate" type="img:onboard_compression_rate" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="onboard_compression_ratio" type="img:onboard_compression_ratio" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="onboard_compression_quality" type="img:onboard_compression_quality" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="onboard_compression_venue" type="img:onboard_compression_venue" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="deferred_flag" type="img:deferred_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="error_pixel_count" type="img:error_pixel_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="ICER_Parameters" type="img:ICER_Parameters"> </xs:element>
        <xs:element name="LOCO_Parameters" type="img:LOCO_Parameters"> </xs:element>
        <xs:element name="JPEG_Parameters" type="img:JPEG_Parameters"> </xs:element>
        <xs:element name="JPEG_Progressive_Parameters" type="img:JPEG_Progressive_Parameters"> </xs:element>
        <xs:element name="StarPixel_Flexible_Parameters" type="img:StarPixel_Flexible_Parameters"> </xs:element>
        <xs:element name="StarPixel_Lossless_Parameters" type="img:StarPixel_Lossless_Parameters"> </xs:element>
      </xs:choice>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test="img:onboard_compression_class = ('Lossless', 'Lossy', 'Uncompressed')"/> -->
    <!-- <xs:assert test="img:onboard_compression_type = ('GZIP', 'H.264 Frame', 'ICER', 'ICT', 'JPEG', 'JPEG Progressive', 'LOCO', 'LZO', 'Lossless', 'MSSS Lossless', 'None', 'StarPixel Flexible', 'StarPixel Lossless')"/> -->
    <!-- <xs:assert test="img:onboard_compression_venue = ('Hardware', 'Software')"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </xs:complexType>

  <xs:complexType name="Onboard_Responsivity">
    <xs:annotation>
      <xs:documentation>The Onboard_Responsivity class specifies factors
        that have been applied to the R, G, and B cells (respectively)
        of the Bayer pattern, before de-Bayering (demosaicking) takes
        place. The intent of these is to approximately balance the
        filters so the de-Bayering process is not skewed, and EDR/ILT
        products look reasonable before full radiometric or color
        correction is done on the ground. If these factors are not
        present, no correction was performed.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="responsivity_factor_r" type="img:responsivity_factor_r" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="responsivity_factor_g" type="img:responsivity_factor_g" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="responsivity_factor_b" type="img:responsivity_factor_b" minOccurs="1" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Optical_Filter">
    <xs:annotation>
      <xs:documentation>The Optical_Filter class defines the filters
        used by the camera optics (not to be confused with image
        processing software filters). The filter may be identified by
        name, identifier, number, or some combination of
        these.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="filter_name" type="img:filter_name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="filter_id" type="img:filter_id" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="filter_number" type="img:filter_number" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="filter_position_count" type="img:filter_position_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="bandwidth" type="img:bandwidth" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="center_filter_wavelength" type="img:center_filter_wavelength" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="array_band_number" type="img:array_band_number" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="comment" type="pds:comment" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="pds:Local_Internal_Reference" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Optical_Properties">
    <xs:annotation>
      <xs:documentation>The Optical_Properties class describes
        properties of the optics used in acquiring the
        image.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="focal_length" type="img:focal_length" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="f_number" type="img:f_number" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="zoom_position" type="img:zoom_position" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Pixel_Averaging_Dimensions">
    <xs:annotation>
      <xs:documentation>The Pixel_Averaging_Dimensions class provides
        the height and width, in pixels, of the area over which pixels
        were averaged prior to image compression.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="height_pixels" type="img:height_pixels" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="width_pixels" type="img:width_pixels" minOccurs="1" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Pointing_Correction">
    <xs:annotation>
      <xs:documentation>The Pointing_Correction class contains
        attributes used to identify and describe the camera model
        transformations completed in order to update pointing
        information of an image or mosaic.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Pointing_Correction_File" type="img:Pointing_Correction_File" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Pointing_Correction_Image" type="img:Pointing_Correction_Image" minOccurs="1" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Pointing_Correction_File">
    <xs:annotation>
      <xs:documentation>The Pointing_Correction_File class identifies a
        file containing pointing correction
        information.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:restriction base="img:Data_Processing_File">
        <xs:sequence>
          <xs:element name="description" type="pds:description" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:choice minOccurs="0" maxOccurs="1">
            <xs:element ref="pds:Internal_Reference"> </xs:element>
            <xs:element ref="pds:External_Reference"> </xs:element>
          </xs:choice>
          <xs:element name="name" type="pds:name" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Pointing_Correction_Image">
    <xs:annotation>
      <xs:documentation>The Pointing_Correction_Image class contains
        attributes used to identify and describe the camera model
        transformations completed in order to update pointing
        information of a single image, whether alone or part of a
        mosaic.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="pointing_model_name" type="img:pointing_model_name" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="pointing_model_solution_id" type="img:pointing_model_solution_id" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Pointing_Model_Parameter" type="img:Pointing_Model_Parameter" minOccurs="0" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Pointing_Model_Parameter">
    <xs:annotation>
      <xs:documentation>The Pointing_Model_Parameter class specifies the
        name and value (numeric) parameters needed by the pointing model
        identified by the pointing_model_name attribute in the
        Pointing_Correction parent class. The meaning of any given
        parameter is defined by the pointing model. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="name" type="pds:name" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="value" type="pds:value" minOccurs="1" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Radial_Flat_Field_Function">
    <xs:annotation>
      <xs:documentation>The Radial_Flat_Field_Function class pecifies
        parameters used to generate a synthetic flat field using a
        simple radial function of the form: r = (x-x_center)^2 +
        (y-y_center)^2 ; flat_field(x,y) = 1 + r0 + r1*r + r2*r^2 +
        r3*r^3 . Note that x is in the sample direction of the image,
        and y is in the line direction. The image is multiplied by this
        function in order to perform a flat field correction (which is
        the opposite of Flat_Field_File). </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="x_center" type="img:x_center" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="y_center" type="img:y_center" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="r0" type="img:r0" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="r1" type="img:r1" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="r2" type="img:r2" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="r3" type="img:r3" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Flat_Field_File" type="img:Flat_Field_File" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Radiometric_Correction">
    <xs:annotation>
      <xs:documentation> The Radiometric_Correction class is a container
        for the type and details of the radiometric calibration
        performed on the product.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing">
        <xs:sequence>
          <xs:element name="radiometric_type" type="img:radiometric_type" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="radiometric_zenith_scaling_factor" type="img:radiometric_zenith_scaling_factor" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="responsivity_r" nillable="true" type="img:responsivity_r" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="responsivity_g" nillable="true" type="img:responsivity_g" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="responsivity_b" nillable="true" type="img:responsivity_b" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="responsivity_pan" nillable="true" type="img:responsivity_pan" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="responsivity_std" nillable="true" type="img:responsivity_std" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="atmospheric_opacity" type="img:atmospheric_opacity" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="atmospheric_opacity_reference" type="img:atmospheric_opacity_reference" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="effective_wavelength" type="img:effective_wavelength" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="iof_conversion_coefficient" type="img:iof_conversion_coefficient" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="iof_conversion_coefficient_std" type="img:iof_conversion_coefficient_std" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="comment" type="pds:comment" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
        <!-- Begin assert statements for schematron - Enumerated Values -->
        <!-- <xs:assert test="img:radiometric_type = ('No CFA', 'Radiance Factor', 'Scaled Spectral Radiance', 'Spectral Radiance')"/> -->
        <!-- End assert statements for schematron - Enumerated Values -->
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Reference_Pixel">
    <xs:annotation>
      <xs:documentation>Describes a Reference Pixel product, which is a
        set of dark, non-imaging pixels used to monitor electronics.
        product_flag.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="download_priority" type="img:download_priority" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="product_flag" type="img:product_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Onboard_Compression" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Row_Sum">
    <xs:annotation>
      <xs:documentation>Describes a Row Summation product, which is a
        single column containing the sum of all pixels in each row of
        the image.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="download_priority" type="img:download_priority" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="product_flag" type="img:product_flag" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Sampling">
    <xs:annotation>
      <xs:documentation> The Sampling class contains attributes and
        classes related to the sampling, scaling, companding, and
        compression or reduction in resolution of
        data.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="crosstrack_summing" type="img:crosstrack_summing" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="downtrack_summing" type="img:downtrack_summing" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="missing_pixel_count" type="img:missing_pixel_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="original_sample_bits" type="img:original_sample_bits" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="sample_bits" type="img:sample_bits" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="sample_bit_mask" type="img:sample_bit_mask" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="sampling_factor" type="img:sampling_factor" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="saturated_pixel_count" type="img:saturated_pixel_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="valid_pixel_count" type="img:valid_pixel_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Companding" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Saturated_Pixel">
    <xs:annotation>
      <xs:documentation>A data class that describes pixels within the
        image have reached or exceeded the maximum pixel value.
        </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="pixel_count" type="img:pixel_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="threshold_value" type="img:threshold_value" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Shutter_Subtraction">
    <xs:annotation>
      <xs:documentation> The Shutter_Subtraction class specifies
        attributes describing the removal from the image of the shutter,
        or fixed-pattern.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing">
        <xs:sequence>
          <xs:element name="shutter_subtraction_mode" type="img:shutter_subtraction_mode" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="exposure_duration_threshold_count" type="img:exposure_duration_threshold_count" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
        <!-- Begin assert statements for schematron - Enumerated Values -->
        <!-- <xs:assert test="img:shutter_subtraction_mode = ('Always', 'Conditional', 'None', 'True')"/> -->
        <!-- End assert statements for schematron - Enumerated Values -->
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Spatial_Filter">
    <xs:annotation>
      <xs:documentation>The Spatial_Filter class specifies what kind of
        spatial filtering has been done on the image. Spatial filtering
        looks at the geometry of pixels (e.g. XYZ or range values)
        rather than their intensity (cf.
        Image_Filter).</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="img:Data_Processing">
        <xs:sequence>
          <xs:element name="filter_window_line" type="img:filter_window_line" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="filter_window_sample" type="img:filter_window_sample" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="max_filter_window_line" type="img:max_filter_window_line" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="max_filter_window_sample" type="img:max_filter_window_sample" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="min_filter_window_line" type="img:min_filter_window_line" minOccurs="0" maxOccurs="1"> </xs:element>
          <xs:element name="min_filter_window_sample" type="img:min_filter_window_sample" minOccurs="0" maxOccurs="1"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Special_Point">
    <xs:annotation>
      <xs:documentation>Defines a special point on the image detector,
        such as the location in pixel space that a co-boresighted
        instrument measures.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="name" type="pds:name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="description" type="pds:description" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="special_line" type="img:special_line" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="special_sample" type="img:special_sample" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="StarPixel_Flexible_Parameters">
    <xs:annotation>
      <xs:documentation> The StarPixel_Flexible_Parameters class
        contains attributes describing onboard compression parameters
        specific to StarPixel Flexible image compression. StarPixel
        Flexible is developed based on StarPixel Lossless and used by
        the JAXA's spacecraft, Hayabusa2. StarPixel Flexible is a lossy
        compression algorithm. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="starpixel_initial_subsampling_interval" type="img:starpixel_initial_subsampling_interval" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="starpixel_degradation" type="img:starpixel_degradation" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Image_Compression_Segment" type="img:Image_Compression_Segment" minOccurs="0" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="StarPixel_Lossless_Parameters">
    <xs:annotation>
      <xs:documentation> The StarPixel_Lossless_Parameters class
        contains attributes describing onboard compression parameters
        specific to StarPixel Lossless image compression. StarPixel
        Lossless is developed based on FELICS and used by the JAXA's
        spacecrafts, Akatsuki and Hayabusa2. StarPixel Lossless is a
        lossless compression algorithm and also known as HIREW.
        </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="starpixel_initial_subsampling_interval" type="img:starpixel_initial_subsampling_interval" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Image_Compression_Segment" type="img:Image_Compression_Segment" minOccurs="0" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Subframe">
    <xs:annotation>
      <xs:documentation> The Subframe class describes the position and
        other optional characteristics of an image subframe, relative to
        the original image. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="first_line" type="img:first_line" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="first_sample" type="img:first_sample" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="lines" type="img:lines" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="samples" type="img:samples" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="line_fov" type="img:line_fov" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="sample_fov" type="img:sample_fov" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="name" type="pds:name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="description" type="pds:description" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="subframe_type" type="img:subframe_type" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test="img:subframe_type = ('Hardware Compatible', 'Hardware Else Software', 'None', 'Software Only', 'Subframe Around Sun', 'Sun Subframe Or Full')"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </xs:complexType>

  <xs:complexType name="Thumbnail">
    <xs:annotation>
      <xs:documentation>Describes a Thumbnail product, which is a
        greatly reduced resolution version of the
        image.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="download_priority" type="img:download_priority" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="frame_id" type="img:frame_id" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="frame_type_name" type="img:frame_type_name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="product_flag" type="img:product_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Onboard_Compression" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Sampling" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Subframe" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test=")"/> -->
    <!-- <xs:assert test="img:frame_type_name = ('Mono', 'Stereo')"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </xs:complexType>

  <xs:complexType name="Tile">
    <xs:annotation>
      <xs:documentation>Contains parameters that describe how an image
        was or will be broken into tiles, before reassembly into a
        whole. This is generally intended for cameras that break up an
        exposure into tiles for transmission, but can also be used to
        describe tiling done by a ground system (e.g. for display
        purposes) if needed. Tiles need not be regular nor do they need
        to cover the entire area, and irregular tiles may overlap. Note
        that the image in which this class appears is expected to
        contain all the tiles (i.e. not just a single
        tile).</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="tile_number" type="img:tile_number" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="tile_num_bands" type="img:tile_num_bands" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="tile_upsample_method" type="img:tile_upsample_method" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:choice minOccurs="0" maxOccurs="1">
        <xs:element ref="pds:Internal_Reference"> </xs:element>
        <xs:element ref="pds:Local_Internal_Reference"> </xs:element>
        <xs:element ref="pds:External_Reference"> </xs:element>
      </xs:choice>
      <xs:element name="Pixel_Averaging_Dimensions" type="img:Pixel_Averaging_Dimensions" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="img:Subframe" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test="img:tile_upsample_method = ('Bilinear', 'None', 'Replication')"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </xs:complexType>

  <xs:complexType name="Tiling">
    <xs:annotation>
      <xs:documentation>Contains parameters that describe how an image
        was or will be broken into tiles, before reassembly into a
        whole. This is generally intended for cameras that break up an
        exposure into tiles for transmission, but can also be used to
        describe tiling done by a ground system (e.g. for display
        purposes) if needed. Tiles need not be regular nor do they need
        to cover the entire area, and irregular tiles may overlap. Note
        that the image in which this class appears is expected to
        contain all the tiles (i.e. not just a single
        tile).</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="description" type="pds:description" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="num_line_tiles" type="img:num_line_tiles" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="num_sample_tiles" type="img:num_sample_tiles" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="tile_count" type="img:tile_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="tile_lines" type="img:tile_lines" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="tile_samples" type="img:tile_samples" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="tile_type" type="img:tile_type" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="tile_venue" type="img:tile_venue" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Tile" type="img:Tile" minOccurs="0" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test="img:tile_type = ('Irregular', 'Regular')"/> -->
    <!-- <xs:assert test="img:tile_venue = ('Ground', 'Onboard')"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </xs:complexType>

  <xs:complexType name="Video">
    <xs:annotation>
      <xs:documentation>The Video class contains attributes related to
        video observations, defined as a regular time series of frames.
        The class can be used to describe a single frame within the
        video, or the video as a whole.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="video_flag" type="img:video_flag" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="frame_count" type="img:frame_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="interframe_delay" type="img:interframe_delay" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="frame_rate" type="img:frame_rate" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="frame_interval" type="img:frame_interval" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="frame_index" type="img:frame_index" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="gop_frame_index" type="img:gop_frame_index" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="gop_frame_count" type="img:gop_frame_count" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="gop_start_index" type="img:gop_start_index" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:choice minOccurs="0" maxOccurs="1">
        <xs:element ref="pds:Internal_Reference"> </xs:element>
        <xs:element ref="pds:External_Reference"> </xs:element>
      </xs:choice>
    </xs:sequence>
    <!-- Begin assert statements for schematron - Enumerated Values -->
    <!-- <xs:assert test=")"/> -->
    <!-- <xs:assert test=")"/> -->
    <!-- End assert statements for schematron - Enumerated Values -->
  </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="above_aft_flag">
    <xs:annotation>
      <xs:documentation>A boolean value that denotes the camera
        mechanism was above allowable flight temperature at time of
        acquisition. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="active_flag">
    <xs:annotation>
      <xs:documentation>The active_flag attribute indicates whether or
        not the data processing described by the parent class is active.
        In general, the presence of the parent class implies it is
        active and thus active_flag is optional. The primary purpose for
        active_flag is to either explicitly indicate a correction is not
        active (for example, if it normally is but was explicitly turned
        off), or to be able to provide parameters for historical reasons
        that may no longer be relevant to a current correction.
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="analog_offset">
    <xs:annotation>
      <xs:documentation>The analog_offset attribute identifies the
        analog value that is subtracted from the signal prior to the
        analog/digital conversion.</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="array_band_number">
    <xs:annotation>
      <xs:documentation>The array_band_number is the image plane (band)
        in the array that corresponds to the optical filter with which
        the image was acquired.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="atmospheric_opacity">
    <xs:annotation>
      <xs:documentation>The atmospheric opacity (tau) value used in
        radiometric correction.</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="atmospheric_opacity_reference">
    <xs:annotation>
      <xs:documentation>The atmospheric opacity (tau) target value to
        which the image was corrected.</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="auto_exposure_data_cut">
    <xs:annotation>
      <xs:documentation>The auto_exposure_data_cut attribute specifies
        the DN value which a specified fraction of pixels is permitted
        to exceed. The fraction is specified using the
        auto_exposure_data_fraction attribute.</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="auto_exposure_lower_limit">
    <xs:annotation>
      <xs:documentation>Specifies the maximum number of pixels that are
        allowed to be below the lower threshold defined by
        auto_exposure_lower_limit.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="auto_exposure_lower_threshold">
    <xs:annotation>
      <xs:documentation>Specifies the lower threshold DN value for which
        a specified number of pixels is permitted to exceed. The
        auto_exposure_lower_limit defines the number of pixels allowed
        to exceed this threshold.</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="auto_exposure_percent">
    <xs:annotation>
      <xs:documentation>The auto_exposure_percent attribute specifies
        the auto-exposure early-termination percent. If the desired DN
        (auto_exposure_data_cut) is within this percentage of the
        measured DN (the DN at which the percentage of pixels above that
        DN equals or exceeds the auto_exposure_pixel_fraction), then the
        auto exposure algorithm is terminated and the calculated time is
        accepted.</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="auto_exposure_pixel_fraction">
    <xs:annotation>
      <xs:documentation>The auto_exposure_pixel_fraction attribute
        specifies the percentage of pixels whose DN values may exceed
        the auto_expsoure_data_cut.</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="auto_exposure_roi_first_line">
    <xs:annotation>
      <xs:documentation>Specifies the (1-based) starting line for the
        autoexposure region of interest.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="auto_exposure_roi_first_sample">
    <xs:annotation>
      <xs:documentation>Specifies the (1-based) starting sample for the
        autoexposure region of interest.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="auto_exposure_roi_lines">
    <xs:annotation>
      <xs:documentation>Specifies the number of lines in the
        autoexposure region of interest.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="auto_exposure_roi_samples">
    <xs:annotation>
      <xs:documentation>Specifies the number of samples in the
        autoexposure region of interest.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="auto_exposure_upper_limit">
    <xs:annotation>
      <xs:documentation>Specifies the maximum number of pixels that are
        allowed to be above the upper threshold defined by
        auto_exposure_upper_limit.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="auto_exposure_upper_threshold">
    <xs:annotation>
      <xs:documentation>Specifies the upper threshold DN value for which
        a specified number of pixels is permitted to exceed. The
        auto_exposure_upper_limit defines the number of pixels allowed
        to exceed this threshold.</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="autofocus_step_count">
    <xs:annotation>
      <xs:documentation> The autofocus_step_count attribute specifies
        the number of steps (images) to be taken by an autofocus
        algorithm.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="autofocus_step_size">
    <xs:annotation>
      <xs:documentation>The autofocus_step_size attribute specifies the
        size in motor counts of each (or the initial) step taken by the
        focus adjustment mechanism in an autofocus
        algorithm.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="bad_pixel_replacement_flag">
    <xs:annotation>
      <xs:documentation>If true, specifies whether or not bad pixel
        replacement processing was requested or completed. See
        bad_pixel_replacement_table_id.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="bad_pixel_replacement_table_id">
    <xs:annotation>
      <xs:documentation>Specifies the table used to replace bad pixels.
        A bad pixel table typically lists the location of each bad pixel
        on a detector. The specific table used is
        mission-specific.</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="bandwidth_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="-1.7976931348623157e308"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="bandwidth">
    <xs:annotation>
      <xs:documentation>The bandwidth attribute provides a measure of
        the spectral width of a filter. For a root-mean-square detector
        this is the effective bandwidth of the filter, i.e. the full
        width of an ideal square filter having a flat response over the
        bandwidth and zero response elsewhere. Another common method for
        measuring bandwidth is Full Width at Half Maximum, which is the
        width of a "bump" on a curve or function. It is given by the
        distance between points on the curve at which the function
        reaches half of its maximum value.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:bandwidth_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Length" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="below_aft_flag">
    <xs:annotation>
      <xs:documentation>A boolean value that denotes the camera
        mechanism was above allowable flight temperature at time of
        acquisition. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

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

  <xs:complexType name="best_focus_distance">
    <xs:annotation>
      <xs:documentation>The best_focus_distance attribute specifies the
        estimated distance to best focus.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:best_focus_distance_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Length" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="brightness_offset">
    <xs:annotation>
      <xs:documentation>The brightness_offset attribute defines the
        additive factor used for a linear brightness
        correction.</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="brightness_scale">
    <xs:annotation>
      <xs:documentation>The brightness_scale attribute defines the
        multiplicative factor used for a linear brightness
        correction.</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="center_filter_wavelength_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="-1.7976931348623157e308"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="center_filter_wavelength">
    <xs:annotation>
      <xs:documentation>The center_filter_wavelength attribute provides
        the wavelength of the center of the passband, or the peak
        transmissivity, for an instrument filter. </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:center_filter_wavelength_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Length" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="color_component">
    <xs:annotation>
      <xs:documentation>For single-band images, this defines which
        component of the color space is represented by this band. This
        keyword is not needed for 3-band images, as all bands are
        represented.</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="color_dn_scaling_factor">
    <xs:annotation>
      <xs:documentation>The color_dn_scaling_factor attribute specifies
        the actual value used to scale the color values. This value is
        determined using the color_dn_scaling_method.</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="color_dn_scaling_method">
    <xs:annotation>
      <xs:documentation>The color_dn_scaling_method attribute defines
        how the color values are scaled. EXPOSURE_NORMALIZED_COLOR means
        that the color values have been normalized based on exposure
        time, so neighboring images in a mosaic will have the same color
        values. DN_COLOR means that the color values are based on the
        raw DNs, so images take full advantage of the available dynamic
        range but may not match with neighbors in a
        mosaic.</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="color_filter_array_state">
    <xs:annotation>
      <xs:documentation>Specifies whether the image still has a CFA
        pattern ("Encoded"), the CFA pattern has been removed
        ("Decoded") or it never had a pattern ("No
        CFA").</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="color_filter_array_type">
    <xs:annotation>
      <xs:documentation>Defines the type of Color Filter Array (CFA)
        used to encode multiple colors in a single exposure. The most
        common example of this is the Bayer pattern. This is optional if
        there is no CFA. Additional attributes, specific to each CFA
        type, define whether or not the CFA pattern has been removed,
        and if so, how (e.g. bayer_algorithm).</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="color_space">
    <xs:annotation>
      <xs:documentation>Defines the color space in which this product is
        expressed. Some color spaces (e.g. XYZ or xyY) are independent
        of illuminant, while for others (e.g. sRGB or pRGB) the
        illuminant matters. It is expected that the defined color spaces
        will increase over time.</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="color_subsampling_mode">
    <xs:annotation>
      <xs:documentation> The color_subsampling_mode attribute specifies
        the JPEG color subsampling mode used during compression. Valid
        values: '4:2:2' - 4:2:2 chroma subsampling, which is the typical
        case, '4:4:4' - 4:4:4 chroma sampling, which indicates no
        subsampling, 'Grayscale' - indicates a grayscale
        image</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="companding_state">
    <xs:annotation>
      <xs:documentation>The companding_state attribute specifies whether
        the data is or has had its bit depth reduced, for example
        conversion from 12 to 8 bits via a lookup table or bit scaling.
        Valid values: None - values have not been companded. Companded -
        values are currently companded. Expanded - values have been
        companded but are now expanded back to original
        size.</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="crosstrack_summing">
    <xs:annotation>
      <xs:documentation>The crosstrack_summing attribute provides the
        number of detector pixel values in the crosstrack direction that
        have been averaged to produce the final output
        pixel.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="1"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

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

  <xs:complexType name="current_value">
    <xs:annotation>
      <xs:documentation>The current_value attribute provides provides
        the current, in the specified units, of an imaging instrument or
        some part of the imaging instrument.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:current_value_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Current" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="decomposition_stages">
    <xs:annotation>
      <xs:documentation> The decomposition_stages attribute identifies
        the number of stages of decomposition.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="deferred_flag">
    <xs:annotation>
      <xs:documentation> The deferred_flag attribute specifies whether
        compression was done at the time of image acquisition, or was
        deferred until later (typically at downlink time).
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="delta_focus_count">
    <xs:annotation>
      <xs:documentation>Defines the amount of change in focus for each
        image in the z-stack. The units should be the same as
        focus_position_count, which is often motor
        counts.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="detector_to_image_flip">
    <xs:annotation>
      <xs:documentation>The detector_to_image_flip attribute indicates
        whether and how the image was flipped (mirror image) along its
        optical path through an instrument, from detector to final image
        orientation. "Horizontal" means a left-to-right flip, while
        "Vertical" means a top-to-bottom-flip. Note that if both this
        attribute and detector_to_image_rotation exist, the flip is
        assumed to have happened before the rotation.</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="detector_to_image_rotation_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="detector_to_image_rotation">
    <xs:annotation>
      <xs:documentation> The detector_to_image_rotation attribute
        specifies the clockwise rotation, in degrees, that was applied
        to an image along its optical path through an instrument, from
        detector to final image orientation. Note that if both this
        attribute and detector_to_image_flip exist, the flip is assumed
        to have happened before the rotation.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:detector_to_image_rotation_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Angle" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="device_id">
    <xs:annotation>
      <xs:documentation>The device_id attribute supplies the identifier
        of an imaging instrument, an imaging instrument device, or some
        point on the instrument or device.</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:complexType name="device_name">
    <xs:annotation>
      <xs:documentation>The device_name attribute supplies the formal
        name for an imaging instrument, an imaging instrument device, or
        some point on the instrument or device.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="pds:ASCII_Short_String_Collapsed">
        <xs:attribute name="nilReason" type="pds:nil_reason" use="optional" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="device_state">
    <xs:annotation>
      <xs:documentation>The device_state attribute indicates the state
        of a sensor or other device associated with the imaging
        instrument. These states are interpreted in an
        instrument-specific way.</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="download_priority">
    <xs:annotation>
      <xs:documentation>The download_priority attribute specifies which
        data to downlink/transmit, based on order of importance. The
        ranking and meaning of specific values will vary depending on
        the mission, and should be defined in the mission software
        interface specification (SIS).</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="downtrack_summing">
    <xs:annotation>
      <xs:documentation>The downtrack_summing attribute provides the
        number of detector pixel values in the downtrack direction that
        have been averaged to produce the final output
        pixel.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="1"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="dq_band">
    <xs:annotation>
      <xs:documentation>Specifies the sequence number in the data array
        to which the data quality indicators apply. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="1"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="dq_bayer_cell">
    <xs:annotation>
      <xs:documentation>Specifies the Bayer cell to which the data
        quality indicators apply. bayer_cell can be used even if the
        image has been debayered, in which case it refers to the
        original debayered image. Note that “green_1” and “green_2" can
        be used to refer to specific green Bayer cells, or “green”
        refers to both greens together. </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="early_image_return">
    <xs:annotation>
      <xs:documentation>Indicates is there was a deferral of on-board
        post-processing of an image. For MSL, returns the image early to
        an onboard client. Early processing includes rotation, bad
        pixels, flat field, early scaling, and camera model
        production.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="early_scaling">
    <xs:annotation>
      <xs:documentation>If true, indicates that the companding was or
        should be done "early" in the onboard processing chain, for
        instruments where there is an option. For MSL, early processing
        is where the image is prepared for use by any client, including
        those on board, such as rotation, bad pixels, flat field, early
        scaling, and camera model production. Contrast that with late
        processing, which includes compression and telemetry generation,
        and processing for thumbnails, subframes, histograms, and
        row/column sums.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

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

  <xs:complexType name="effective_wavelength">
    <xs:annotation>
      <xs:documentation>Defines the weighted average of the system
        response and solar spectrum.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:effective_wavelength_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Length" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="encoded_display_gamma">
    <xs:annotation>
      <xs:documentation>Defines the gamma value encoded in this image.
        Gamma correction is used to nonlinearly compress the intensities
        in an image, and most display systems assume that images are
        encoded with an sRGB gamma. Note that this is a string value
        because the most common gamma correction ("sRGB") is not
        precisely expressible as a gamma exponent. A numeric value
        indicates a gamma exponent.</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="erase_count">
    <xs:annotation>
      <xs:documentation>The erase_count specifies the number of times a
        detector has been or will be flushed of data in raw counts,
        dependent on the parent class for the
        attribute.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="error_pixel_count">
    <xs:annotation>
      <xs:documentation> The error_pixel_count attribute specifies the
        number of pixels that are outside a valid DN range, after all
        decompression and post decompression processing has been
        completed. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="exposure_coadd_count">
    <xs:annotation>
      <xs:documentation>Specifies the total number of exposures summed
        (co-added) together to obtain the final image. Co-adding
        increases the signal-to-noise ratio.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="exposure_count">
    <xs:annotation>
      <xs:documentation>The exposure count attribute provides the number
        of exposures taken during a certain interval, such as the
        duration of one command. For example, this may include the
        number of exposures needed by an autoexpose
        algorithm.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

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

  <xs:complexType name="exposure_duration">
    <xs:annotation>
      <xs:documentation>The exposure_duration attribute provides the
        amount of time the instrument sensor was gathering light from
        the scene, such as between opening and closing of a shutter, or
        between flushing and readout of a CCD.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:exposure_duration_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Time" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="exposure_duration_count">
    <xs:annotation>
      <xs:documentation>The exposure_duration_count attribute specifies
        the value, in raw counts, for the amount of time the instrument
        sensor was gathering light from the scene, such as between
        opening and closing of a shutter, or between flushing and
        readout of a CCD. This is the raw count either commanded or
        taken directly from telemetry as reported by the spacecraft.
        This attribute is the same as the exposure_duration but in DN
        counts instead of time, and the translation of
        exposure_duration_count to exposure_duration will differ by
        mission.</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="exposure_duration_threshold_count">
    <xs:annotation>
      <xs:documentation>The exposure_duration_threshold specifies the
        exposure time threshold in raw counts, when
        shutter_subtraction_mode = 'Conditional'.</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="exposure_readout_count">
    <xs:annotation>
      <xs:documentation>Specifies the number of times an exposure, or
        part of an exposure, has been read from the camera. Multiple
        readouts could be due to tiling of the image, among other
        reasons.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="exposure_scale_factor">
    <xs:annotation>
      <xs:documentation>Specifies a multiplier to the base exposure
        time. The base exposure time is either user-commanded or is read
        from the onboard exposure time table. The resulting number is
        used by the cameras as the actual commanded exposure time. This
        scale factor is commonly used during multi-spectral imaging,
        when the base exposure time is known for one filter and
        exposure_scale_factor is used to scale the exposure time to
        levels appropriate for the other filters.</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="exposure_table">
    <xs:annotation>
      <xs:documentation>Identifies the exposure table to be used, or
        that was used. The exposure table provides the seed exposure
        value to use for each camera for the autoexposure
        algorithm.</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="exposure_table_update_flag">
    <xs:annotation>
      <xs:documentation>If true, specifies whether or not to update the
        autoexposure table based on the results of this
        exposure.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

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

  <xs:complexType name="exposure_time_delta">
    <xs:annotation>
      <xs:documentation>Specifies the change in exposure time for this
        exposure compared to the previous. Should be 0 for the first
        item in the list.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:exposure_time_delta_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Time" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="exposure_type">
    <xs:annotation>
      <xs:documentation>The exposure_type attribute indicates the
        exposure setting on a camera. Valid values: 'Manual' - manual
        exposure setting, 'Auto' - autoexposure is applied by the
        camera, 'Test' - test exposure setting telling the camera to
        return a fixed-pattern test image.</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="f_number_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="-1.7976931348623157e308"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="f_number">
    <xs:annotation>
      <xs:documentation>Defines the f/number for the optics used in
        acquiring the image.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:f_number_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Length" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="filter_id">
    <xs:annotation>
      <xs:documentation> The filter_id attribute provides a short string
        identifier for an instrument filter through which an image or
        measurement was acquired or which is associated with a given
        instrument mode. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="16"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="filter_name">
    <xs:annotation>
      <xs:documentation>The filter_name attribute provides the name,
        described in the mission documentation, of the optical filter
        through which an image or measurement was
        acquired.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:UTF8_Short_String_Preserved">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="filter_number">
    <xs:annotation>
      <xs:documentation>The filter_number attribute provides the numeric
        identifier of an instrument filter through which an image or
        measurement was acquired or which is associated with a given
        instrument mode.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="filter_position_count">
    <xs:annotation>
      <xs:documentation>The filter position count is the position in
        motor counts of the filter wheel motor.</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="filter_window_line">
    <xs:annotation>
      <xs:documentation>The size in pixels of the window used for
        filtering in the line dimension. If the window varies across the
        image, this could contain the average window or initial window,
        as needed by the specific algorithm.</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="filter_window_sample">
    <xs:annotation>
      <xs:documentation>The size in pixels of the window used for
        filtering in the sample dimension. If the window varies across
        the image, this could contain the average window or initial
        window, as needed by the specific algorithm.</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="first_line">
    <xs:annotation>
      <xs:documentation>The first_line attribute indicates the line
        within a source image that corresponds to the first line in a
        sub-image.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="1"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="first_sample">
    <xs:annotation>
      <xs:documentation> The first_sample attribute indicates the sample
        within a source image that corresponds to the first sample in a
        sub-image. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="1"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

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

  <xs:complexType name="focal_length">
    <xs:annotation>
      <xs:documentation>Defines the focal length of the optics used in
        acquiring the image.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:focal_length_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Length" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

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

  <xs:complexType name="focus_distance">
    <xs:annotation>
      <xs:documentation>The nominal focus distance for the instrument
        (e.g. in meters or mm). This is often the commanded value, or
        autofocus seed value, but can also be used to indicate a nominal
        distance where the connotation of "best" is not appropriate (see
        best_focus_distance).</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:focus_distance_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Length" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="focus_initialization_flag">
    <xs:annotation>
      <xs:documentation>Specifies whether the instrument focus mechanism
        should be (or was) initialized before use.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="focus_merge_blending_flag">
    <xs:annotation>
      <xs:documentation>The focus_merge_blending_flag attribute
        indicates whether intra-stack image blending has been performed
        during a focus merge operation. A value of 'false' means images
        were merged without blending.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="focus_merge_registration_flag">
    <xs:annotation>
      <xs:documentation>The focus_merge_registration_flag attribute
        indicates whether intra-stack image registration has been
        performed during a focus merge operation. A value of 'true'
        indicates that intra-stack image registration has been performed
        during the focus merge operation, while 'false' indicates that
        images have been merged without translation.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="focus_mode">
    <xs:annotation>
      <xs:documentation>The focus_mode attribute specifies the type of
        focus command, for example: Autofocus, Manual, ZStack, or
        Relative (focus adjustment based on a previous
        autofocus).</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="focus_position">
    <xs:annotation>
      <xs:documentation>The focus_position attribute defines, in a
        camera-specific way, the focus metric that should be used for
        geometric processing of the data (e.g. for creating camera
        models). This will often be the focus motor
        count.</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="focus_position_count">
    <xs:annotation>
      <xs:documentation>The focus_position_count attribute specifies a
        commanded focus, or the initial focus position used by the
        autofocus algorithm.</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="focus_stack_flag">
    <xs:annotation>
      <xs:documentation> The focus_stack_flag attribute indicates
        whether or not focus stack image products were created during
        the autofocus imaging step.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="frame_count">
    <xs:annotation>
      <xs:documentation> The frame_count attribute indicates the total
        number of image frames acquired, such as for a video or focus
        stack observation.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="frame_id">
    <xs:annotation>
      <xs:documentation>The frame_id attribute specifies an
        identification for a particular instrument measurement frame. A
        frame consists of a sequence of measurements made over a
        specified time interval, and may include measurements from
        different instrument modes. These sequences repeat from cycle to
        cycle and sometimes within a cycle.</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="frame_index">
    <xs:annotation>
      <xs:documentation>When in a Video class, the frame_index attribute
        specifies the sequence number of this frame in the context of
        the entire video, i.e. the first frame of the video would be
        index 1, up to frame_count. When in a Focus_Stack class, the
        frame_index attribute specifies the index of the first frame
        used to make up the focus stack. M2020 requested to allow
        negative values which has been seen as returned values during
        the mission. </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="frame_interval_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="-1.7976931348623157e308"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="frame_interval">
    <xs:annotation>
      <xs:documentation>The frame_interval attribute defines the time
        between the start of successive frames in a video
        product.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:frame_interval_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Time" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

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

  <xs:complexType name="frame_rate">
    <xs:annotation>
      <xs:documentation> The frame_rate attribute specifies the
        calculated frame rate for video products.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:frame_rate_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Frame_Rate" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="frame_type_name">
    <xs:annotation>
      <xs:documentation> The frame_type_name attribute specifies whether
        the image was commanded as part of a stereo pair or as a single
        left or right monoscopic image. If frame_type = 'Stereo', a left
        and a right image should be present.</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="full_well_limit_flag">
    <xs:annotation>
      <xs:documentation>A boolean value that denotes we have
        reached/exceeded the full well value of the CCD detector.
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="gain_mode_id">
    <xs:annotation>
      <xs:documentation>The gain_mode_id attribute identifies the gain
        state of an instrument. Gain is a constant value which is
        multiplied with an instrument's output signal to increase or
        decrease the level of that output. These modes may vary by
        mission so the permissible values should be set by the mission
        dictionaries.</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="gain_number">
    <xs:annotation>
      <xs:documentation>The gain_number attribute specifies the gain
        value used in the analog to digital conversion. The gain value
        is a multiplicative factor used in the analog to digital
        conversion.</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="gop_frame_count">
    <xs:annotation>
      <xs:documentation>The gop_frame_count attribute indicates, for
        video products compressed into a group of images (Group Of
        Pictures or GOP), the number of images in a GOP. This is not
        necessarily the total number of frames in the observation (see
        frame_count), as the observation may consist of a number of
        GOPs.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="gop_frame_index">
    <xs:annotation>
      <xs:documentation>Videos can be broken into Groups of Pictures
        (GOP)s, which group a number of frames together. The
        gop_frame_index attribute specifies the frame index within a
        Group Of Pictures (GOP) starting at 1. This is distinct from
        frame_index, which is the index into the video as a
        whole.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="gop_start_index">
    <xs:annotation>
      <xs:documentation>Videos can be broken into Groups of Pictures
        (GOP)s, which group a number of frames together. The
        gop_start_index attribute specifies the index of the first frame
        of the GOP (starting at 1). Thus, frame_index = gop_start_index
        + gop_frame_index - 1.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="hdr_acquisition_mode">
    <xs:annotation>
      <xs:documentation>Specifies how the HDR frames were
        acquired.</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="hdr_clipping_threshold">
    <xs:annotation>
      <xs:documentation>Specifies the threshold for pixel
        clipping.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="hdr_frame_count">
    <xs:annotation>
      <xs:documentation>Specifies the number of frames that go into the
        HDR product.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="height_pixels_WO_Units">
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="1"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="height_pixels">
    <xs:annotation>
      <xs:documentation>The height_pixels attribute provides the
        vertical dimension, in pixels.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:height_pixels_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Misc" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="horizon_mask_elevation_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="horizon_mask_elevation">
    <xs:annotation>
      <xs:documentation>Specifies the elevation above which the image is
        masked off.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:horizon_mask_elevation_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Angle" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="icer_quality">
    <xs:annotation>
      <xs:documentation>For ICER, the quality is the “minloss”
        parameter, which specifies the minimum number of bit planes that
        will not be encoded in each subband. Note that ICER may stop due
        a byte quota before minloss is achieved, so the actual quality
        may be less than specified. Unlike JPEG, a lower number means
        higher quality.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="id">
    <xs:annotation>
      <xs:documentation>The id attribute supplies a short name
        (identifier) for the associated value in a group of related
        values. </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="illuminant">
    <xs:annotation>
      <xs:documentation>Defines the illuminant that was used in order to
        process this image. The valid values are open-ended but examples
        of valid values include: None, D65, 3000K,
        5000K.</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="illumination_mode">
    <xs:annotation>
      <xs:documentation>illumination_mode describes what mode the
        illumination device is in. It could be used to indicate a common
        name for a particular configuration of activated lights, where
        there are many such devices. Current examples used include: Red,
        Green, Blue, White, UV, SLI-A Dense, SLI-B Sparse, Other,
        Off</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="illumination_state">
    <xs:annotation>
      <xs:documentation>The illumination_state attribute provides if the
        LED was On or Off.</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="illumination_wavelength_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="-1.7976931348623157e308"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="illumination_wavelength">
    <xs:annotation>
      <xs:documentation>The illumination_wavelength attribute provides
        the wavelength of an LED that was used to illuminate this
        image.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:illumination_wavelength_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Length" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="input_dn_max">
    <xs:annotation>
      <xs:documentation>The input_dn_max attribute provides the value of
        the maximum DN in the input image that is assigned a specific DN
        in the output image during companding.</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="input_dn_min">
    <xs:annotation>
      <xs:documentation>The input_dn_min attribute provides the value of
        the minimum DN in the input image that is assigned a specific DN
        in the output image during companding.</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="instrument_idle_timeout_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="instrument_idle_timeout">
    <xs:annotation>
      <xs:documentation>Specifies the amount of time in seconds the
        instrument may be idle before powering off the
        instrument.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:instrument_idle_timeout_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Time" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

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

  <xs:complexType name="interframe_delay">
    <xs:annotation>
      <xs:documentation>The interframe_delay attribute provides the time
        between the end of one frame and the beginning of the next frame
        in a video product.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:interframe_delay_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Time" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="iof_conversion_coefficient">
    <xs:annotation>
      <xs:documentation>Radiance factor (IOF) conversion
        coefficient.</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="iof_conversion_coefficient_std">
    <xs:annotation>
      <xs:documentation>1-sigma standard deviation for the radiance
        factor (IOF) conversion coefficient.</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="jpeg_parameter">
    <xs:annotation>
      <xs:documentation>The jpeg_parameter attribute is a JPEG specific
        variable which specifies on-board compression determination by
        image quality or by compression factor, based on a selected
        on-board compression mode. </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="jpeg_quality">
    <xs:annotation>
      <xs:documentation>The jpeg_quality attribute is a JPEG specific
        variable which identifies the resultant or targeted image
        quality index for on-board data compression.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="100"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="line_fov_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="line_fov">
    <xs:annotation>
      <xs:documentation>The line_fov attribute specifies the angular
        measure of the field of view of an imaged scene, as measured in
        the image line direction (generally vertical).</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:line_fov_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Angle" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="lines">
    <xs:annotation>
      <xs:documentation>The lines attribute indicates the total number
        of data instances along the vertical axis of an image or
        sub-image.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="1"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="mask_transparent_value">
    <xs:annotation>
      <xs:documentation>Specifies the pixel value in the mask that will
        represent transparent (or NoData/null) for the characterized
        image. This is normally defined as 0 in the mask layer. Once
        defined, any other value in the mask represents opaque or
        translucent (in other words, valid) in the characterized
        image.</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="mask_type">
    <xs:annotation>
      <xs:documentation>This identifies the type of mask file. Two
        enumerations are given, but these can be expanded if
        needed.</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="max_auto_exposure_iteration_count">
    <xs:annotation>
      <xs:documentation>The max_auto_exposure_iteration_count attribute
        specifies the maximum number of exposure iterations the
        instrument will perform in order to obtain the requested
        exposure.</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="max_filter_window_line">
    <xs:annotation>
      <xs:documentation>The maximum size in pixels of the window used
        for filtering in the line dimension. If the window is constant
        across the image, filter_window_line should be used
        instead.</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="max_filter_window_sample">
    <xs:annotation>
      <xs:documentation>The maximum size in pixels of the window used
        for filtering in the sample dimension. If the window is constant
        across the image, filter_window_sample should be used
        instead.</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="maximum_focus_distance_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="-1.7976931348623157e308"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="maximum_focus_distance">
    <xs:annotation>
      <xs:documentation>The maximum_focus_distance attribute specifies
        the estimated distance to the farthest pixel with less than 1
        pixel of gaussian blur.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:maximum_focus_distance_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Length" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="min_filter_window_line">
    <xs:annotation>
      <xs:documentation>The minimum size in pixels of the window used
        for filtering in the line dimension. If the window is constant
        across the image, filter_window_line should be used
        instead.</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="min_filter_window_sample">
    <xs:annotation>
      <xs:documentation>The minimum size in pixels of the window used
        for filtering in the sample dimension. If the window is constant
        across the image, filter_window_sample should be used
        instead.</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="minimum_focus_distance_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="-1.7976931348623157e308"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="minimum_focus_distance">
    <xs:annotation>
      <xs:documentation>The minimum_focus_distance attribute specifies
        the estimated distance to the nearest pixel with less than 1
        pixel of gaussian blur.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:minimum_focus_distance_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Length" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="missing_pixel_count">
    <xs:annotation>
      <xs:documentation> The missing_pixel_count attribute identifies
        the total number of missing pixels defined by the image or image
        segment.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="missing_temperature_flag">
    <xs:annotation>
      <xs:documentation>A boolean value that denotes temperature data
        was missing at time of image acquisition. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="motor_count">
    <xs:annotation>
      <xs:documentation>The motor_count attribute specifies the raw
        motor counts for the specified device, which indicates the
        position of the associated mechanism in a device-specific
        way.</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="no_signal_count">
    <xs:annotation>
      <xs:documentation>Integer number of pixels that received no signal
        above bias. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="num_line_tiles">
    <xs:annotation>
      <xs:documentation>Defines the number of tiles in the line
        direction for a regular tile. Not used for irregular
        tiles.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="1"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="num_sample_tiles">
    <xs:annotation>
      <xs:documentation>Defines the number of tiles in the sample
        direction for a regular tile. Not used for irregular
        tiles.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="1"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="observation_number">
    <xs:annotation>
      <xs:documentation>Identifies which observation of many this data
        product pertains to.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="onboard_B_b">
    <xs:annotation>
      <xs:documentation>Specifies the factor that has been multiplied by
        the B pixel value after de-Bayering (demosaicking) takes place.
        This value is summed with the multiplied R and G pixel values to
        produce the output Blue value.</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="onboard_B_g">
    <xs:annotation>
      <xs:documentation>Specifies the factor that has been multiplied by
        the G pixel value after de-Bayering (demosaicking) takes place.
        This value is summed with the multiplied R and B pixel values to
        produce the output Blue value.</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="onboard_B_r">
    <xs:annotation>
      <xs:documentation>Specifies the factor that has been multiplied by
        the R pixel value after de-Bayering (demosaicking) takes place.
        This value is summed with the multiplied G and B pixel values to
        produce the output Blue value.</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="onboard_G_b">
    <xs:annotation>
      <xs:documentation>Specifies the factor that has been multiplied by
        the B pixel value after de-Bayering (demosaicking) takes place.
        This value is summed with the multiplied R and G pixel values to
        produce the output Green value.</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="onboard_G_g">
    <xs:annotation>
      <xs:documentation>Specifies the factor that has been multiplied by
        the G pixel value after de-Bayering (demosaicking) takes place.
        This value is summed with the multiplied R and B pixel values to
        produce the output Green value.</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="onboard_G_r">
    <xs:annotation>
      <xs:documentation>Specifies the factor that has been multiplied by
        the R pixel value after de-Bayering (demosaicking) takes place.
        This value is summed with the multiplied G and B pixel values to
        produce the output Green value.</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="onboard_R_b">
    <xs:annotation>
      <xs:documentation>Specifies the factor that has been multiplied by
        the B pixel value after de-Bayering (demosaicking) takes place.
        This value is summed with the multiplied R and G pixel values to
        produce the output Red value.</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="onboard_R_g">
    <xs:annotation>
      <xs:documentation>Specifies the factor that has been multiplied by
        the G pixel value after de-Bayering (demosaicking) takes place.
        This value is summed with the multiplied R and B pixel values to
        produce the output Red value.</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="onboard_R_r">
    <xs:annotation>
      <xs:documentation>Specifies the factor that has been multiplied by
        the R pixel value after de-Bayering (demosaicking) takes place.
        This value is summed with the multiplied G and B pixel values to
        produce the output Red value.</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="onboard_compression_class">
    <xs:annotation>
      <xs:documentation>The onboard_compression_class attribute
        identifies the type of on-board compression used for data
        storage and transmission. Note that the onboard_compression_type
        identifies the specific compression algorithm used (for example,
        ICER), whereas the onboard_compression_class gives a simple
        indicator of the type of compression mode. Valid values:
        'Lossless', 'Lossy', 'Uncompressed'. </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="onboard_compression_mode">
    <xs:annotation>
      <xs:documentation>The onboard_compression_mode attribute
        identifies the method used for on-board compression, performed
        for the purpose of data storage and transmission. The value for
        this attributes represents the raw integer value for
        compression, which is then translated to the full name captured
        by the onboard_compression_type attribute.</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="onboard_compression_quality">
    <xs:annotation>
      <xs:documentation> The onboard_compression_quality attribute is an
        indication of compression quality, in the range of 0.0 to 1.0.
        Losslessly compressed or uncompressed data have a value of 1.0.
        Other values are assigned in a manner specific to the
        compression mode, but with the property that a higher value
        means better quality. Although the values are not directly
        comparable across compression types, this facilitates comparison
        of compression quality across images independent of compression
        mode.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="1.0"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="onboard_compression_rate">
    <xs:annotation>
      <xs:documentation>The onboard_compression_rate attribute provides
        the average number of bits needed to represent a pixel for image
        that was compressed on-board for data storage and
        transmission.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="onboard_compression_ratio">
    <xs:annotation>
      <xs:documentation>The onboard_compression_ratio attribute provides
        the ratio of the size, in bytes, of the original uncompressed
        data object to its compressed form (original size / compressed
        size). Onboard compression is performed for data storage and
        transmission.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="0.0"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="onboard_compression_type">
    <xs:annotation>
      <xs:documentation>The onboard_compression_type attribute
        identifies the type of on-board compression used for data
        storage and transmission. Valid Values: 'GZIP', 'ICER', 'H.264
        Frame', 'LOCO', 'LZO', 'JPEG', 'JPEG Progressive', 'MSSS
        Lossless', 'Lossless', 'None', 'StarPixel Lossless', and
        'StarPixel Flexible'.</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="onboard_compression_venue">
    <xs:annotation>
      <xs:documentation> The onboard_compression_venue attribute
        specifies where the onboard compression was
        performed.</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="original_sample_bits">
    <xs:annotation>
      <xs:documentation>The original_sample_bits specifies the number of
        bits actually acquired by the sensor, before companding or other
        manipulations. Contrast this with img:sample_bits, which
        describes the current state of the image. Generally in a
        companded image, sample_bits will be less than
        original_sample_bits, while in a decompanded image they would be
        equal.</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="out_of_focus_flag">
    <xs:annotation>
      <xs:documentation>A boolean value that denotes this image failed
        to find focus. Focus was commanded using autofocus or manual.
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="output_dn">
    <xs:annotation>
      <xs:documentation>The output_dn attribute provides the value of
        the DN in the output image that is assigned to a given range of
        DN in the input image during companding.</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="parameter_table_id">
    <xs:annotation>
      <xs:documentation>Specifies which table of parameters to use, or
        were used. Tables are defined in a mission- and
        instrument-specific manner.</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="pixel_count">
    <xs:annotation>
      <xs:documentation>Integer number of pixels currently to list the
        total number of pixels as used in Hot_Pixel, Saturated_Pixel,
        and Nonlinear_Pixel classes. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="pointing_model_name">
    <xs:annotation>
      <xs:documentation>The pointing_model_name attribute specifies
        which of several "pointing models" were used to transform the
        camera model based on updated pointing information. These
        updates are typically derived from mosaic seam corrections. This
        attribute and the associated Pointing_Model_Index classes define
        what the updated pointing information is, providing enough
        information to re-create the camera model from calibration data.
        If present, this attribute overrides the default pointing based
        on telemetry. The special value "NONE" shall be interpreted the
        same as if the attribute is absent (i.e. the default pointing
        model should be used). New model names can be created at any
        time; the models themselves should be described in a
        mission-specific ancillary file. See also the geom:solution_id
        attribute within the geom:Camera_Model_Parameters
        class.</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="pointing_model_solution_id">
    <xs:annotation>
      <xs:documentation>The pointing_model_solution_id attribute
        specifies the identifier of the pointing correction solution
        used to derive the model specified via the enclosing
        Pointing_Correction class. This identifier should also appear in
        the pointing correction file referenced by the
        Data_Correction_File. If there is only one identifier in the
        correction file, then pointing_model_solution_id may be omitted.
        The pointing_model_solution_id attribute may be reused in the
        context of pointing corrections, although uniqueness is
        recommended. The pointing correction solution ID namespace is
        separate from the coordinate system namespace.</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="processing_algorithm">
    <xs:annotation>
      <xs:documentation>The processing_algorithm attribute specifies the
        name of the algorithm used to perform the processing specified
        by the enclosing class. Algorithm names should be defined in the
        project documentation, and/or in the enclosing class definition.
        </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="processing_venue">
    <xs:annotation>
      <xs:documentation>The processing_venue attribute specifies where
        the processing described by the parent class was performed.
        </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="product_flag">
    <xs:annotation>
      <xs:documentation>Indicates whether the product in the enclosing
        class was requested for downlink (when in Commanded_Parameters),
        or whether this product actually is the type in question (when
        in Imaging). For example,
        Commanded_Parameters.Histogram.product_flag = true indicates
        that a histogram was requested as part of the command that
        created the data product being labeled, while
        Imaging.Histogram.product_flag = true indicates that this data
        product itself is (or contains) a histogram.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="progressive_stage">
    <xs:annotation>
      <xs:documentation>In cases where each pass of a progressive JPEG
        is downlinked separately, the progressive_stage attribute
        indicates the highest pass number contained in this image, which
        indicates the available level of detail.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="r0">
    <xs:annotation>
      <xs:documentation>The r0 attribute specifies the 0th-order
        polynomial coefficient of the function used to describe an
        algorithmic flat field. See Radial_Flat_Field_Function for the
        formula.</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="r1">
    <xs:annotation>
      <xs:documentation>The r1 attribute specifies the 1st-order
        polynomial coefficient of the function used to describe an
        algorithmic flat field. See Radial_Flat_Field_Function for the
        formula.</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="r2">
    <xs:annotation>
      <xs:documentation>The r2 attribute specifies the 2nd-order
        polynomial coefficient of the function used to describe an
        algorithmic flat field. See Radial_Flat_Field_Function for the
        formula.</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="r3">
    <xs:annotation>
      <xs:documentation>The r3 attribute specifies specifies the
        3rd-order polynomial coefficient of the function used to
        describe an algorithmic flat field. See
        Radial_Flat_Field_Function for the formula.</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="radiometric_type">
    <xs:annotation>
      <xs:documentation>The radiometric_type defines the specific type
        of radiance measurement. Possible values include "Radiance",
        "Radiance Factor", "Spectral Radiance", "Scaled Spectral
        Radiance", and "No CFA". Note: There are many more possible
        values, and this definition can be updated to include more
        examples over time. </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="radiometric_zenith_scaling_factor">
    <xs:annotation>
      <xs:documentation>Defines the scaling factor used for Scaled
        Radiance or Scaled Spectral Radiance. Scaled radiance is created
        by dividing radiance by this factor, which scales the radiance
        to what it would be if the sun were at the zenith with a clear
        atmosphere.</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="raw_count">
    <xs:annotation>
      <xs:documentation>The raw_count attribute provides the value of
        some parameter measured by a spacecraft or instrument sensor in
        the raw units reported by that sensor. A separate attribute
        should be included alongside the raw_count that translates this
        value into the appropriate engineering units. i.e.
        temperature_value in degrees C or voltage_value in
        Volts</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

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

  <xs:complexType name="readout_rate">
    <xs:annotation>
      <xs:documentation>The readout_rate attribute specifies the clock
        rate at which values are read from the sensor.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:readout_rate_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Frequency" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="responsivity_b">
    <xs:annotation>
      <xs:documentation>Specifies the conversion factor between DN and
        radiance units that has been applied to the blue channel of an
        image.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="pds:ASCII_Real">
        <xs:attribute name="nilReason" type="pds:nil_reason" use="optional" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="responsivity_factor_b">
    <xs:annotation>
      <xs:documentation>Specifies the factor that has been applied to
        the B cell of the Bayer pattern, before de-Bayering
        (demosaicking) takes place.</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="responsivity_factor_g">
    <xs:annotation>
      <xs:documentation>Specifies the factor that has been applied to
        the G cell of the Bayer pattern, before de-Bayering
        (demosaicking) takes place.</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="responsivity_factor_r">
    <xs:annotation>
      <xs:documentation>Specifies the factor that has been applied to
        the R cell of the Bayer pattern, before de-Bayering
        (demosaicking) takes place.</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:complexType name="responsivity_g">
    <xs:annotation>
      <xs:documentation>Specifies the conversion factor between DN and
        radiance units that has been applied to the green channel of an
        image.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="pds:ASCII_Real">
        <xs:attribute name="nilReason" type="pds:nil_reason" use="optional" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="responsivity_pan">
    <xs:annotation>
      <xs:documentation>Specifies the conversion factor between DN and
        radiance units that has been applied to a panchromatic
        image.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="pds:ASCII_Real">
        <xs:attribute name="nilReason" type="pds:nil_reason" use="optional" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="responsivity_r">
    <xs:annotation>
      <xs:documentation>Specifies the conversion factor between DN and
        radiance units that has been applied to the red channel of an
        image.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="pds:ASCII_Real">
        <xs:attribute name="nilReason" type="pds:nil_reason" use="optional" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="responsivity_std">
    <xs:annotation>
      <xs:documentation>Specifies the 1-sigma standard deviation for the
        radiometric coefficients.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="pds:ASCII_Real">
        <xs:attribute name="nilReason" type="pds:nil_reason" use="optional" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="sample_bit_mask">
    <xs:annotation>
      <xs:documentation>The sample_bit_mask attribute Specifies the
        active bits in a sample. Any bit mask is valid in an non-raw
        product. Any 8-bit product, whether a scaled raw product or
        other, will have the value "2#11111111" and be stored in one
        byte. Any 12-bit product, whether an unscaled raw product, or an
        ILUT partially-processed product (see companding_method), will
        have the value "2#0000111111111111" and be stored in two bytes.
        A 15-bit product (e.g. Radiometrically-corrected Calibrated
        product type) will have the value "2#0111111111111111" and be
        stored in two bytes. Any 32-bit integer product (e.g. Histogram
        Raw product) will have the value
        "2#11111111111111111111111111111111" and be stored in four
        bytes. For floating-point data, sample_bit_mask is not valid and
        may be absent. If present, it should be ignored. NOTE: In the
        PDS, the domain of sample_bit_mask is dependent upon the
        currently-described value in the sample_bits attribute and only
        applies to unsigned integer values. Thus sample_bit_mask is not
        allowed for signed or floating-point types.</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="sample_bits">
    <xs:annotation>
      <xs:documentation>The sample_bits attribute specifies the logical
        or active number of bits in the data, which is distinct from the
        physical number of bits (for example, encoding 12-bit data
        within 16-bit words). These logical bits are stored in the low
        order (least significant) bits, with unused bits filled with 0
        (or 1 for negative integers to preserve a two's complement
        representation). This is distinct from the valid data range
        (specified by valid_minimum and valid_maximum in
        Special_Constants class) because all values, including
        missing/invalid flag values, must fit within the sample_bits.
        The intent is that the data should be able to be sent through a
        communication channel that passes only sample_bits with no loss
        in fidelity.</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="sample_fov_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="sample_fov">
    <xs:annotation>
      <xs:documentation>The sample_fov attribute specifies the angular
        measure of the field of view of an imaged scene, as measured in
        the image sample direction (generally
        horizontal).</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:sample_fov_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Angle" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="samples">
    <xs:annotation>
      <xs:documentation> The samples attribute indicates the total
        number of data instances along the horizontal axis of an image
        or sub-image.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="1"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="sampling_factor">
    <xs:annotation>
      <xs:documentation> The sampling_factor attribute provides the
        value N, where every Nth data point was kept from the original
        data set by selection, averaging, or taking the median. When
        applied to an image object, the single value represented in
        sampling_factor applies to both the lines and the
        samples.</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="saturated_flag">
    <xs:annotation>
      <xs:documentation>A boolean value that denotes that there exists
        pixels within the image that have reached or exceeded the
        maximum pixel value. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="saturated_pixel_count">
    <xs:annotation>
      <xs:documentation>The saturated_pixel_count attribute provides the
        number of pixels which were saturated. This can happen when the
        sensor acquired a value too low or too high to be measured
        accurately or if post-processing cause the output pixel value to
        fall below or above the the output range of valid values for the
        data or data type.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="segment_corrupted_flag">
    <xs:annotation>
      <xs:documentation>The segment_corrupted_flag specifies whether the
        segment is corrupted (or bad). Valid values are "true" or
        "false". If the value is true, the segment is corrupted, and if
        the value is false, the segment is not
        corrupted.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="segment_count">
    <xs:annotation>
      <xs:documentation> The segment_count attribute identifies the
        number of segments into which the image was partitioned for
        error containment purposes.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="segment_number">
    <xs:annotation>
      <xs:documentation> The segment_number attribute identifies which
        compression segment is described in the current Segment class.
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="segment_quality">
    <xs:annotation>
      <xs:documentation> The segment_quality attribute identifies the
        resultant or targeted image quality index for on-board ICER data
        compression. Upon return by the ICER decompress function, the
        output quantity segment_quality provides an indication of the
        quality of the reconstructed segment. Specifically, the value
        returned is a double for which the integer values correspond to
        attained min loss values, but in general is an interpolation
        between these values. Thus lower values of segment_quality
        correspond to higher reconstructed qualities, and a value of
        indicates lossless compression. Note that the compressed stream
        does not directly contain the value of min loss that was given
        to the compressor, but the decompressor does know how far along
        in the decompression process it got before it ran out of bits;
        this information is used to determine segment_quality. In rare
        circumstances the decompressor m ay not be able to determine
        segment_quality for a segment that it decompresses. In this case
        it sets segment_quality to 1.0. The reconstructed segment might
        be either lossy or lossless when this occurs. The technical
        condition under which a quality value is not determined is that
        the decompressor runs out of the data for the segment before
        decoding any bit plane information. </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="segment_status">
    <xs:annotation>
      <xs:documentation> The segment_status attribute provides a bit
        mask which provides the status of decoding for the compression
        segment identified by segment_number. Upon return by the ICER
        decompress function, the output quantity of segment_status
        contains a number indicating the decode status. The decode
        status may have one or more of the following flags set:
        SHORTDATASEG FLAG (bit 0): If this flag is set, then the segment
        contained so little data that nothing could be reconstructed in
        the segment. INCONSISTENTDATA FLAG (bit 1): If this flag is set,
        then one or more pieces of information in the segment header
        (specifically, image width, image height, n segs, wavelet
        filter, n decomps) are inconsistent with the value(s) in the
        first (valid) segment. ICER will ignore the data in this
        segment. DUPLICATESEG FLAG (bit 2): If this flag is set, then
        the segment index given in the header equals that given by a
        previous segment. The decompressor will ignore the data in this
        segment. BADBITPLANENUMBER FLAG (bit 3): If this flag is set,
        then an ICER internal parameter in the header for this segment
        has probably been corrupted. The decompressor will ignore the
        data in this segment. BADBITPLANECOUNT FLAG (bit 4): If this
        flag is set, then an ICER internal parameter in the header for
        this segment has probably been corrupted. The decompressor will
        ignore the data in this segment. BADDATA FLAG (bit 5): If this
        flag is set, then either the parameter combination given in the
        header for this segment are not allowed by ICER, or the segment
        number is bad. This probably indicates corrupted data. The
        decompressor will ignore the data in this segment.
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Numeric_Base2">
    	<xs:pattern value='[0-1]{1,255}'/>
     <xs:minLength value="1"/>
     <xs:maxLength value="6"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="sequence_number">
    <xs:annotation>
      <xs:documentation>The sequence_number attribute supplies the
        sequence identifier for the associated value in a group of
        related values. </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="sequence_terminated_flag">
    <xs:annotation>
      <xs:documentation>A boolean value that denotes that there exists
        pixels within the image that have reached or exceeded the
        maximum pixel value. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="shutter_subtraction_mode">
    <xs:annotation>
      <xs:documentation>The shutter_subtraction_mode specifies whether
        shutter subtraction will be performed, or if it is dependent on
        the exposure_duration_threshold_count.</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="special_line">
    <xs:annotation>
      <xs:documentation>Line number of the special
        point.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="special_sample">
    <xs:annotation>
      <xs:documentation>Sample number of the special
        point.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="starpixel_degradation">
    <xs:annotation>
      <xs:documentation> The value is degradation parameter. Then the
        value of the degradation parameter is higher, the quality of
        lossy compressed image will be worse, and the value is lower,
        the quality will be better. If value of degradation parameter is
        0, there will be no degradation. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="32"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="starpixel_initial_subsampling_interval">
    <xs:annotation>
      <xs:documentation> The value gives exponent n for initial
        subsampling interval 2**n. See Takada+2007
        (https://doi.org/10.1109/IGARSS.2007.4422835) for the detail.
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="8"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="striping_count">
    <xs:annotation>
      <xs:documentation>Specifies the number of stripes (N) used during
        dark current mitigation within image acquisition. Image
        “striping” is comprised of reading out the image in N different
        parts (“stripes”), often using a hardware windowing mode, using
        N separate exposures (with identical exposure times). These
        successive stripes correspond to physically different locations
        on the CCD. A commandable overlap (M rows) allows each
        successive row to "cover" the image pixels towards the readout
        region.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="striping_overlap_rows">
    <xs:annotation>
      <xs:documentation>Specifies the number of rows (M) of striping
        overlap used during dark current mitigation within image
        acquisition. Image “striping” is comprised of reading out the
        image in N different parts (“stripes”), often using a hardware
        windowing mode, using N separate exposures (with identical
        exposure times). These successive stripes correspond to
        physically different locations on the CCD. A commandable overlap
        (M rows) allows each successive row to "cover" the image pixels
        towards the readout region.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="subframe_type">
    <xs:annotation>
      <xs:documentation> The subframe_type attribute specifies the
        method of subframing performed on the image. These methods may
        vary by mission so the permissible values should be set by the
        mission dictionaries. The current enumerations were added for
        the MSL mission and can be expanded if needed.</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="temperature_status">
    <xs:annotation>
      <xs:documentation>The temperature_status attribute defines the
        status of the associated temperature measurement. The status is
        interpreted in a device-specific way, but generally 0 indicates
        a successful measurement.</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="temperature_value_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="-1.7976931348623157e308"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="temperature_value">
    <xs:annotation>
      <xs:documentation>The temperature_value attribute provides the
        temperature, in the specified units, of some point on an imaging
        instrument or other imaging instrument device.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:temperature_value_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Temperature" use="required" />
        <xs:attribute name="nilReason" type="pds:nil_reason" use="optional" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="threshold_factor">
    <xs:annotation>
      <xs:documentation>Multiplicative factor used to isolate pixels
        that are X times greater than theie nearest neighbors.
        </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="threshold_value_WO_Units">
    <xs:restriction base="pds:ASCII_Real">
     <xs:minInclusive value="-1.7976931348623157e308"/>
     <xs:maxInclusive value="1.7976931348623157e308"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="threshold_value">
    <xs:annotation>
      <xs:documentation>Value used to define a level that triggers a
        defined behavior. </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:threshold_value_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Spectral_Radiance" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="tile_count">
    <xs:annotation>
      <xs:documentation>Defines the number of tiles in this set. Should
        be present and equal to the number of Tile objects if Tile is
        used; optional if Tile is not used.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="tile_lines">
    <xs:annotation>
      <xs:documentation>Defines the number of lines in a regular tile.
        Not used for irregular tiles.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="1"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="tile_num_bands">
    <xs:annotation>
      <xs:documentation>Specified the number of bands for this tile. The
        tile number of bands may not match the number of bands for the
        overall image, in which case it reflects the number of bands the
        original tile had before assembly, or the number of bands the
        tile should have after disassembly.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="tile_number">
    <xs:annotation>
      <xs:documentation>Specifies the tile number (array index),
        starting at 1.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="1"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="tile_samples">
    <xs:annotation>
      <xs:documentation>Defines the number of samples in a regular tile.
        Not used for irregular tiles.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="1"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="tile_type">
    <xs:annotation>
      <xs:documentation>Defines the type of tiles. Regular tiles are the
        same size throughout (although the last row or column of tiles
        might be smaller in order to fit the image size) and should have
        tile_lines and tile_samples defined. Irregular tiles may have
        different sizes per tile, described in each Tile
        class.</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="tile_upsample_method">
    <xs:annotation>
      <xs:documentation>Specifies how tiles were upsampled (if needed)
        to create the full image. Replication simply repeats the pixel
        value as many times as necessary, Bilinear is bilinear
        interpolation, and None means upsampling was not
        necessary.</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="tile_venue">
    <xs:annotation>
      <xs:documentation>Specifies where the tiling was done. Generally,
        Onboard indicates that this image is a reassembly of tiles sent
        from the spacecraft, while Ground indicates a tile decomposition
        after processing.</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="valid_maximum_pixel">
    <xs:annotation>
      <xs:documentation>Specifies the maximum pixel DN value for pixels
        used by the autoexposure algorithm.</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="valid_minimum_pixel">
    <xs:annotation>
      <xs:documentation>Specifies the minimum DN threshold for pixels
        used by the autoexposure algorithm.</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="valid_pixel_count">
    <xs:annotation>
      <xs:documentation>The valid_pixel_count attribute provides the
        total number of pixels tagged as valid. This will generally not
        include pixels flagged as saturated_pixel_count or
        missing_pixel_count.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="0"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="value_number">
    <xs:annotation>
      <xs:documentation>The value_number attribute provides the value
        with no applicable units as named by the associated id, name, or
        sequence_number. </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="value_string">
    <xs:annotation>
      <xs:documentation>The value_string attribute provides the value
        with no applicable units as named by the associated id, name, or
        sequence_number. </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="video_flag">
    <xs:annotation>
      <xs:documentation> The video_flag attribute indicates whether or
        not video products were commanded. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

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

  <xs:complexType name="voltage_value">
    <xs:annotation>
      <xs:documentation>The voltage_value attribute provides provides
        the voltage, in the specified units, of an imaging instrument or
        some part of the imaging instrument.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:voltage_value_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Voltage" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="wavelet_filter">
    <xs:annotation>
      <xs:documentation>The wavelet_filter attribute specifies thefilter
        used in the compression and decompression
        algorithm.</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="width_pixels_WO_Units">
    <xs:restriction base="pds:ASCII_NonNegative_Integer">
    	<xs:pattern value='[0-9]+'/>
     <xs:minInclusive value="1"/>
     <xs:maxInclusive value="18446744073709551615"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="width_pixels">
    <xs:annotation>
      <xs:documentation>The width_pixels attribute provides the
        horizontal dimension, in pixels.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:width_pixels_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Misc" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="wrong_filter_flag">
    <xs:annotation>
      <xs:documentation>A boolean value that denotes the commanded
        filter does not match the actual filter used to acquire the
        image. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="wrong_pointing_flag">
    <xs:annotation>
      <xs:documentation>A boolean value that denotes this image has the
        wrong pointing as pre-determined through planned observations or
        image footprints. For example, the rover faulted while driving
        and did not make it to the intended location and therefore the
        images have the wrong pointing. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="wrong_zoom_flag">
    <xs:annotation>
      <xs:documentation>A boolean value that denotes the commanded zoom
        does not match the actual zoom value. For example, commanded at
        110mm but acquired at 63mm. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

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

  <xs:complexType name="x_center">
    <xs:annotation>
      <xs:documentation>The x_center attribute specifies the sample
        coordinate of the center of the function used to describe an
        algorithmic flat field. See Radial_Flat_Field_Function for the
        formula.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:x_center_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Misc" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

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

  <xs:complexType name="y_center">
    <xs:annotation>
      <xs:documentation>The y_center attribute specifies the line
        coordinate of the center of the function used to describe an
        algorithmic flat field. See Radial_Flat_Field_Function for the
        formula.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="img:y_center_WO_Units">
        <xs:attribute name="unit" type="pds:Units_of_Misc" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:simpleType name="zero_value_pixels_flag">
    <xs:annotation>
      <xs:documentation>A boolean value that denotes this image has
        pixels with a DN value of zero. </xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Boolean">
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="zoom_position">
    <xs:annotation>
      <xs:documentation>The zoom_position attribute defined, in a
        camera-specific way, the zoom metric that should be used for
        geometric processing of the data (e.g. for creating camera
        models). This will often be the zoom motor
        count.</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:schema>
