<?xml version="1.0" encoding="UTF-8"?>
<eml:eml xmlns:eml="https://eml.ecoinformatics.org/eml-2.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:stmml="http://www.xml-cml.org/schema/stmml-1.2" packageId="cdfw_dungeness-crab.v2026.10.21" system="calcofi.io" xsi:schemaLocation="https://eml.ecoinformatics.org/eml-2.2.0 https://eml.ecoinformatics.org/eml-2.2.0/eml.xsd">
  <dataset>
    <alternateIdentifier>https://calcofi.io/datasets/cdfw_dungeness-crab/</alternateIdentifier>
    <shortName>Dungeness Crab Megalopae</shortName>
    <title>CDFW Dungeness Crab Megalopae</title>
    <creator>
      <individualName>
        <givenName>Laura</givenName>
        <surName>Rogers-Bennett</surName>
      </individualName>
      <organizationName>California Department of Fish and Wildlife (CDFW)</organizationName>
    </creator>
    <associatedParty>
      <individualName>
        <givenName>Emily</givenName>
        <surName>Jones</surName>
      </individualName>
      <organizationName>Scripps Institution of Oceanography (SIO)</organizationName>
      <role>data collection</role>
    </associatedParty>
    <associatedParty>
      <individualName>
        <givenName>Christy</givenName>
        <surName>Juhasz</surName>
      </individualName>
      <organizationName>California Department of Fish and Wildlife (CDFW)</organizationName>
      <role>other</role>
    </associatedParty>
    <associatedParty>
      <individualName>
        <givenName>Julia</givenName>
        <surName>Coates</surName>
      </individualName>
      <organizationName>California Department of Fish and Wildlife (CDFW)</organizationName>
      <role>other</role>
    </associatedParty>
    <pubDate>2026-10-21</pubDate>
    <language>eng</language>
    <abstract>
      <para>Dungeness crab (Metacarcinus magister) megalopae and larval decapods picked from archived CalCOFI oblique-tow plankton samples, examined for the California Department of Fish and Wildlife. Two efforts: a 2008-2014 time series of 310 sorted samples (A. Klemmedson, 2015) yielding 24 M. magister megalopae from 14 samples, and 216 archived samples from the 1949-2009 sorting log that were examined and found free of M. magister (1984-2009, E. Jones, as of 2012-02-15). Only examined samples are published — the log's remaining unsorted rows are a fact of the archive's inventory, not a sample of this dataset. Spring cruises, CalBOBL oblique tows, lines &lt; 80 / stations &lt; 90. Counts are occurrence in the examined aliquot, not standardized density. Sorting was performed at the SIO Pelagic Invertebrate Collection, where the removed megalopae are archived in vials.</para>
    </abstract>
    <keywordSet>
      <keyword>EARTH SCIENCE &gt; BIOSPHERE &gt; ECOSYSTEMS &gt; AQUATIC ECOSYSTEMS &gt; PLANKTON &gt; ZOOPLANKTON</keyword>
      <keyword>EARTH SCIENCE &gt; BIOLOGICAL CLASSIFICATION &gt; ANIMALS/INVERTEBRATES &gt; ARTHROPODS &gt; CRUSTACEANS &gt; DECAPODS</keyword>
      <keywordThesaurus>GCMD Science Keywords</keywordThesaurus>
    </keywordSet>
    <keywordSet>
      <keyword>Invertebrate Abundance and Diversity</keyword>
      <keyword>Zooplankton Biomass and Diversity</keyword>
      <keyword>CalCOFI Network</keyword>
      <keyword>Zooplankton</keyword>
      <keyword>abundance</keyword>
      <keyword>count</keyword>
      <keyword>Fish Eggs &amp; Larvae</keyword>
    </keywordSet>
    <intellectualRights>
      <para>This work is licensed under a <ulink url="https://creativecommons.org/licenses/by/4.0/"><citetitle>Creative Commons Attribution 4.0 International</citetitle></ulink>.</para>
    </intellectualRights>
    <licensed>
      <licenseName>Creative Commons Attribution 4.0 International</licenseName>
      <url>https://creativecommons.org/licenses/by/4.0/</url>
      <identifier>CC-BY-4.0</identifier>
    </licensed>
    <distribution scope="document">
      <online>
        <url function="information">https://calcofi.io/datasets/cdfw_dungeness-crab/</url>
      </online>
    </distribution>
    <coverage>
      <geographicCoverage>
        <geographicDescription>33.5–51.0°N, 132.2–120.7°W</geographicDescription>
        <boundingCoordinates>
          <westBoundingCoordinate>-132.25</westBoundingCoordinate>
          <eastBoundingCoordinate>-120.675</eastBoundingCoordinate>
          <northBoundingCoordinate>51.05</northBoundingCoordinate>
          <southBoundingCoordinate>33.46</southBoundingCoordinate>
        </boundingCoordinates>
      </geographicCoverage>
      <temporalCoverage>
        <rangeOfDates>
          <beginDate>
            <calendarDate>1984</calendarDate>
          </beginDate>
          <endDate>
            <calendarDate>2014</calendarDate>
          </endDate>
        </rangeOfDates>
      </temporalCoverage>
      <taxonomicCoverage>
        <generalTaxonomicCoverage>Zooplankton</generalTaxonomicCoverage>
        <taxonomicClassification>
          <taxonRankName>family</taxonRankName>
          <taxonRankValue>Cancridae</taxonRankValue>
          <commonName>rock crabs</commonName>
          <taxonId provider="https://www.marinespecies.org">106749</taxonId>
        </taxonomicClassification>
        <taxonomicClassification>
          <taxonRankName>order</taxonRankName>
          <taxonRankValue>Decapoda</taxonRankValue>
          <commonName>decapods</commonName>
          <taxonId provider="https://www.marinespecies.org">1130</taxonId>
        </taxonomicClassification>
        <taxonomicClassification>
          <taxonRankName>species</taxonRankName>
          <taxonRankValue>Metacarcinus magister</taxonRankValue>
          <commonName>Dungeness crab</commonName>
          <taxonId provider="https://www.marinespecies.org">440388</taxonId>
        </taxonomicClassification>
      </taxonomicCoverage>
    </coverage>
    <maintenance>
      <description>
        <para>archived</para>
      </description>
    </maintenance>
    <contact>
      <organizationName>CalCOFI</organizationName>
      <electronicMailAddress>data@calcofi.io</electronicMailAddress>
    </contact>
    <methods>
      <methodStep>
        <description>
          <para>Oblique tow; the CDFW Dungeness megalopae sorting log records the tow geometry but not the net.</para>
        </description>
      </methodStep>
    </methods>
    <dataTable>
      <entityName>sample</entityName>
      <entityDescription>One row per physical sampling event at its native grain (site, tow, net, subsample, cast, bottle, water, filter, underway, transect, sighting, deployment, scan, region pool). An adjacency list: parent_sample_key points at the containing event and root_sample_key at the top of the chain, so counting distinct events at any level is a single GROUP BY.</entityDescription>
      <attributeList>
        <attribute>
          <attributeName>sample_key</attributeName>
          <attributeLabel>Sample Key</attributeLabel>
          <attributeDefinition>Globally unique event key, namespaced dataset_key:sample_type:id so the same integer id in two datasets — or at two event levels in one dataset — never collides.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Globally unique event key, namespaced dataset_key:sample_type:id so the same integer id in two datasets — or at two event levels in one dataset — never collides.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>sample_type</attributeName>
          <attributeLabel>Sample Type</attributeLabel>
          <attributeDefinition>Event grain: site, tow, net, subsample, cast, bottle, water (an eDNA water sample), filter (an eDNA water filter), underway, transect (a visual-survey effort segment), sighting, deployment (a sonobuoy), scan (one analysed hour of a recording) or region_pool.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Event grain: site, tow, net, subsample, cast, bottle, water (an eDNA water sample), filter (an eDNA water filter), underway, transect (a visual-survey effort segment), sighting, deployment (a sonobuoy), scan (one analysed hour of a recording) or region_pool.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>parent_sample_key</attributeName>
          <attributeLabel>Parent Sample Key</attributeLabel>
          <attributeDefinition>The containing event (net → tow → site; bottle → cast; sighting → transect; scan → deployment). NULL at the top of the chain. Flat adjacency list: attributes are not inherited.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>The containing event (net → tow → site; bottle → cast; sighting → transect; scan → deployment). NULL at the top of the chain. Flat adjacency list: attributes are not inherited.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>root_sample_key</attributeName>
          <attributeLabel>Root Sample Key</attributeLabel>
          <attributeDefinition>Top of this event's containment chain; equals sample_key for single-level datasets. Use count(DISTINCT root_sample_key) to count stations/casts irrespective of grain.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Top of this event's containment chain; equals sample_key for single-level datasets. Use count(DISTINCT root_sample_key) to count stations/casts irrespective of grain.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>dataset_key</attributeName>
          <attributeLabel>Dataset Key</attributeLabel>
          <attributeDefinition>Provenance stamp: provider_dataset.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Provenance stamp: provider_dataset.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>grid_key</attributeName>
          <attributeLabel>Grid Key</attributeLabel>
          <attributeDefinition>CalCOFI station grid cell. NULL where the dataset has no station assignment (region-pooled phytoplankton).</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>CalCOFI station grid cell. NULL where the dataset has no station assignment (region-pooled phytoplankton).</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>site_key</attributeName>
          <attributeLabel>Site Key</attributeLabel>
          <attributeDefinition>CalCOFI station natural key as the source records it (line/station, e.g. 090.0 060.0). Present on 13 of the 18 source event tables, so it is carried on the event dimension rather than lost to consolidation; grid_key is the derived grid cell, this is the source's own station id.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>CalCOFI station natural key as the source records it (line/station, e.g. 090.0 060.0). Present on 13 of the 18 source event tables, so it is carried on the event dimension rather than lost to consolidation; grid_key is the derived grid cell, this is the source's own station id.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>cruise_key</attributeName>
          <attributeLabel>Cruise Key</attributeLabel>
          <attributeDefinition>CalCOFI cruise natural key YYYY-MM-NODC.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>CalCOFI cruise natural key YYYY-MM-NODC.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>order_occ</attributeName>
          <attributeLabel>Order of Occupation</attributeLabel>
          <attributeDefinition>Order in which the station was occupied on the cruise. Source spelling varies (order_occ, ord_occ) and CTD stores it as text; normalised to an integer here.</attributeDefinition>
          <storageType>INTEGER</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>integer</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>latitude</attributeName>
          <attributeLabel>Latitude</attributeLabel>
          <attributeDefinition>Event latitude (WGS84).</attributeDefinition>
          <storageType>DOUBLE</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>degree</standardUnit>
              </unit>
              <numericDomain>
                <numberType>real</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>longitude</attributeName>
          <attributeLabel>Longitude</attributeLabel>
          <attributeDefinition>Event longitude (WGS84).</attributeDefinition>
          <storageType>DOUBLE</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>degree</standardUnit>
              </unit>
              <numericDomain>
                <numberType>real</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>datetime</attributeName>
          <attributeLabel>Datetime</attributeLabel>
          <attributeDefinition>Event start time (UTC).</attributeDefinition>
          <storageType>TIMESTAMP</storageType>
          <measurementScale>
            <dateTime>
              <formatString>YYYY-MM-DDThh:mm:ss</formatString>
            </dateTime>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>depth_min_m</attributeName>
          <attributeLabel>Depth Min</attributeLabel>
          <attributeDefinition>Shallowest depth sampled by this event.</attributeDefinition>
          <storageType>DOUBLE</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>meter</standardUnit>
              </unit>
              <numericDomain>
                <numberType>real</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>depth_max_m</attributeName>
          <attributeLabel>Depth Max</attributeLabel>
          <attributeDefinition>Deepest depth sampled by this event; for swfsc_ichthyo tows and nets the maximum possible depth of the net (SWFSC Net.NetDepth, nominal: over a shallower sea floor the net did not reach it).</attributeDefinition>
          <storageType>DOUBLE</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>meter</standardUnit>
              </unit>
              <numericDomain>
                <numberType>real</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>tow_type</attributeName>
          <attributeLabel>Tow Type</attributeLabel>
          <attributeDefinition>Net gear code where the dataset records one (C1/CB/CV/PV oblique or vertical, MT manta); NULL for gears and datasets without one. Needed to compute gear-appropriate CPUE.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Net gear code where the dataset records one (C1/CB/CV/PV oblique or vertical, MT manta); NULL for gears and datasets without one. Needed to compute gear-appropriate CPUE.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>data_stage</attributeName>
          <attributeLabel>Data Stage</attributeLabel>
          <attributeDefinition>The source's own processing state for this event: final (post-cruise calibrations applied) or preliminary (not for publication — the source warns that oxygen, nitrate and chlorophyll may change significantly once calibrated). Populated by calcofi_ctd-cast; NULL where the dataset draws no such distinction, which is not a claim that the data are final.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>The source's own processing state for this event: final (post-cruise calibrations applied) or preliminary (not for publication — the source warns that oxygen, nitrate and chlorophyll may change significantly once calibrated). Populated by calcofi_ctd-cast; NULL where the dataset draws no such distinction, which is not a claim that the data are final.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>geom</attributeName>
          <attributeLabel>Geometry</attributeLabel>
          <attributeDefinition>Point geometry minted from longitude/latitude (OGC:CRS84).</attributeDefinition>
          <storageType>GEOMETRY('EPSG:4326')</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Point geometry minted from longitude/latitude (OGC:CRS84).</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>source_uuid</attributeName>
          <attributeLabel>Source Uuid</attributeLabel>
          <attributeDefinition>Source Uuid</attributeDefinition>
          <storageType>UUID</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Source Uuid</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>hex7</attributeName>
          <attributeLabel>H3 Cell (res 7)</attributeLabel>
          <attributeDefinition>One UBIGINT H3 cell at resolution 7: the parent of the resolution-10 cell of this event's own latitude / longitude (not the resolution-7 cell the position falls in), defined exactly as obs_bio.hex7 / obs_env.hex7; NULL without a finite position. Lets a per-sample value in sample_measurement be drawn in hexagons. An observation carries its own position, so a CTD scan can sit in another cell than its cast.</attributeDefinition>
          <storageType>UBIGINT</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>whole</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>seafloor_depth_m</attributeName>
          <attributeDefinition>seafloor_depth_m</attributeDefinition>
          <storageType>DOUBLE</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>real</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>station_uuid</attributeName>
          <attributeDefinition>station_uuid</attributeDefinition>
          <storageType>UUID</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>station_uuid</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>station_uuid_method</attributeName>
          <attributeDefinition>station_uuid_method</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>station_uuid_method</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
      </attributeList>
    </dataTable>
    <dataTable>
      <entityName>obs</entityName>
      <entityDescription>The occurrence-headline long table: one scalar measurement per row, environmental (realm = 'env') and biological (realm = 'bio') together. Biological taxon is the global taxon_key; sub-occurrence detail (length/stage bins, behavior) lives in obs_attribute, and event-level effort in sample_measurement.</entityDescription>
      <physical>
        <objectName>data_0.parquet</objectName>
        <size unit="bytes">19854</size>
        <authentication method="SHA-256">2ddcc92df3a87c63e87460bbc4ab712ffc18de44192f6330f85e1c413383d61b</authentication>
        <dataFormat>
          <externallyDefinedFormat>
            <formatName>Apache Parquet</formatName>
          </externallyDefinedFormat>
        </dataFormat>
        <distribution>
          <online>
            <url function="download">https://storage.googleapis.com/calcofi-db/ducklake/tables/obs/dataset_key=cdfw_dungeness-crab/1bd58153aefc8147fac7c598/data_0.parquet</url>
          </online>
        </distribution>
      </physical>
      <attributeList>
        <attribute>
          <attributeName>obs_id</attributeName>
          <attributeLabel>Observation ID</attributeLabel>
          <attributeDefinition>Surrogate key, renumbered globally when the release concatenates the per-dataset shards.</attributeDefinition>
          <storageType>BIGINT</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>integer</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>realm</attributeName>
          <attributeLabel>Realm</attributeLabel>
          <attributeDefinition>env for physical/chemical measurements, bio for organism observations.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>env for physical/chemical measurements, bio for organism observations.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>dataset_key</attributeName>
          <attributeLabel>Dataset Key</attributeLabel>
          <attributeDefinition>Provenance stamp: provider_dataset.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Provenance stamp: provider_dataset.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>sample_key</attributeName>
          <attributeLabel>Sample Key</attributeLabel>
          <attributeDefinition>The sampling event this observation came from; joins sample.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>The sampling event this observation came from; joins sample.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>grid_key</attributeName>
          <attributeLabel>Grid Key</attributeLabel>
          <attributeDefinition>CalCOFI station grid cell, denormalized from sample so rollups need no join. NULL for region-pooled data.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>CalCOFI station grid cell, denormalized from sample so rollups need no join. NULL for region-pooled data.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>cruise_key</attributeName>
          <attributeLabel>Cruise Key</attributeLabel>
          <attributeDefinition>Cruise, denormalized from sample so rollups need no join.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Cruise, denormalized from sample so rollups need no join.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>latitude</attributeName>
          <attributeLabel>Latitude</attributeLabel>
          <attributeDefinition>Observation latitude (WGS84).</attributeDefinition>
          <storageType>DOUBLE</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>degree</standardUnit>
              </unit>
              <numericDomain>
                <numberType>real</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>longitude</attributeName>
          <attributeLabel>Longitude</attributeLabel>
          <attributeDefinition>Observation longitude (WGS84).</attributeDefinition>
          <storageType>DOUBLE</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>degree</standardUnit>
              </unit>
              <numericDomain>
                <numberType>real</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>datetime</attributeName>
          <attributeLabel>Datetime</attributeLabel>
          <attributeDefinition>Observation time (UTC). NULL for region-pooled data with no event time.</attributeDefinition>
          <storageType>TIMESTAMP</storageType>
          <measurementScale>
            <dateTime>
              <formatString>YYYY-MM-DDThh:mm:ss</formatString>
            </dateTime>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>depth_min_m</attributeName>
          <attributeLabel>Depth Min</attributeLabel>
          <attributeDefinition>Shallowest depth this observation represents.</attributeDefinition>
          <storageType>DOUBLE</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>meter</standardUnit>
              </unit>
              <numericDomain>
                <numberType>real</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>depth_max_m</attributeName>
          <attributeLabel>Depth Max</attributeLabel>
          <attributeDefinition>Deepest depth this observation represents; equal to depth_min_m for point measurements (bottle, CTD scan).</attributeDefinition>
          <storageType>DOUBLE</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>meter</standardUnit>
              </unit>
              <numericDomain>
                <numberType>real</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>taxon_key</attributeName>
          <attributeLabel>Taxon Key</attributeLabel>
          <attributeDefinition>Global taxon key, worms:&lt;AphiaID&gt; or itis:&lt;TSN&gt; for birds. NULL for env rows. Joins taxon.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Global taxon key, worms:&lt;AphiaID&gt; or itis:&lt;TSN&gt; for birds. NULL for env rows. Joins taxon.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>life_stage</attributeName>
          <attributeLabel>Life Stage</attributeLabel>
          <attributeDefinition>Life stage where the source resolves one (larva, adult, juvenile, egg, phyllosoma).</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Life stage where the source resolves one (larva, adult, juvenile, egg, phyllosoma).</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>measurement_type</attributeName>
          <attributeLabel>Measurement Type</attributeLabel>
          <attributeDefinition>Measured quantity; joins the measurement_type vocabulary.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Measured quantity; joins the measurement_type vocabulary.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>measurement_value</attributeName>
          <attributeLabel>Measurement Value</attributeLabel>
          <attributeDefinition>The measured value, in the units measurement_type declares.</attributeDefinition>
          <storageType>DOUBLE</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>real</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>measurement_qual</attributeName>
          <attributeLabel>Measurement Qualifier</attributeLabel>
          <attributeDefinition>Source quality flag, verbatim.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Source quality flag, verbatim.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>measurement_prec</attributeName>
          <attributeLabel>Measurement Precision</attributeLabel>
          <attributeDefinition>Source-reported precision where available.</attributeDefinition>
          <storageType>DOUBLE</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>real</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>hex_id</attributeName>
          <attributeLabel>Hex ID</attributeLabel>
          <attributeDefinition>H3 cell at resolution 10, stored as UBIGINT. Aggregate coarser at query time with h3_cell_to_parent(hex_id, res) — there is no per-resolution column ladder.</attributeDefinition>
          <storageType>UBIGINT</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>whole</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
      </attributeList>
    </dataTable>
    <dataTable>
      <entityName>obs_attribute</entityName>
      <entityDescription>Sub-occurrence attribution: the breakdown within an obs headline row. Covers numeric frequency distributions (length bins, stage numbers) and categorical breakdowns (seabird behavior). Counts here sum to the headline where the source is internally consistent.</entityDescription>
      <attributeList>
        <attribute>
          <attributeName>obs_attribute_id</attributeName>
          <attributeLabel>Observation Attribute ID</attributeLabel>
          <attributeDefinition>Surrogate key.</attributeDefinition>
          <storageType>BIGINT</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>integer</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>dataset_key</attributeName>
          <attributeLabel>Dataset Key</attributeLabel>
          <attributeDefinition>Provenance stamp: provider_dataset.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Provenance stamp: provider_dataset.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>sample_key</attributeName>
          <attributeLabel>Sample Key</attributeLabel>
          <attributeDefinition>The sampling event; joins sample.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>The sampling event; joins sample.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>taxon_key</attributeName>
          <attributeLabel>Taxon Key</attributeLabel>
          <attributeDefinition>Global taxon key; joins taxon.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Global taxon key; joins taxon.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>life_stage</attributeName>
          <attributeLabel>Life Stage</attributeLabel>
          <attributeDefinition>Life stage the attribution applies to.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Life stage the attribution applies to.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>measurement_type</attributeName>
          <attributeLabel>Measurement Type</attributeLabel>
          <attributeDefinition>The attribute being broken down: body_length, stage or behavior.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>The attribute being broken down: body_length, stage or behavior.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>bin_value</attributeName>
          <attributeLabel>Bin Value</attributeLabel>
          <attributeDefinition>Numeric bin — length in mm, stage number. NULL for categorical attributes.</attributeDefinition>
          <storageType>DOUBLE</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>real</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>bin_label</attributeName>
          <attributeLabel>Bin Label</attributeLabel>
          <attributeDefinition>Category label — stage description, behavior name. NULL for purely numeric bins.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Category label — stage description, behavior name. NULL for purely numeric bins.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>count</attributeName>
          <attributeLabel>Count</attributeLabel>
          <attributeDefinition>Number of individuals in this bin.</attributeDefinition>
          <storageType>INTEGER</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>number</standardUnit>
              </unit>
              <numericDomain>
                <numberType>integer</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>measurement_qual</attributeName>
          <attributeLabel>Measurement Qualifier</attributeLabel>
          <attributeDefinition>Source quality flag, verbatim.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Source quality flag, verbatim.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
      </attributeList>
    </dataTable>
    <dataTable>
      <entityName>sample_measurement</entityName>
      <entityDescription>Event-level (effort) measurements: quantities that describe the sampling event itself rather than anything observed in it — net volume filtered, standard haul factor, proportion sorted, bottle cast conditions. Kept apart from obs so effort is never mistaken for an observation.</entityDescription>
      <attributeList>
        <attribute>
          <attributeName>sample_measurement_id</attributeName>
          <attributeLabel>Sample Measurement ID</attributeLabel>
          <attributeDefinition>Surrogate key.</attributeDefinition>
          <storageType>BIGINT</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>integer</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>sample_key</attributeName>
          <attributeLabel>Sample Key</attributeLabel>
          <attributeDefinition>The sampling event this effort measurement describes; joins sample.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>The sampling event this effort measurement describes; joins sample.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>dataset_key</attributeName>
          <attributeLabel>Dataset Key</attributeLabel>
          <attributeDefinition>Provenance stamp: provider_dataset.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Provenance stamp: provider_dataset.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>measurement_type</attributeName>
          <attributeLabel>Measurement Type</attributeLabel>
          <attributeDefinition>Measured quantity; joins the measurement_type vocabulary.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Measured quantity; joins the measurement_type vocabulary.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>measurement_value</attributeName>
          <attributeLabel>Measurement Value</attributeLabel>
          <attributeDefinition>The measured value, in the units measurement_type declares.</attributeDefinition>
          <storageType>DOUBLE</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>real</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>measurement_qual</attributeName>
          <attributeLabel>Measurement Qualifier</attributeLabel>
          <attributeDefinition>Source quality flag, verbatim.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Source quality flag, verbatim.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
      </attributeList>
    </dataTable>
    <dataTable>
      <entityName>taxon</entityName>
      <entityDescription>Taxonomic hierarchy for species via WoRMS and ITIS authorities (built from spp.duckdb via recursive CTEs)</entityDescription>
      <attributeList>
        <attribute>
          <attributeName>taxon_key</attributeName>
          <attributeLabel>Taxon Key</attributeLabel>
          <attributeDefinition>Global taxon key: lowercase authority prefix plus id, worms:127023 or itis:176754.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Global taxon key: lowercase authority prefix plus id, worms:127023 or itis:176754.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>worms_id</attributeName>
          <attributeLabel>WoRMS ID</attributeLabel>
          <attributeDefinition>WoRMS AphiaID.</attributeDefinition>
          <storageType>INTEGER</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>integer</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>itis_id</attributeName>
          <attributeLabel>ITIS ID</attributeLabel>
          <attributeDefinition>ITIS Taxonomic Serial Number.</attributeDefinition>
          <storageType>INTEGER</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>integer</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>gbif_id</attributeName>
          <attributeLabel>GBIF ID</attributeLabel>
          <attributeDefinition>GBIF backbone taxon key.</attributeDefinition>
          <storageType>INTEGER</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>integer</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>ncbi_id</attributeName>
          <attributeLabel>NCBI ID</attributeLabel>
          <attributeDefinition>NCBI Taxonomy id.</attributeDefinition>
          <storageType>INTEGER</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>integer</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>inat_id</attributeName>
          <attributeLabel>iNaturalist ID</attributeLabel>
          <attributeDefinition>iNaturalist taxon id.</attributeDefinition>
          <storageType>INTEGER</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>integer</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>scientific_name</attributeName>
          <attributeLabel>Scientific Name</attributeLabel>
          <attributeDefinition>Accepted scientific name.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Accepted scientific name.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>common_name</attributeName>
          <attributeLabel>Common Name</attributeLabel>
          <attributeDefinition>Common name where one is recorded.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Common name where one is recorded.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>rank</attributeName>
          <attributeLabel>Rank</attributeLabel>
          <attributeDefinition>Taxonomic rank.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Taxonomic rank.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>rank_order</attributeName>
          <attributeLabel>Rank Order</attributeLabel>
          <attributeDefinition>Ordinal for sorting ranks from kingdom down.</attributeDefinition>
          <storageType>INTEGER</storageType>
          <measurementScale>
            <ratio>
              <unit>
                <standardUnit>dimensionless</standardUnit>
              </unit>
              <numericDomain>
                <numberType>integer</numberType>
              </numericDomain>
            </ratio>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>taxonomic_status</attributeName>
          <attributeLabel>Taxonomic Status</attributeLabel>
          <attributeDefinition>Status as fetched from the keying authority (accepted, unaccepted, superseded combination, ...). Read it with status_checked — before v2026.08.05 this column was the literal string "accepted" on every row, stamped rather than fetched.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Status as fetched from the keying authority (accepted, unaccepted, superseded combination, ...). Read it with status_checked — before v2026.08.05 this column was the literal string "accepted" on every row, stamped rather than fetched.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>status_checked</attributeName>
          <attributeLabel>Status Checked</attributeLabel>
          <attributeDefinition>Date taxonomic_status was last confirmed against the authority. A status with no check date is not a fact.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Date taxonomic_status was last confirmed against the authority. A status with no check date is not a fact.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>parent_taxon_key</attributeName>
          <attributeLabel>Parent Taxon Key</attributeLabel>
          <attributeDefinition>Lineage parent; walk this to expand a taxon to its descendants.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Lineage parent; walk this to expand a taxon to its descendants.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>kingdom</attributeName>
          <attributeLabel>Kingdom</attributeLabel>
          <attributeDefinition>Kingdom.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Kingdom.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>phylum</attributeName>
          <attributeLabel>Phylum</attributeLabel>
          <attributeDefinition>Phylum.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Phylum.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>class</attributeName>
          <attributeLabel>Class</attributeLabel>
          <attributeDefinition>Class.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Class.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>order_taxon</attributeName>
          <attributeLabel>Order</attributeLabel>
          <attributeDefinition>Order (named order_taxon because order is a SQL keyword).</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Order (named order_taxon because order is a SQL keyword).</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>family</attributeName>
          <attributeLabel>Family</attributeLabel>
          <attributeDefinition>Family.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Family.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>notes</attributeName>
          <attributeLabel>Notes</attributeLabel>
          <attributeDefinition>Append-only provenance log, one datestamped line per entry: how each id was resolved and any re-key onto an authority-accepted id (e.g. itis:174553 Puffinus griseus -&gt; itis:1255050 Ardenna grisea). The dataset's own original code and name stay in dataset_taxon.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Append-only provenance log, one datestamped line per entry: how each id was resolved and any re-key onto an authority-accepted id (e.g. itis:174553 Puffinus griseus -&gt; itis:1255050 Ardenna grisea). The dataset's own original code and name stay in dataset_taxon.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
      </attributeList>
    </dataTable>
    <dataTable>
      <entityName>dataset_taxon</entityName>
      <entityDescription>Crosswalk from each dataset's own taxon vocabulary to the global taxon_key. obs resolves its taxon by joining this on (dataset_key, ds_taxa_code), so a dataset can keep its local codes without leaking them into the shared model.</entityDescription>
      <attributeList>
        <attribute>
          <attributeName>ds_taxon_key</attributeName>
          <attributeLabel>Dataset Taxon Key</attributeLabel>
          <attributeDefinition>Key of this crosswalk row, &lt;dataset-or-known-list&gt;:&lt;local code&gt;.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Key of this crosswalk row, &lt;dataset-or-known-list&gt;:&lt;local code&gt;.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>dataset_key</attributeName>
          <attributeLabel>Dataset Key</attributeLabel>
          <attributeDefinition>The dataset whose vocabulary this row belongs to.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>The dataset whose vocabulary this row belongs to.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>taxon_key</attributeName>
          <attributeLabel>Taxon Key</attributeLabel>
          <attributeDefinition>The global taxon it resolves to; joins taxon.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>The global taxon it resolves to; joins taxon.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>ds_scientific_name</attributeName>
          <attributeLabel>Dataset Scientific Name</attributeLabel>
          <attributeDefinition>Scientific name as the source dataset spells it.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Scientific name as the source dataset spells it.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>ds_common_name</attributeName>
          <attributeLabel>Dataset Common Name</attributeLabel>
          <attributeDefinition>Common name as the source dataset spells it.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Common name as the source dataset spells it.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>ds_taxa_code</attributeName>
          <attributeLabel>Dataset Taxa Code</attributeLabel>
          <attributeDefinition>The dataset's own code, as stored on its measurement rows.</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>The dataset's own code, as stored on its measurement rows.</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
        <attribute>
          <attributeName>ds_source_json</attributeName>
          <attributeLabel>Ds Source Json</attributeLabel>
          <attributeDefinition>Ds Source Json</attributeDefinition>
          <storageType>VARCHAR</storageType>
          <measurementScale>
            <nominal>
              <nonNumericDomain>
                <textDomain>
                  <definition>Ds Source Json</definition>
                </textDomain>
              </nonNumericDomain>
            </nominal>
          </measurementScale>
        </attribute>
      </attributeList>
    </dataTable>
  </dataset>
  <additionalMetadata>
    <metadata>
      <calcofi>
        <datasetCitation>Rogers-Bennett, L.; Jones, E.; Klemmedson, A. (2026). CDFW Dungeness Crab Megalopae from archived CalCOFI plankton samples (1949-2014). California Department of Fish and Wildlife, published through CalCOFI / Scripps Institution of Oceanography.</datasetCitation>
        <datasetKey>cdfw_dungeness-crab</datasetKey>
        <datasetPage>https://calcofi.io/datasets/cdfw_dungeness-crab/</datasetPage>
        <release>v2026.10.21</release>
        <releaseCitation>CalCOFI (2026). CalCOFI Integrated Database, release v2026.10.21 [Data set]. Scripps Institution of Oceanography, NOAA Fisheries, and California Department of Fish and Wildlife. https://calcofi.io/db-schema/?v=v2026.10.21</releaseCitation>
        <sourceAccessed>2026-10-21</sourceAccessed>
      </calcofi>
    </metadata>
  </additionalMetadata>
</eml:eml>
