Metadata Template
This metadata template file is a label mock-up designed to demonstrate the order of SB dictionary classes in a label, and the cross-referencing needed to properly identify the various data objects that might be present. It does not necessarily reflect any “real” case, and in general any cutting and pasting done needs to include a fair amount of intelligent interpretation to the real-life circumstances of the data.
It does, however, serve as a “working model”, in the sense that it will validate against the SB schemas, and a label designer can thus experiment with it for use in real labels.
Some comments are included regarding cardinality and required/optional status in key places. The definitive source for cardinality information, however, is always the schemas - not the examples.
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1L00.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<?xml-model href="https://pds.nasa.gov/pds4/sb/v1/PDS4_SB_1L00_1000.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<Product_Observational
xmlns="http://pds.nasa.gov/pds4/pds/v1"
xmlns:sb="http://pds.nasa.gov/pds4/sb/v1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pds.nasa.gov/pds4/pds/v1 https://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1L00.xsd
http://pds.nasa.gov/pds4/sb/v0 https://pds.nasa.gov/pds4/sb/v0/PDS4_SB_1L00_1000.xsd">
<Identification_Area>
<logical_identifier>urn:nasa:pds:bundle:collection:product</logical_identifier>
<version_id>1.0</version_id>
<title>Scratch space for designing dictionary classes</title>
<information_model_version>1.21.0.0</information_model_version>
<product_class>Product_Observational</product_class>
</Identification_Area>
<Observation_Area>
<Time_Coordinates>
<start_date_time xsi:nil="true" nilReason="inapplicable"/>
<stop_date_time xsi:nil="true" nilReason="inapplicable"/>
</Time_Coordinates>
<Investigation_Area>
<name>None</name>
<type>Mission</type>
<Internal_Reference>
<lid_reference>urn:nasa:pds:bundle:collection:none</lid_reference>
<reference_type>data_to_investigation</reference_type>
</Internal_Reference>
</Investigation_Area>
<Observing_System>
<Observing_System_Component>
<name>None</name>
<type>Host</type>
</Observing_System_Component>
</Observing_System>
<Target_Identification>
<name>None</name>
<type>Comet</type>
</Target_Identification>
<Discipline_Area>
<!--
NOTE:
Flags for missing data and units of measure MUST, MUST, MUST be defined in the
referenced array/image definitions.
-->
<sb:SB_Metadata>
<sb:Observation_Parameters>
<sb:Exposure>
<sb:exposure_duration unit="s">10</sb:exposure_duration>
<sb:exposure_description>Something</sb:exposure_description>
</sb:Exposure>
<sb:Filter>
<sb:filter_name>Red</sb:filter_name> <!-- required -->
<!-- All these fields are optional, but as much information should be provided as is known and applicable. -->
<sb:standard_filter_identification>Kron/Cousins R</sb:standard_filter_identification>
<sb:filter_type>Broadband</sb:filter_type>
<sb:center_wavelength unit="nm">630</sb:center_wavelength>
<sb:center_wavelength_is_weighted>false</sb:center_wavelength_is_weighted>
<sb:short_wavelength_limit unit="nm">505</sb:short_wavelength_limit>
<sb:long_wavelength_limit unit="nm">735</sb:long_wavelength_limit>
<sb:known_short_wavelength_leak>false</sb:known_short_wavelength_leak>
<sb:known_long_wavelength_leak>false</sb:known_long_wavelength_leak>
<sb:comment>Something</sb:comment>
<Internal_Reference>
<lid_reference>urn:nasa:pds:bundle:collection:lid</lid_reference>
<reference_type>data_to_filter_transmission_curve</reference_type>
<comment>something</comment>
</Internal_Reference>
</sb:Filter>
<sb:Timing>
<sb:midobservation_time_UTC_YMD>2023-01-01T00:00:00Z</sb:midobservation_time_UTC_YMD>
<sb:midobservation_time_UTC_JD unit="julian day">2459959.1234</sb:midobservation_time_UTC_JD>
<sb:start_time_UTC_JD unit="julian day">2459959.1111</sb:start_time_UTC_JD>
<sb:stop_time_UTC_JD unit="julian day">2459959.2222</sb:stop_time_UTC_JD>
<sb:comment>something</sb:comment>
</sb:Timing>
</sb:Observation_Parameters>
<sb:Calibration_Information>
<sb:Raw_Data_Product>
<sb:file_name>file.dat</sb:file_name>
<Internal_Reference>
<lidvid_reference>urn:nasa:pds:bundle:collection:product::1.0</lidvid_reference>
<reference_type>processed_data_to_raw_data</reference_type>
</Internal_Reference>
</sb:Raw_Data_Product>
<sb:Calibration_Applied>
<sb:comment>something</sb:comment>
<sb:bias_subtraction>true</sb:bias_subtraction>
<sb:dark_current_removal>true</sb:dark_current_removal>
<sb:dead_time_correction>true</sb:dead_time_correction>
<sb:effective_area_correction>true</sb:effective_area_correction>
<sb:flat_field_applied>true</sb:flat_field_applied>
<sb:scattered_light_correction>false</sb:scattered_light_correction>
<sb:smear_removal_applied>true</sb:smear_removal_applied>
<sb:wavelength_solution_applied>true</sb:wavelength_solution_applied>
<sb:conversion_to_physical_units>true</sb:conversion_to_physical_units>
</sb:Calibration_Applied>
<sb:Calibration_Reference_Files>
<sb:comment>something</sb:comment>
<sb:Bias_Map>
<sb:file_name>bias_frame.dat</sb:file_name> <!-- optional but recommended -->
<Internal_Reference> <!-- required -->
<lidvid_reference>urn:nasa:pds:bundle:collection:product::2.0</lidvid_reference> <!-- version ID is definitely required -->
<reference_type>image_to_bias_map_file</reference_type>
</Internal_Reference>
</sb:Bias_Map>
<sb:Bad_Pixel_Map>
<sb:file_name>badpixel.dat</sb:file_name> <!-- optional but recommended -->
<Internal_Reference> <!-- required -->
<lidvid_reference>urn:nasa:pds:bundle:collection:product::0.0</lidvid_reference> <!-- version ID is definitely required -->
<reference_type>image_to_bad_pixel_map</reference_type>
<comment>something</comment>
</Internal_Reference>
</sb:Bad_Pixel_Map>
<sb:Dark_Field>
<sb:file_name>dark.dat</sb:file_name> <!-- optional but recommended -->
<Internal_Reference> <!-- required -->
<lidvid_reference>urn:nasa:pds:bundle:collection:product::0.0</lidvid_reference> <!-- version ID is definitely required -->
<reference_type>image_to_dark_field_file</reference_type>
<comment>something</comment>
</Internal_Reference>
</sb:Dark_Field>
<sb:Demsear_Matrix>
<sb:file_name>desmear.dat</sb:file_name> <!-- optional but recommended -->
<Internal_Reference> <!-- required -->
<lidvid_reference>urn:nasa:pds:bundle:collection:product::0.0</lidvid_reference> <!-- version ID is definitely required -->
<reference_type>image_to_desmear_matrix</reference_type>
<comment>something</comment>
</Internal_Reference>
</sb:Demsear_Matrix>
<sb:Effective_Area_Table>
<sb:file_name>effective_area.dat</sb:file_name> <!-- optional but recommended -->
<Internal_Reference> <!-- required -->
<lidvid_reference>urn:nasa:pds:bundle:collection:product::0.0</lidvid_reference> <!-- version ID is definitely required -->
<reference_type>image_to_effective_area_file</reference_type>
<comment>something</comment>
</Internal_Reference>
</sb:Effective_Area_Table>
<sb:Flat_Field>
<sb:file_name>flat.dat</sb:file_name> <!-- optional but recommended -->
<Internal_Reference> <!-- required -->
<lidvid_reference>urn:nasa:pds:bundle:collection:product::0.0</lidvid_reference> <!-- version ID is definitely required -->
<reference_type>image_to_flat_field_file</reference_type>
<comment>something</comment>
</Internal_Reference>
</sb:Flat_Field>
<sb:Wavelength_Solution>
<sb:file_name>wavelength.dat</sb:file_name> <!-- optional but recommended -->
<Internal_Reference> <!-- required -->
<lidvid_reference>urn:nasa:pds:bundle:collection:product::0.0</lidvid_reference> <!-- version ID is definitely required -->
<reference_type>image_to_wavelength_solution_file</reference_type>
<comment>something</comment>
</Internal_Reference>
</sb:Wavelength_Solution>
</sb:Calibration_Reference_Files>
</sb:Calibration_Information>
<sb:Additional_Image_Metadata>
<Local_Internal_Reference>
<comment>something</comment>
<local_identifier_reference>Image</local_identifier_reference>
<local_reference_type>image_to_additional_metadata</local_reference_type>
</Local_Internal_Reference>
<sb:comment>something</sb:comment>
<sb:image_observation_type>Frame Sequence</sb:image_observation_type>
<sb:Ancillary_Data_Objects>
<!-- Note that the primary data is already identified at the top of the class -->
<sb:comment>something</sb:comment>
<sb:Quality_Map>
<Local_Internal_Reference>
<local_identifier_reference>QualityMap</local_identifier_reference>
<local_reference_type>image_to_quality_map</local_reference_type>
</Local_Internal_Reference>
<sb:Quality_Map_Definition>
<sb:flags_are_bit_flags>true</sb:flags_are_bit_flags> <!-- required -->
<sb:best_quality_value>0</sb:best_quality_value> <!-- required -->
<sb:Quality_Flag_Definition> <!-- Repeat as needed -->
<sb:flag_value>2</sb:flag_value>
<sb:flag_meaning>Bad attitude</sb:flag_meaning>
</sb:Quality_Flag_Definition>
<sb:Quality_Flag_Definition>
<sb:flag_value>4</sb:flag_value>
<sb:flag_meaning>escaped during processing</sb:flag_meaning>
</sb:Quality_Flag_Definition>
<sb:Quality_Flag_Definition>
<sb:flag_value>8</sb:flag_value>
<sb:flag_meaning>Looked at me funny.</sb:flag_meaning>
</sb:Quality_Flag_Definition>
</sb:Quality_Map_Definition>
<sb:comment>something</sb:comment>
</sb:Quality_Map>
<sb:Error_Estimates_Map>
<Local_Internal_Reference>
<local_identifier_reference>ErrorMap</local_identifier_reference>
<local_reference_type>image_to_error_map</local_reference_type>
</Local_Internal_Reference>
<sb:comment>something</sb:comment>
</sb:Error_Estimates_Map>
<sb:SNR_Map>
<Local_Internal_Reference>
<local_identifier_reference>SNRMap</local_identifier_reference>
<local_reference_type>image_to_snr_map</local_reference_type>
</Local_Internal_Reference>
<sb:comment>something</sb:comment>
</sb:SNR_Map>
</sb:Ancillary_Data_Objects>
<sb:Additional_Geometry_Metadata>
<sb:comment>something</sb:comment>
<sb:Instrument_Position_Angles>
<sb:y_axis_position_angle unit="deg">20</sb:y_axis_position_angle>
<sb:z_axis_position_angle unit="deg">110</sb:z_axis_position_angle>
</sb:Instrument_Position_Angles>
<sb:Geometry_Vector_Time> <!-- This class is still in development. Use with the expectation it will change. -->
<sb:position_velocity_vectors>Spacecraft_to_Target</sb:position_velocity_vectors>
<sb:time_at_target_UTC_YMD>2022-12-25T12:34:56.789Z</sb:time_at_target_UTC_YMD>
<sb:time_at_target_UTC_JD unit="julian day">2459925.987</sb:time_at_target_UTC_JD>
</sb:Geometry_Vector_Time>
<sb:Geometry_Vector_Time> <!-- This class is still in development. Use with the expectation it will change. -->
<sb:position_velocity_vectors>Earth_to_Target</sb:position_velocity_vectors>
<sb:time_at_Earth_UTC_YMD>2022-12-25T12:34:56.789Z</sb:time_at_Earth_UTC_YMD>
<sb:time_at_Earth_UTC_JD unit="julian day">2459925.987</sb:time_at_Earth_UTC_JD>
</sb:Geometry_Vector_Time>
<sb:Geometry_Vector_Time> <!-- This class is still in development. Use with the expectation it will change. -->
<sb:position_velocity_vectors>Sun_to_Spacecraft</sb:position_velocity_vectors>
<sb:time_at_Sun_UTC_YMD>2022-12-25T12:34:56.789Z</sb:time_at_Sun_UTC_YMD>
<sb:time_at_Sun_UTC_JD unit="julian day">2459925.987</sb:time_at_Sun_UTC_JD>
</sb:Geometry_Vector_Time>
<sb:Geometry_Vector_Time> <!-- This class is still in development. Use with the expectation it will change. -->
<sb:position_velocity_vectors>Earth_to_Spacecraft</sb:position_velocity_vectors>
<sb:time_at_Earth_UTC_YMD>2022-12-25T12:34:56.789Z</sb:time_at_Earth_UTC_YMD>
<sb:time_at_Earth_UTC_JD unit="julian day">2459925.987</sb:time_at_Earth_UTC_JD>
</sb:Geometry_Vector_Time>
</sb:Additional_Geometry_Metadata>
<!-- "Per_Frame_Metadata" is only valid for "Frame Sequence" data. Repeated for each frame. -->
<sb:Per_Frame_Metadata>
<sb:frame_number>0</sb:frame_number>
<sb:frame_exposure_duration unit="s">10.5</sb:frame_exposure_duration>
<sb:comment>something</sb:comment>
<sb:Midframe_Time>
<sb:midobservation_time_UTC_YMD>2023-01-05T11:22:33.44Z</sb:midobservation_time_UTC_YMD>
<sb:midobservation_time_UTC_JD unit="julian day">2459955.5678</sb:midobservation_time_UTC_JD>
<sb:delta_time_from_sequence_start unit="s">5</sb:delta_time_from_sequence_start>
</sb:Midframe_Time>
<sb:Frame_Pointing>
<sb:frame_center_ra unit="deg">112.0</sb:frame_center_ra>
<sb:frame_center_dec unit="deg">-45.0</sb:frame_center_dec>
<sb:celestial_north_clock_angle unit="deg">75.123</sb:celestial_north_clock_angle>
<sb:Instrument_Position_Angles>
<!-- exactly 2 of these 3 attributes may be used -->
<!-- <sb:x_axis_position_angle unit="deg">90</sb:x_axis_position_angle> -->
<sb:y_axis_position_angle unit="deg">57.123</sb:y_axis_position_angle>
<sb:z_axis_position_angle unit="deg">123.04</sb:z_axis_position_angle>
</sb:Instrument_Position_Angles>
</sb:Frame_Pointing>
<sb:Instrument_to_J2000_Quaternion>
<sb:qcos>0.12345</sb:qcos>
<sb:qsin1>0.12345</sb:qsin1>
<sb:qsin2>0.12345</sb:qsin2>
<sb:qsin3>0.12345</sb:qsin3>
</sb:Instrument_to_J2000_Quaternion>
</sb:Per_Frame_Metadata>
</sb:Additional_Image_Metadata>
</sb:SB_Metadata>
</Discipline_Area>
</Observation_Area>
<File_Area_Observational>
<File>
<file_name>No.Data</file_name>
<comment>
The scenario here is a file which contains three cubes - one for data,
one for error, and one for quality - in which the planes correspond.
There is also a single bad pixel map image that applies to all image
frames. There are five planes defined for each cube. (offsets and
sizes have been ignored.)
</comment>
</File>
<Array_3D_Image>
<name>Image Data</name>
<local_identifier>Image</local_identifier>
<offset unit="byte">0</offset>
<axes>3</axes>
<axis_index_order>Last Index Fastest</axis_index_order>
<Element_Array>
<data_type>SignedByte</data_type>
<unit>DN</unit>
</Element_Array>
<Axis_Array>
<axis_name>Line</axis_name>
<elements>1</elements>
<sequence_number>1</sequence_number>
</Axis_Array>
<Axis_Array>
<axis_name>Sample</axis_name>
<elements>1</elements>
<sequence_number>2</sequence_number>
</Axis_Array>
<Axis_Array>
<axis_name>Frame</axis_name>
<elements>5</elements>
<sequence_number>3</sequence_number>
</Axis_Array>
</Array_3D_Image>
<Array_3D>
<name>Error map</name>
<local_identifier>ErrorMap</local_identifier>
<offset unit="byte">10</offset>
<axes>3</axes>
<axis_index_order>Last Index Fastest</axis_index_order>
<Element_Array>
<data_type>IEEE754MSBSingle</data_type>
<unit>Percent</unit>
</Element_Array>
<Axis_Array>
<axis_name>Line</axis_name>
<elements>1</elements>
<sequence_number>1</sequence_number>
</Axis_Array>
<Axis_Array>
<axis_name>Sample</axis_name>
<elements>1</elements>
<sequence_number>2</sequence_number>
</Axis_Array>
<Axis_Array>
<axis_name>Error Estimate</axis_name>
<elements>5</elements>
<sequence_number>3</sequence_number>
</Axis_Array>
</Array_3D>
<Array_3D>
<local_identifier>QualityMap</local_identifier>
<offset unit="byte">20</offset>
<axes>3</axes>
<axis_index_order>Last Index Fastest</axis_index_order>
<description>
The elements in this array are quality bit-flag fields.
</description>
<Element_Array>
<data_type>UnsignedByte</data_type>
</Element_Array>
<Axis_Array>
<axis_name>Line</axis_name>
<elements>1</elements>
<sequence_number>1</sequence_number>
</Axis_Array>
<Axis_Array>
<axis_name>Sample</axis_name>
<elements>1</elements>
<sequence_number>2</sequence_number>
</Axis_Array>
<Axis_Array>
<axis_name>Quality Flags</axis_name>
<elements>5</elements>
<sequence_number>3</sequence_number>
</Axis_Array>
</Array_3D>
<Array_2D>
<local_identifier>SNRMap</local_identifier>
<offset unit="byte">30</offset>
<axes>2</axes>
<axis_index_order>Last Index Fastest</axis_index_order>
<description>
Another array to test the SNR option.
</description>
<Element_Array>
<data_type>UnsignedByte</data_type>
</Element_Array>
<Axis_Array>
<axis_name>Line</axis_name>
<elements>1</elements>
<sequence_number>1</sequence_number>
</Axis_Array>
<Axis_Array>
<axis_name>Sample</axis_name>
<elements>1</elements>
<sequence_number>2</sequence_number>
</Axis_Array>
<Special_Constants>
<error_constant>1</error_constant>
</Special_Constants>
</Array_2D>
</File_Area_Observational>
</Product_Observational>