·
4 commits
to master
since this release
First release of the 5.x line. This is now an API-only, single-module project (name-parser-api): the data model, the NameParser contract, and name/rank/unicode utilities. The parsing engine has been reimplemented in Rust and is
consumed through this interface via a native binding — see gbif/name-parser-rust (https://github.com/gbif/name-parser-rust).
Highlights
- Three-way ParseResult (Parsed | Informal | Unparsable), sealed. parse(...) never throws; type() and code() are available on all three variants. Informal is a new dedicated result for a supraspecific taxon carrying a provisional,
non-code designation (Rhizobium sp. RMCC TR1811, Bartonella group). - parseAuthorship(...) returns Optional instead of throwing.
- UnparsableNameException is now unchecked, raised only by the opt-in ParseResult.orElseThrow().
- NameType.IDENTIFIER — a new classification for anchorless machine identifiers (BOLD BIN, UNITE SH, OTU/ASV, culture-collection accessions) that previously fell into OTHER.
- The bundled Java parser is gone. For a working NameParser, use the native Rust binding; to stay on the pure-Java engine, remain on the 4.x branch.
Fixes in this release
- Authorship.addAuthor/addExAuthor no longer drop real authors (inverted blank-check corrected).
- equals/hashCode now include authorship — previously two names differing only in authorship compared equal. Behavioral change: any code relying on the old authorship-blind equality (e.g. dedup) should re-check.
- copy() deep-copies its mutable collections instead of aliasing them.
Migration
See Migrating from 4.x to 5.0 (https://github.com/gbif/name-parser#migrating-from-4x-to-50) in the README.