<?xml version="1.0" encoding="UTF-8"?>
<vosi:tableset xmlns:vosi="http://www.ivoa.net/xml/VOSITables/v1.0"
               xmlns:vs="http://www.ivoa.net/xml/VODataService/v1.1"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <schema>
    <name>default</name>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_mla_statuscdr</name>
    <description>MESSENGER at Venus — Mercury Laser Altimeter PDS4 Engineering</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_cdr_counts</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Counter</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_cdr_eng</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Engineering</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_cdr_gamma_burst</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Gamma Burst</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_cdr_gcr_spectra</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Galactic Cosmic Ray Spectra</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_cdr_spectra</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Spectra</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_ddr_ncp</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Neutron Count Rate</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_ddr_ncr</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Relative Neutron Count Rate</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_raw_calibration</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Calibration and Diagnostic</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_raw_command</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Command</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_raw_counts</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Time-Correlated Counts</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_raw_events</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Event Mode</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_raw_full_spectra</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Full Spectra</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_raw_gamma_burst</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Gamma Burst</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_raw_gcr_spectra</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Galactic Cosmic Ray Spectra</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_raw_short_science</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Short Science Spectra</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_raw_spectra</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Spectra</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_ns_raw_status</name>
    <description>MESSENGER at Venus — Neutron Spectrometer PDS4 Telemetry Status</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_rss_tnf4</name>
    <description>MESSENGER at Venus — Radio Science Subsystem PDS4 Tracking and Navigation File (TRK-2-34 data) Record</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_xrs_command</name>
    <description>MESSENGER at Venus — X-Ray Spectrometer PDS4 Command</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_xrs_edr</name>
    <description>MESSENGER at Venus — X-Ray Spectrometer PDS4 Spectra</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_xrs_footprint</name>
    <description>MESSENGER at Venus — X-Ray Spectrometer PDS4 Footprint</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_xrs_rdrmap</name>
    <description>MESSENGER at Venus — X-Ray Spectrometer PDS4 Map</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_messenger_xrs_xrscdr</name>
    <description>MESSENGER at Venus — X-Ray Spectrometer PDS4 Spectra</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_mgn_rdrs_adf</name>
    <description>Magellan — Radar System PDS4 ARCDR Altimetry Data</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_mgn_rdrs_altedr</name>
    <description>Magellan — Radar System PDS3 Altimeter Experiment Data Record</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_mgn_rdrs_anf</name>
    <description>Magellan — Radar System PDS4 SCVDR Altimetry Inversion File</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_mgn_rdrs_c1midr</name>
    <description>Magellan — Radar System PDS4 Compressed-Resolution MIDR</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_mgn_rdrs_c2midr</name>
    <description>Magellan — Radar System PDS4 Twice Compressed-Resolution MIDR</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_mgn_rdrs_c3midr</name>
    <description>Magellan — Radar System PDS4 Three Times Compressed-Resolution MIDR</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_mgn_rdrs_cbidr</name>
    <description>Magellan — Radar System PDS3 Compressed Basic Image Data Record</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>ode_venus_mgn_rdrs_edf</name>
    <description>Magellan — Radar System PDS4 SCVDR Emissivity Data File</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>rosetta_anaglyphs</name>
    <description>Rosetta OSIRIS Anaglyphs of Comet 67P/Churyumov-Gerasimenko</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>rosetta_anaglyphs_all_anaglyphs</name>
    <description>All anaglyphs</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_arcb_nrao_rtls_gbt_mlmap</name>
    <description>Arecibo Observatory and National Radio Astronomy Observatory — Radio Telescope / Robert C. Byrd Green Bank Telescope PDS4 Multi-Look Maps</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_arcb_nrao_rtls_gbt_rad</name>
    <description>Arecibo Observatory and National Radio Astronomy Observatory — Radio Telescope / Robert C. Byrd Green Bank Telescope PDS3 Radar Backscatter Image</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_arcb_rtls_rad</name>
    <description>Arecibo Observatory — Radio Telescope PDS3 Radar Backscatter Image</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_cal_ac</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Anti-Coincidence Spectra</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_cal_raw</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Ge Raw Spectra</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_cal_scr</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Shield Count Rate</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_cal_sh</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Shield Spectra</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_cal_sh2</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Shield Spectra 2</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_cal_sh3</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Shield Spectra 3</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_command</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Command</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_dap</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Map</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_fpga</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 FPGA ADC Diagnostic Information</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_grs_eng</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Engineering</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_hpge_ac</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Anti-Coincident Spectra</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_hpge_raw</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 HPGe Spectra</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_microphonics</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Microphonics</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_ratecounters</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Software Telemetry</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_rdr_sum</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Spectral Sum</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_shield_counter</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Anti-Coincidence Shield</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_shield_spectra</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Shield Spectra</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_shield_spectra2</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Shield Spectra 2</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_grs_status</name>
    <description>MESSENGER at Venus — Gamma Ray Spectrometer PDS4 Telemetry Status</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mascs_uvvcdr</name>
    <description>MESSENGER at Venus — MERCURY ATMOSPHERIC AND SURFACE COMPOSITION SPECTROMETER PDS3 UVVS Calibrated Data Record</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mascs_uvvedr</name>
    <description>MESSENGER at Venus — MERCURY ATMOSPHERIC AND SURFACE COMPOSITION SPECTROMETER PDS3 UVVS Experiment Data Record</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mascs_vircdr</name>
    <description>MESSENGER at Venus — MERCURY ATMOSPHERIC AND SURFACE COMPOSITION SPECTROMETER PDS3 VIRS Calibrated Data Record</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mascs_viredr</name>
    <description>MESSENGER at Venus — MERCURY ATMOSPHERIC AND SURFACE COMPOSITION SPECTROMETER PDS3 VIRS Experiment Data Record</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mdis_nac_cdrnac</name>
    <description>MESSENGER at Venus — Mercury Dual Imaging System - Narrow Angle Camera PDS4 Narrow-Angle Calibrated Data Record</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mdis_nac_edrnac</name>
    <description>MESSENGER at Venus — Mercury Dual Imaging System - Narrow Angle Camera PDS4 Narrow-Angle Experiment Data Record</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mdis_wac_cdrwac</name>
    <description>MESSENGER at Venus — Mercury Dual Imaging System - Wide Angle Camera PDS4 Wide-Angle Calibrated Data Record</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mdis_wac_edrwac</name>
    <description>MESSENGER at Venus — Mercury Dual Imaging System - Wide Angle Camera PDS4 Wide-Angle Experiment Data Record</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mla_hdiagnostic</name>
    <description>MESSENGER at Venus — Mercury Laser Altimeter PDS4 Hardware Diagnostic</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mla_hdiagnosticcdr</name>
    <description>MESSENGER at Venus — Mercury Laser Altimeter PDS4 Hardware Diagnostic</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mla_radr</name>
    <description>MESSENGER at Venus — Mercury Laser Altimeter PDS4 Geolocated Radiometric</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mla_scicdr</name>
    <description>MESSENGER at Venus — Mercury Laser Altimeter PDS4 Science</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mla_sciedr</name>
    <description>MESSENGER at Venus — Mercury Laser Altimeter PDS4 Science</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mla_scigdr</name>
    <description>MESSENGER at Venus — Mercury Laser Altimeter PDS4 Gridded Data Record</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mla_scirdrv1</name>
    <description>MESSENGER at Venus — Mercury Laser Altimeter PDS4 Geolocated Science V1</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mla_scirdrv2</name>
    <description>MESSENGER at Venus — Mercury Laser Altimeter PDS4 Geolocated Science V2</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mla_shadr</name>
    <description>MESSENGER at Venus — Mercury Laser Altimeter PDS4 Spherical Harmonics ASCII</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  <table xsi:type="vs:Table">
    <name>venus_messenger_mla_status</name>
    <description>MESSENGER at Venus — Mercury Laser Altimeter PDS4 Engineering</description>
    <column>
      <name>granule_uid</name>
      <description>STAC item identifier.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>service_title</name>
      <description>Title of resource = schema name (EPN-TAP2 mandatory, fixed value -- keep this in sync with service.title above).
