Skip to content

HabitatMech

A knowledge base of microbial habitats that merges four source vocabularies into one record per habitat. It is the best worked example of using agents to harmonize sources that disagree.

Repository: CultureBotAI/HabitatMech Site: Browse the corpus Product: data/habitats/<category>/<slug>.yaml

HabitatMech follows the DisMech pattern and is part of the CultureBot family.

The problem it solves

The same habitat has a different name in every source:

Source How it names marine sediment
JGI GOLD Environmental > Aquatic > Marine > Sediment
BacDive Marine-sediment
PREGO ENVO:00002113
Madin et al. ENVO:00002113

What to look at

Path What it is
data/habitats/ One YAML file per habitat, about 3,200 records
Term requests page Gaps this project is asking ENVO to fill
src/habitatmech/schema/ The LinkML schema

What works

The merge is the product

Each source name becomes a source concept. Every source concept resolves to an identifier. Source concepts that resolve to the same identifier merge into one record that keeps all of their attestations.

So data/habitats/terrestrial/soil.yaml is one record, grounded in ENVO:00001998, that knows GOLD saw 26,399 organisms there and that PREGO and Madin's literature curation associate 8,715 and 2,934 taxa with it independently. The disagreement between sources is kept, not flattened.

Minted identifiers are honest about being minted

Where an ontology term is defensible, the record uses the ontology CURIE. Where none is, the project mints a content-hashed habitatmech: CURIE instead of forcing a bad ontology match. You can tell the two apart by looking.

This matters for agents. Forcing a term match is exactly the kind of plausible error an agent makes, and a project that permits a local identifier removes the pressure to guess.

Gaps are published as term requests

The project renders the terms it needs and cannot find as a public term requests page for the ontology community. Curation that finds a gap produces a request rather than a workaround.

What to copy first

Copy the term request page. If your curation depends on an ontology you do not control, publish what you needed and could not find. It turns a private annoyance into a contribution the ontology maintainers can act on.

Gaps

The corpus was seeded in a batch from kg-microbe. As with any seeded knowledge base, coverage reflects what the sources contained, not what the domain contains. Check the README for the seed date before treating counts as current.