|
| 1 | +# METPO Synonym Conventions |
| 2 | + |
| 3 | +**Purpose:** How METPO records synonyms, which annotation property each Google-Sheet |
| 4 | +column maps to, and the rules a curator (or an automated check) must follow. The |
| 5 | +classes tab has two *kinds* of synonym column with different rules. |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +## The Short Version |
| 10 | + |
| 11 | +- **Ontology-native** synonyms are clean, curated US English that METPO asserts in its |
| 12 | + own voice. They use `oboInOwl:hasExactSynonym` / `hasRelatedSynonym` with no source. |
| 13 | +- **Source-bound** synonyms are **verbatim** strings from an external database, paired |
| 14 | + with a source column that **reifies** the synonym assertion with its provenance. |
| 15 | +- **Never normalize a source-bound value**, and **never de-duplicate source-bound |
| 16 | + synonyms across classes** — both are intentional (see below). |
| 17 | +- An **exact** synonym should (almost) uniquely identify one class. The same exact |
| 18 | + synonym on many classes is an *overload* and is discouraged. |
| 19 | + |
| 20 | +--- |
| 21 | + |
| 22 | +## The columns and their ROBOT directives |
| 23 | + |
| 24 | +| Column | Directive | Property | Kind | |
| 25 | +|---|---|---|---| |
| 26 | +| `confirmed exact synonym` | `A oboInOwl:hasExactSynonym SPLIT=\|` | exact synonym | ontology-native | |
| 27 | +| `literature mining related synonyms` | `A oboInOwl:hasRelatedSynonym SPLIT=\|` | related synonym | ontology-native | |
| 28 | +| `madin synonym or field` | `A oboInOwl:hasRelatedSynonym SPLIT=\|` | related synonym | source-bound | |
| 29 | +| `Madin synonym source` | `>AI IAO:0000119 SPLIT=\|` | (axiom annotation) | source provenance | |
| 30 | +| `bacdive keyword synonym` | `A oboInOwl:hasRelatedSynonym SPLIT=\|` | related synonym | source-bound | |
| 31 | +| `Bacdive synonym source` | `>AI IAO:0000119` | (axiom annotation) | source provenance | |
| 32 | +| `bactotraits related synonym` | `A oboInOwl:hasRelatedSynonym SPLIT=\|` | related synonym | source-bound | |
| 33 | +| `Bactotraits synonym source` | `>AI IAO:0000119` | (axiom annotation) | source provenance | |
| 34 | +| `metatraits synonym` | `A oboInOwl:hasRelatedSynonym SPLIT=\|` | related synonym | source-bound | |
| 35 | +| `MetaTraits synonym source` | `>AI IAO:0000119` | (axiom annotation) | source provenance | |
| 36 | + |
| 37 | +The leading `>` on each `*source*` column is a ROBOT template directive that **annotates |
| 38 | +the preceding synonym assertion** rather than the term. The result is a reified |
| 39 | +synonym, e.g. in the OWL: |
| 40 | + |
| 41 | +```xml |
| 42 | +<owl:Axiom> |
| 43 | + <owl:annotatedSource rdf:resource="https://w3id.org/metpo/2000002"/> |
| 44 | + <owl:annotatedProperty rdf:resource="…oboInOwl#hasRelatedSynonym"/> |
| 45 | + <owl:annotatedTarget>assimilation</owl:annotatedTarget> |
| 46 | + <obo:IAO_0000119 rdf:resource="https://bacdive.dsmz.de/"/> |
| 47 | +</owl:Axiom> |
| 48 | +``` |
| 49 | + |
| 50 | +This is how METPO records **which external-system value maps to which METPO entity**: |
| 51 | +the synonym is the verbatim external value and the `IAO:0000119` (definition source) |
| 52 | +annotation records the database it came from. |
| 53 | + |
| 54 | +--- |
| 55 | + |
| 56 | +## Rules |
| 57 | + |
| 58 | +1. **Source-bound columns hold verbatim source strings.** Do not "correct" them, even |
| 59 | + when the source has typos, odd casing, inconsistent prefixes, or non-English forms. |
| 60 | + Downstream consumers (e.g. the kg-microbe transformers) match on the exact source |
| 61 | + string; normalizing breaks the match. |
| 62 | +2. **Duplicate source-bound related synonyms across classes are intentional.** One |
| 63 | + external value (e.g. a BactoTraits temperature bin code) legitimately maps to several |
| 64 | + METPO classes; keeping it on each — each reified with its source — is the point. Do |
| 65 | + **not** treat these as duplicates to remove. (A `duplicate_*_synonym` QC finding on a |
| 66 | + `hasRelatedSynonym` is expected for source-bound values.) |
| 67 | +3. **Ontology-native columns use clean, consistent US English.** Foreign-language forms, |
| 68 | + source typos, and one-off transcriptions belong in source-bound columns, not here. |
| 69 | +4. **Exact synonyms should be near-unique.** `oboInOwl:hasExactSynonym` asserts the value |
| 70 | + *is* a name for the class, so the same exact synonym on many sibling classes is an |
| 71 | + *overload* (a qualitative term like `mesophilic` stamped onto every numeric bin). Pick |
| 72 | + one canonical owner; downgrade the others to `hasRelatedSynonym` or drop them. Tracked |
| 73 | + in issue #444. |
| 74 | +5. **If a source value also happens to be the desired ontology-native synonym, put it in |
| 75 | + both columns** — do not rely on a source-bound column to carry English semantics. |
| 76 | + |
| 77 | +--- |
| 78 | + |
| 79 | +## Why reification (not bare synonyms) |
| 80 | + |
| 81 | +A bare synonym says "this string names this class." METPO additionally needs to say |
| 82 | +"this string is *the value used by database X*," so that the same human-facing concept |
| 83 | +can be mapped to multiple external vocabularies and back. The reified `IAO:0000119` |
| 84 | +provenance is what makes the synonym a *mapping record*, not just a label. (This is |
| 85 | +distinct from the observation-reification layer that was removed in #371; synonym-source |
| 86 | +reification is a deliberate, retained feature.) |
| 87 | + |
| 88 | +See also: `docs/deprecation-workflow.md`, `docs/identifier-scheme.md`, and the |
| 89 | +"Synonym Column Conventions" section of the repository `CLAUDE.md`. |
0 commit comments