</description>
      <ucd>meta.title</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>granule_gid</name>
      <description>STAC collection id (this item's granule group).</description>
      <ucd>meta.id;meta.dataset</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>obs_id</name>
      <description>PDS logical identifier of the product, when available.</description>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_name</name>
      <description>Observed target (ssys:targets is a list; first entry is used).</description>
      <ucd>meta.id;src</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>target_class</name>
      <ucd>meta.code.class;src.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_min</name>
      <description>Start time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.start</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>time_max</name>
      <description>End time of the observation (Julian Date).</description>
      <unit>d</unit>
      <ucd>time.end</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>instrument_host_name</name>
      <ucd>meta.id;instr.obsty</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>instrument_name</name>
      <description>Instrument (instruments is a list; first entry is used).</description>
      <ucd>meta.id;instr</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>dataproduct_type</name>
      <ucd>meta.code.class</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>processing_level</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>creation_date</name>
      <ucd>time.creation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>file_name</name>
      <description>Title of the data asset (largest asset whose roles include "data").</description>
      <ucd>meta.id;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_url</name>
      <description>STAC assets are keyed by a per-item file name, not a fixed key, so the converter is handed the whole assets dict and picks the data file itself (largest asset with roles containing "data").
</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_format</name>
      <ucd>meta.code.mime</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_estsize</name>
      <unit>byte</unit>
      <ucd>phys.size;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType">long</dataType>
    </column>
    <column>
      <name>s_region</name>
      <description>Footprint, used for CONTAINS()/INTERSECTS() spatial predicates.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>measurement_type</name>
      <ucd>meta.code</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1_resol</name>
      <description>Ground sample distance (same source as c2_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2_resol</name>
      <description>Ground sample distance (same source as c1_resol).</description>
      <unit>m</unit>
      <ucd>pos.resolution</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>spatial_frame_type</name>
      <description>Always "body" for this proxy -- a fixed value, not read from STAC (see the `constant` config option instead of `stac_path`).
</description>
      <ucd>pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>thumbnail_url</name>
      <description>href of the asset whose roles include "thumbnail".</description>
      <ucd>meta.ref.url;meta.preview</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>bib_reference</name>
      <ucd>meta.bib.doi</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>external_link</name>
      <description>href of the asset whose roles include "metadata".</description>
      <ucd>meta.ref.url</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>modification_date</name>
      <ucd>time.update</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>release_date</name>
      <ucd>time.release</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>time_refposition</name>
      <ucd>meta.id</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>c1min</name>
      <description>Minimum longitude of the footprint. UCD per EPN-TAP2 table 2 for spatial_frame_type=body.
</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c1max</name>
      <description>Maximum longitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lon;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2min</name>
      <description>Minimum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>c2max</name>
      <description>Maximum latitude of the footprint.</description>
      <unit>deg</unit>
      <ucd>pos.bodyrc.lat;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>filter</name>
      <description>Name of the first entry of properties.bands, if present.</description>
      <ucd>meta.id;instr.filter</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>incidence_min</name>
      <description>Incidence angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>incidence_max</name>
      <unit>deg</unit>
      <ucd>pos.incidenceAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_min</name>
      <description>Phase angle (single value in this catalog, reused for min and max).</description>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.min</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>phase_max</name>
      <unit>deg</unit>
      <ucd>pos.phaseAng;stat.max</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>sun_distance</name>
      <ucd>pos.distance;pos.heliocentric</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>target_region</name>
      <description>Lower-cased first entry of ssys:targets (UAT vocabulary term).</description>
      <ucd>meta.id;src;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>spatial_coordinate_description</name>
      <description>IAU CRS name/code.</description>
      <ucd>meta.code.class;pos.frame</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>access_md5</name>
      <description>MD5/checksum of the primary data asset, when available.</description>
      <ucd>meta.checksum;meta.file</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>coverage</name>
      <description>href of a MOC/HEALPix coverage asset (PDSSP convention), when present.</description>
      <ucd>pos.outline;obs.field</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
    <column>
      <name>pixelscale</name>
      <unit>km/pix</unit>
      <ucd>instr.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>map_scale</name>
      <ucd>pos.wcs.scale</ucd>
      <dataType xsi:type="vs:VOTableType">double</dataType>
    </column>
    <column>
      <name>publisher</name>
      <description>Name of the collection's "host" provider.</description>
      <ucd>meta.curation</ucd>
      <dataType xsi:type="vs:VOTableType" arraysize="*">char</dataType>
    </column>
  </table>
  </schema>
</vosi:tableset>
