Skip to content

Name matching fails for Macromitrium st-johnii E.B. Bartram — epithet "st-johnii" dropped from canonicalName #920

Description

@nigelcharman

Summary

The accepted species Macromitrium st-johnii E.B. Bartram (usageKey 9W722) cannot be found by name matching. A scientificName match for it falls back to the genus (matchType=HIGHERRANK) instead of resolving to the species.

The underlying cause is that the name is indexed with a degenerate canonical name: the specific epithet st-johnii is correctly extracted into specificEpithet, but it is omitted from canonicalName (which is just "Macromitrium"), and the name is rendered as Macromitrium sp.. This makes the species unreachable via name-based matching, even though it is retrievable by key.

The trigger appears to be the hyphenated epithet beginning with st- (likely mis-parsed as an abbreviation/placeholder rather than a valid specific epithet).

Environment

  • Service: GBIF species matching (/v2/species/match)
  • Dataset: Catalogue of Life eXtended Release (COL-XR); usageKey 9W722
  • Reproduced on a local matching-ws Docker container, but the defect is in the indexed name interpretation, so it should reproduce wherever this name is served.

Steps to reproduce

1. Retrieve the taxon by key (works, but note the broken canonical name):

GET /v2/species/match?usageKey=9W722
"usage": {
    "key": "9W722",
    "name": "Macromitrium st-johnii E.B. Bartram",
    "canonicalName": "Macromitrium",
    "specificEpithet": "st-johnii",
    "rank": "SPECIES",
    "status": "ACCEPTED",
    "formattedName": "<i>Macromitrium</i> sp. E.B. Bartram"
}

2. Match the same taxon by name (fails — resolves only to the genus):

GET /v2/species/match?scientificName=Macromitrium%20st-johnii%20E.B.%20Bartram&kingdom=Plantae
"usage": { "key": "9JL6J", "name": "Macromitrium Brid.", "rank": "GENUS" },
"diagnostics": { "matchType": "HIGHERRANK", "confidence": 95 }

Every spelling variant tried (Macromitrium stjohnii, Macromitrium st johnii, Macromitrium st.johnii, Macromitrium saintjohnii) also returns HIGHERRANK → genus 9JL6J.

Expected vs actual

Expected Actual
canonicalName Macromitrium st-johnii Macromitrium
formattedName <i>Macromitrium st-johnii</i> E.B. Bartram <i>Macromitrium</i> sp. E.B. Bartram
Name match result usageKey=9W722 (SPECIES) usageKey=9JL6J (GENUS), HIGHERRANK

Control (a normal congeneric species parses correctly)

GET /v2/species/match?usageKey=6QSFR
"usage": {
    "key": "6QSFR",
    "name": "Macromitrium gracile (Hook.) Schwägr.",
    "canonicalName": "Macromitrium gracile",
    "specificEpithet": "gracile",
    "rank": "SPECIES",
    "formattedName": "<i>Macromitrium</i> <i>gracile</i> (Hook.) Schwägr."
}

M. gracile and other congeners (e.g. 72SFV, 3X6BN) match EXACT by name. Only the st-johnii epithet is affected, which points to a name-parsing edge case for the st-/hyphen prefix.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions