ITADN
CultureBotAI/proteintraitsmech
CultureBotAI/proteintraitsmech · 文件
文件最后提交记录最后更新时间
README.md

ProteinTraitsMech

Knowledge base of protein sequence and structure traits, curated one YAML per trait with evidence-backed causal graphs.

Sibling to dismech (disease mechanisms), TraitMech (microbial ecophysiological traits), CultureMech (growth media), and MediaIngredientMech (chemical ingredients). Same curation model: one YAML per record, LinkML-validated, provenance + audit trail, optional evidence-bearing causal mechanism graphs.

Scope

ProteinTraitsMech covers traits along five axes:

  • SEQUENCE — motifs, signal peptides, propeptides, cleavage sites, low-complexity / disordered regions, tandem repeats, compositional biases, conserved regions, epitopes, PTM sites.
  • STRUCTURE — folds, structural domains, secondary-structure arrangements, topology classes, quaternary state, subunit interfaces, active / binding / allosteric / metal sites, disulfide bonds, cavities, symmetry, dynamics, structural stability, surface properties.
  • SEQUENCE_STRUCTURE (mixed) — traits meaningful in both axes: transmembrane spans, coiled coils, structural tandem repeats.
  • FUNCTION — entry-level (non-localised) traits: enzymatic activity, binding capacity, cofactor requirement, subcellular localisation, environmental response, interaction partner. Grounded by EC / Rhea / ChEBI / GO / UniProt SubCell. Complements the localised sequence/structure records rather than replacing them.
  • EVOLUTION — comparative-genomics traits: conservation and distribution across taxa (conserved / clade-specific / variable) and pangenome partition (core / soft-core / shell / cloud / persistent / singleton).

Records anchor to authoritative resources: Pfam, InterPro, PROSITE, SMART, MEROPS, CATH, SCOP, PDB, GO, PR, UniProtKB.

Quick start

just install                  # uv sync --extra dev
just gen-schema               # generate dataclasses from LinkML
just validate-all             # validate every ProteinTraitRecord YAML

Schema

src/proteintraitsmech/schema/proteintraitsmech.yaml defines:

  • ProteinTraitRecord — root class, one per YAML file. Carries identifier (preferably an existing InterPro / Pfam / PROSITE / CATH / SCOP / MEROPS / PR CURIE), label, definition, parent_traits, xrefs, synonyms, trait_axis (SEQUENCE / STRUCTURE / SEQUENCE_STRUCTURE / FUNCTION / EVOLUTION), trait_category, term_kind, optional canonical_examples, optional evidence, optional curation_history, and optional inline causal_graphs.
  • CausalGraph / CausalNode / CausalEdge — evidence-backed causal mechanism graphs. Nodes represent proteins, domains, motifs, residues, PTMs, ligands, pathways, molecular functions, biological processes, phenotypes, or diseases. Every CausalEdge must carry at least one EvidenceItem.
  • CanonicalExample — reference exemplar proteins (UniProtKB accession + taxon) that archetypally exhibit the trait.
  • TraitSynonym / EvidenceItem / CurationEvent — ancillary classes.
  • TraitAxisEnumSEQUENCE / STRUCTURE / SEQUENCE_STRUCTURE / FUNCTION / EVOLUTION.
  • ProteinTraitCategoryEnumSEQ_*, STRUCT_*, MIXED_* fine-grained buckets (see schema for the full list).
  • TermKindEnumCLASS / DATATYPE_PROPERTY / OBJECT_PROPERTY / ANNOTATION_PROPERTY.
  • MappingStatusEnumSEEDED / PROPOSED / REVIEWED / DEPRECATED.
  • PriorityEnum, SynonymTypeEnum, CausalNodeTypeEnum.

Layout

ProteinTraitsMech/
├── data/
│   ├── raw/                                     # vendored source releases (Pfam, InterPro, CATH, SCOP, MEROPS, …)
│   └── traits/
│       ├── sequence/<category>/<slug>.yaml
│       ├── structure/<category>/<slug>.yaml
│       ├── mixed/<category>/<slug>.yaml
│       └── function/<category>/<slug>.yaml
├── src/proteintraitsmech/
│   └── schema/proteintraitsmech.yaml            # LinkML schema
├── scripts/                                     # seed / validate / audit tooling
├── tests/
└── docs/

Axis / category pairing is enforced by LinkML rules on ProteinTraitRecord: any SEQ_* category requires trait_axis: SEQUENCE, STRUCT_* requires STRUCTURE, MIXED_* requires SEQUENCE_STRUCTURE, and FUNC_* requires FUNCTION. UPPER / OTHER are administrative and may appear on any axis. just validate-all will reject a mismatched pair.

The axis follows the representation, not the biology. Domain/family classifications defined by a sequence signature — profile HMMs / PSSMs / patterns (Pfam, InterPro, CDD, NCBIfam, MEROPS, PROSITE ProRule) — live on the SEQUENCE axis (SEQ_DOMAIN, SEQ_FAMILY, SEQ_HOMOLOGOUS_SUPERFAMILY), because a domain detected by a sequence model is a sequence trait even though a domain is a structural unit. Only structure-derived classifications (CATH, SCOPe, ECOD, TED — grouped from 3D coordinates) use STRUCT_DOMAIN / STRUCT_HOMOLOGOUS_SUPERFAMILY. Whole-protein families whose defining property is a conserved function (NCBIfam/TIGRFAM equivalog, subfamily) are FUNC_PROTEIN_FAMILY on the FUNCTION axis.

FUNCTION vs localised STRUCTURE. These axes are complementary, not exclusive. A UniProt entry with an ATP-binding site emits both a STRUCT_BINDING_SITE record (localised — where ATP binds, residues 45–52) and a FUNC_BINDING_CAPACITY record (entry-level — that the protein binds ATP). Likewise a catalytic residue emits both STRUCT_ACTIVE_SITE and FUNC_ENZYMATIC_ACTIVITY. Curators should not merge these; they answer different questions.

Workflow

  1. Seed — import candidate traits from an authoritative resource (Pfam / InterPro / PROSITE / CATH / SCOP / MEROPS). Seeded records land with mapping_status: SEEDED and axis + category inferred from the source.
  2. Curate — edit data/traits/<axis>/<category>/<slug>.yaml directly; set mapping_status: REVIEWED, append a CurationEvent, attach EvidenceItem blocks with PMID / DOI + verbatim snippet.
  3. Add causal graphs — attach causal_graphs when the trait has source-backed mechanism structure (e.g. "this active-site residue coordinates the substrate carbonyl"). Every CausalEdge must carry edge-level evidence; prefer grounded CURIEs for nodes and predicates (RO for predicates; PR / GO / CHEBI / MOD / HP / MONDO for nodes).
  4. Validatejust validate-all invokes linkml-validate in batches over every record, reporting per-file failures with the reference-CLI diagnostics. Scope to a subset with a path or glob (just validate-all data/traits/sequence/motif).

Enrichment fields

Two slots are populated automatically by the seeders when the source supports them, and can also be added by curators:

  • residue_sequence — the concrete amino-acid substring covered by a localised trait (SEQUENCE / STRUCTURE / SEQUENCE_STRUCTURE axes). Emitted by seed_uniprot.py for every FT record with a parsable coordinate range, sliced from the entry's SQ block (DISULFID is skipped — its coordinates encode a bond, not a substring). Complements sequence_pattern, which stays reserved for symbolic motif/regex syntax.

  • parent_traits — links to broader/parent traits. Populated automatically:

    • Not from seed_uniprot.py: a UniProt entry's DR family/domain signatures (PROSITE/Pfam/InterPro/SMART/CATH/HAMAP) are the protein's memberships, so they are emitted as xrefs, not parent_traits — a family signature is not a broader class of a specific feature-trait (caught by the review-source-categories skill's FAMILY_AS_PARENT).
    • seed_prosite.py promotes each signature's PDOC documentation entry (from the DO line) to parent_traits: [PROSITE:PDOCxxxxx] — multiple ACs can share a PDOC (e.g. PS00796 and PS01180PDOC00633 "14-3-3 proteins"), giving family-level grouping in the docs browser.
  • Ontology xrefs — every record's trait_category is grounded to an authoritative ontology term (SO for sequence / structure features, MOD for specific PTMs, GO for functional classes) as an xref entry by scripts/ground_categories.py (just ground-categories). Mappings are curated in the script and verified against both the OAK local sqlite:obo:<onto> adapter (default, one download per ontology) and the EBI OLS4 REST API — pass --source ols to switch backends. --audit prints the resolved table without touching files.

    just ground-categories --audit                   # audit only
    just ground-categories --apply                   # write xrefs
    just ground-categories --source ols --audit      # cross-check via OLS

    Current mapping table covers 33 of ~40 categories (STRUCT_CAVITY / STRUCT_SYMMETRY / STRUCT_DYNAMICS / STRUCT_STABILITY / STRUCT_SURFACE / STRUCT_ALLOSTERIC_SITE / SEQ_DISORDER / SEQ_EPITOPE / SEQ_NONSTANDARD_RESIDUE / FUNC_COFACTOR_REQUIREMENT are intentionally unmapped — extend CATEGORY_MAPPINGS when a non-obsolete term is identified).

  • canonical_examples — reference proteins that exhibit the trait. Two sources coexist on a record:

    • source: CURATOR — hand-picked archetypes. Seeders emit one when the trait itself is anchored to a specific UniProt entry (TED folds, UniProt-seeded FT records).
    • source: UNIPROTKB_API — retrieved by scripts/fetch_uniprot_examples.py (just fetch-examples) by querying UniProtKB REST for entries cross-referenced to the trait's anchoring signature (xref:prosite-PS00796, xref:pfam-PF00244, etc.). Each hit carries sequence_length, reviewed, annotation_score, family_classifications (Pfam / InterPro / HAMAP / SMART / CATH xrefs on that specific entry) and a fetched_at date stamp so downstream consumers can rank / filter without re-querying UniProt.
    • source: SWISSPROT_PROFILE — selected by scripts/suggest_canonical_examples.py (just suggest-examples) from the Swiss-Prot protein × trait matrix (data/profiles/profiles.jsonl, issue #7 — 80,066 reviewed entries across ten proteomes spanning the tree: human, mouse, Drosophila, C. elegans, Arabidopsis, S. cerevisiae, P. falciparum, E. coli, B. subtilis and the archaeon M. jannaschii). Unlike UNIPROTKB_API this is a ranked selection over an existing local matrix rather than a fresh query: among the observed carriers of the trait, the pick maximises how many of the trait's empirically coupled cross-axis partners (the seq-encodes-fold / trait-implies-function rules) it also carries, then carrier focus and annotation depth weighted by the trait's axis — both as percentiles within the carrier's own proteome, since absolute GO counts differ enough between model organisms to otherwise hand every pick to whichever community annotates hardest. The note records the derivation and the carrier count. These are suggestions, not curator picks, and are swept or re-ranked wholesale by source (--rerank replaces them and never touches a CURATOR / UNIPROTKB_API example). See research/swissprot-trait-profiles-5.md and research/swissprot-trait-profiles-6.md.
    # populate 3 reviewed examples on one PROSITE PATTERN record
    just fetch-examples data/traits/sequence/pattern/1433-1.yaml --limit 3 --apply
    # or run over an entire subdirectory
    just fetch-examples data/traits/sequence/pattern --limit 5 --apply

    Idempotent: existing accessions are not re-added. --force drops prior UNIPROTKB_API picks and re-queries. Rate-limited (~4 req/s + exponential backoff on 429/503).

    Each example additionally carries its full amino-acid sequence and a features list (SequenceFeatureAnnotation records: start, end, feature_type, trait_axis, trait_category, note) — populated in a separate --refresh-sequences pass that batch- fetches flat files via /uniprotkb/accessions?format=txt and routes each FT line through seed_uniprot.py's FT_TYPE_MAP.

    # fill in sequence + features on already-fetched API examples
    just fetch-examples data/traits/sequence/pattern --refresh-sequences --apply

    The docs browser renders each example's sequence in a 60-aa-per-row monospace viewer with per-residue coloured strips beneath each letter — one strip per feature covering that position, split by equal fractions when multiple features overlap. Colour is by trait axis (SEQUENCE = blue, STRUCTURE = green, SEQUENCE_STRUCTURE = purple). Hover a strip for the raw UniProt FT type + range + note.

Seeds

SourceRecordsBucket
LinkML LocalStructuralFeature19data/traits/structure/{secondary,active_site,binding_site,cavity,disulfide,metal_site,dynamics,interface}/
PROSITE patterns (prosite.dat, PATTERN)1311data/traits/sequence/pattern/ (1279 generic) + data/traits/sequence/{modified_residue,glycosylation,crosslink}/ (32 PTM subtypes)
PROSITE profiles (prosite.dat, MATRIX)1434data/traits/sequence/profile/
PROSITE ProRules (prorule.dat)1449data/traits/sequence/domain/prosite/ (1445 DC=Domain → SEQ_DOMAIN) + data/traits/sequence/{modified_residue,glycosylation,prorule}/ (2 phospho + 1 N-glyco + 1 attachment motif)
PROSITE PDOC documentation groups (seed_prosite_pdoc.py)1980data/traits/sequence/family/prosite/ (family-level parent of the PROSITE signature records → SEQ_FAMILY)
TED novel folds (Zenodo v5, DOI:10.5281/zenodo.13908086, CC-BY 4.0)7427data/traits/structure/fold/novel/
TED highly-symmetric folds (same Zenodo record)6433data/traits/structure/fold/high_symmetry/
UniProtKB FT/CC/GO demultiplexer (seed_uniprot.py)0 (demo retired)per-protein records are instance-level, not trait classes — retired; real entries attach as canonical_examples on class traits via fetch_uniprot_examples.py
PSI-MOD (HUPO-PSI protein modification CV, CC-BY-4.0)1971data/traits/sequence/{modified_residue,glycosylation,lipidation,crosslink,ptm_ontology}/
ECOD (Evolutionary Classification Of protein Domains, v295)45113data/traits/structure/{architecture,homologous_superfamily,topology,fold/ecod}/ (21 + 6,178 + 3,955 + 34,959)
CATH-Gene3D hierarchy (seed_cath.py, CC-BY 4.0)8151data/traits/structure/{class,architecture,topology,homologous_superfamily}/cath/ (unnamed nodes kept, labelled by CATH id + rep-domain xref)
SCOPe 2.08 (seed_scope.py)22810data/traits/structure/{class,fold,homologous_superfamily,domain}/scope/ (px/sp instances excluded — occurrences, not trait classes)
Reactome pathways (seed_reactome.py, CC0)2883data/traits/function/pathway/reactome/ (Homo sapiens reference set → FUNC_PATHWAY)
CARD/ARO resistance ontology (seed_obo.py aro, CC-BY 4.0)7451data/traits/function/resistance/aro/ (determinants + mechanisms → FUNC_RESISTANCE)
InterPro entries (integrative; public domain; GO-grounded via interpro2go)26264data/traits/{sequence/domain,sequence/homologous_superfamily,sequence/repeat,sequence/conservation,structure/active_site,structure/binding_site,sequence/ptm_ontology}/interpro/ (Domain→SEQ_DOMAIN, superfamily→SEQ_HOMOLOGOUS_SUPERFAMILY, Repeat→SEQ_REPEAT, Conserved-site→SEQ_CONSERVATION, Active-/Binding-site stay STRUCT_*, PTM; Family excluded)
Pfam-A families (seed_pfam.py + clans seed_pfam_clans.py, public domain)30134data/traits/{sequence/domain,sequence/family,sequence/homologous_superfamily,sequence/repeat,mixed/coiled_coil,sequence/disorder,sequence/motif}/pfam/ (routed by family type: Domain→SEQ_DOMAIN, Family→SEQ_FAMILY, clans→SEQ_HOMOLOGOUS_SUPERFAMILY; GO- + InterPro-grounded; Pfam-B discontinued)
M-CSA (Mechanism & Catalytic Site Atlas, CC-BY-4.0)1003data/traits/structure/active_site/mcsa/
DisProt intrinsic disorder (seed_disprot.py, CC-BY 4.0) — pivoted35data/traits/sequence/disorder/ (32 IDPO disorder classes + 3 groups; 3,199 proteins as capped examples)
PSI-MI (HUPO-PSI molecular-interaction CV, CC-BY-4.0)146data/traits/function/interaction_partner/psi_mi/ (only the interaction type branch, MI:0190)
METPO (Microbial Ecophysiological Trait & Phenotype Ontology, CC-BY-4.0)118data/traits/function/{environmental_response,enzymatic_activity}/metpo/ (growth-preference / tolerance + metabolism / enzyme-test branches)
PATO (Phenotype And Trait Ontology, CC-BY-4.0)28data/traits/structure/{stability,dynamics,surface}/pato/ (curated physicochemical quality whitelist)
Curated stability taxonomy (seed_stability.py, CC0-1.0)33data/traits/structure/stability/conditions/ (11 stressors × {base, increased, decreased}, parented to PATO stability)
Curated evolutionary / pangenome taxonomy (seed_evolution.py, CC0-1.0)9data/traits/evolution/{conservation,pangenome}/ (EVOLUTION axis: conserved / clade-specific / variable + pangenome core/soft-core/shell/cloud/persistent/singleton)
TCDB transport classification (seed_tcdb.py, CC-BY-SA 3.0)2285data/traits/function/transport/tcdb/ (Class/Subclass/Family → FUNC_TRANSPORT; 946 families ChEBI-grounded)
COG 2020 orthologous groups (seed_cog.py, US Gov public domain)4903data/traits/function/ortholog_group/cog/ (4,877 COGs + 26 functional categories → FUNC_ORTHOLOG_GROUP)
Rhea reactions (seed_rhea.py, CC-BY 4.0)18558data/traits/function/enzymatic_activity/rhea/ (master reactions → FUNC_ENZYMATIC_ACTIVITY; ChEBI participants; EC via rhea2ec)
ExPASy ENZYME complete EC hierarchy (seed_ec.py, CC-BY 4.0)7375data/traits/function/enzymatic_activity/ec/ (6,965 leaves + 410 nodes; GO/RHEA mapped, KEGG direct, DR examples — supersedes trait-onto-map EC)
RepeatsDB structural tandem repeats (seed_repeatsdb.py, CC-BY 4.0)122data/traits/sequence_structure/structural_repeat/repeatsdb/ (Class/Topology/Fold/Clan → MIXED_STRUCTURAL_REPEAT)
NCBIfam ex-TIGRFAMs (seed_ncbifam.py, US-gov PD)38394data/traits/{sequence/domain,sequence/homologous_superfamily,sequence/repeat}/ncbifam/ + data/traits/function/protein_family/ncbifam/ (prokaryotic family HMMs routed by TIGRFAM isology: domain/*_domain/signature→SEQ_DOMAIN, superfamily→SEQ_HOMOLOGOUS_SUPERFAMILY, equivalog/subfamily/exception/paralog→FUNC_PROTEIN_FAMILY; EC/GO xrefs)
PANTHER protein families (seed_panther.py, CC-BY 4.0)15489data/traits/sequence/family/panther/ (full-length family HMMs → SEQ_FAMILY; families only — the release's 128,012 subfamilies are deliberately not seeded, see seed_panther.py; definitions from the integrating InterPro entry's curated abstract (7,691) else composed from name+GO+protein class (7,798); unreviewed LLM InterPro abstracts kept in definitions[] as GENERATED, never promoted; GO + panther.pathway xrefs)
CDD NCBI-curated (seed_cdd.py, US-gov PD)38218data/traits/{sequence/domain,sequence/homologous_superfamily,function/ortholog_group}/cdd/ (cd/PRK/… → SEQ_DOMAIN; cl superfamilies → SEQ_HOMOLOGOUS_SUPERFAMILY; KOG → FUNC_ORTHOLOG_GROUP; pfam/COG/TIGR skipped)
IDEAL protean segments (seed_ideal.py, CC-BY 4.0) — pivoted1data/traits/sequence/disorder/ (ProS trait; 1,448 IDPs as examples)
ELM linear-motif classes (seed_elm.py, ⚠ non-commercial)353data/traits/sequence/{targeting_signal,cleavage_site,ptm_site,motif}/elm/ (TRG→SEQ_TARGETING_SIGNAL, CLV→SEQ_CLEAVAGE_SITE, …; regex→sequence_pattern)
MEROPS peptidase families (seed_merops.py, academic)370data/traits/sequence/family/merops/ (S01→chymotrypsin, …; catalytic type → SEQ_FAMILY)
Curated RiPP leader classes (seed_ripp.py, CC0)20data/traits/sequence/leader_peptide/ (lanthipeptide/lasso/… → SEQ_LEADER_PEPTIDE)

The last three are ingested by the generic seed_obo.py importer, which reads any OBO ontology and imports only the branch-scoped subset declared in its SOURCES config (a term is kept iff it is an is_a descendant of a configured root, and it inherits that root's axis/category). This is deliberately narrower than a whole-ontology dump — PSI-MI is mostly experimental methods, PATO qualities are generic modifiers, and METPO is organismal, so only the terms with genuine protein-trait analogues are seeded.

Refetch and re-seed:

just fetch-prosite            # writes data/raw/prosite.dat + prorule.dat (gitignored)
just fetch-ted                # writes data/raw/ted_*.tsv.gz (gitignored)
just fetch-psimod             # PSI-MOD.obo from HUPO-PSI GitHub (CC-BY-4.0)
just fetch-obo                # PSI-MI / PATO / METPO .obo files (all CC-BY-4.0)
just fetch-ecod               # ECOD domain list (~689 MB, weekly PDB-synced)
just seed-lsf --apply         # 19 LinkML LocalStructuralFeature records
just seed-prosite --apply     # 4194 PROSITE records; idempotent, skips existing
just seed-ted --apply         # 13860 TED fold records; idempotent
just seed-psimod --apply      # 1971 PSI-MOD PTM records; tags each CC-BY-4.0
just seed-ecod --apply        # 45113 ECOD hierarchy nodes (A/X/H/T/F)
just seed-mcsa --apply        # 1003 M-CSA catalytic mechanisms
just seed-disprot --apply     # 3199 DisProt IDP profiles with regions
just seed-obo all --apply     # 292 OBO records (PSI-MI 146 + METPO 118 + PATO 28)

# UniProtKB FT-line seed — pass accessions or a local flat file
just seed-uniprot --accession B0R5N7 --accession P25888 --apply

# SCOPe seeder is written but Berkeley's server is behind an anti-bot
# challenge — download dir.des.scope.*.txt and dir.hie.scope.*.txt
# manually from https://scop.berkeley.edu/downloads/ into
# data/raw/scope/, then run:
just seed-scope --apply

UniProtKB supported FT types → axis / category:

UniProt FT typeAxisCategoryNotes
TRANSMEM, INTRAMEMskipped — per-protein membrane spans are redundant with the general transmembrane trait
SIGNALSEQUENCESEQ_SIGNAL_PEPTIDE
TRANSITSEQUENCESEQ_TRANSIT_PEPTIDEmitochondrial / chloroplast / peroxisome targeting
PROPEPSEQUENCESEQ_PROPEPTIDEzymogen activation segment
INIT_METSEQUENCESEQ_INITIATOR_METHIONINEN-terminal Met removed post-translationally
CHAIN, PEPTIDESEQUENCESEQ_MATURE_CHAINmature polypeptide product
NON_STDSEQUENCESEQ_NONSTANDARD_RESIDUEselenocysteine, pyrrolysine, curator-annotated
REGION /note="Disordered"SEQUENCESEQ_DISORDERother REGION free-text is skipped
COMPBIASSEQUENCESEQ_COMPOSITION/note carries residue class (Gly-rich, basic, acidic, …)
MOTIFSEQUENCESEQ_MOTIFcurator-defined; overlaps with PROSITE where cross-referenced
MOD_RESSEQUENCESEQ_MODIFIED_RESIDUEphosphorylation, methylation, acetylation, hydroxylation, sulfation, …
CARBOHYDSEQUENCESEQ_GLYCOSYLATION_SITEN-/O-linked, C-mannosylation, GPI anchor attachment
LIPIDSEQUENCESEQ_LIPIDATION_SITEmyristoylation, palmitoylation, prenylation, GPI-lipid
CROSSLNKSEQUENCESEQ_CROSSLINK_SITEisopeptide, ubiquitin/SUMO branch, sortase — bond not span, so no residue_sequence
DOMAINSTRUCTURESTRUCT_DOMAIN
ACT_SITESTRUCTURESTRUCT_ACTIVE_SITE
SITESTRUCTURESTRUCT_BINDING_SITE
BINDING (non-metal ligand)STRUCTURESTRUCT_BINDING_SITEligand ChEBI added to xrefs
BINDING (metal ligand) / METALSTRUCTURESTRUCT_METAL_SITEmetal keyword detection on /ligand + /ligand_note
DISULFIDSTRUCTURESTRUCT_DISULFIDEbond, not span — no residue_sequence
HELIX, STRAND, TURNSTRUCTURESTRUCT_SECONDARYrequires an experimental structure in the entry

Skipped (out-of-scope for this schema): TOPO_DOM, VARIANT, VAR_SEQ, MUTAGEN, CONFLICT, UNSURE, NON_CONS, NON_TER.

UniProtKB entry-level blocks (FUNCTION axis) → category:

UniProt block or refCategoryGrounding
CC CATALYTIC ACTIVITY (per Reaction=)FUNC_ENZYMATIC_ACTIVITYEC, Rhea, participating ChEBIs
DR GO; F:…activityFUNC_ENZYMATIC_ACTIVITYGO MF
DR GO; F:…bindingFUNC_BINDING_CAPACITYGO MF
CC COFACTOR (per Name=)FUNC_COFACTOR_REQUIREMENTChEBI
CC SUBCELLULAR LOCATION (per compartment)FUNC_LOCALIZATIONUniProt SubCell
DR GO; C:…FUNC_LOCALIZATIONGO CC
CC INDUCTION (keyword-matched)FUNC_ENVIRONMENTAL_RESPONSEkeyword vocabulary (cold, heat, oxidative stress, hypoxia, anaerobic/aerobic, osmotic, UV, …)
DR GO; P:response to …FUNC_ENVIRONMENTAL_RESPONSEGO BP
CC SUBUNIT (per "Interacts with X")FUNC_INTERACTION_PARTNERpartner name; PMIDs in evidence

Worked example — how one UniProtKB entry demultiplexes across the axes

Illustrated with P25888 (ATP-dependent RNA helicase RhlE, E. coli K12). This shows the FT/CC → axis / category mapping the seeder encodes; the per-protein records themselves are not seeded standalone (they are instance-level, not trait classes — see the note in docs/example.md). A real protein is instead attached as a canonical_example on the relevant class-level trait:

AxisRecordsCategories
SEQUENCE61 SEQ_DISORDER, 3 SEQ_COMPOSITION (Gly / basic+acidic / basic), 2 SEQ_MOTIF (Q motif + DEAD box)
STRUCTURE32 STRUCT_DOMAIN (Helicase ATP-binding + Helicase C-terminal), 1 STRUCT_BINDING_SITE (ATP → CHEBI:30616)
FUNCTION113 FUNC_ENZYMATIC_ACTIVITY (Rhea:13065 ATP hydrolysis, GO:0016887, GO:0003724), 2 FUNC_BINDING_CAPACITY (ATP + RNA), 2 FUNC_LOCALIZATION (Cytoplasm + GO:0005829), 2 FUNC_ENVIRONMENTAL_RESPONSE (cold shock + heat via GO:0009408), 2 FUNC_INTERACTION_PARTNER (PcnB + RNase E)

Each record carries identifierproteintraitsmech:UNIPROTKB_<ACC>_<TYPE>_<KEY>, canonical_examples linking to the source entry + NCBITaxon, xrefs (GO / EC / Rhea / ChEBI / partner labels), and evidence with the source PMIDs where the flat file cites them.

All seeded records land with mapping_status: SEEDED; curator review flips them to REVIEWED and adds evidence / causal graphs.

License

CC0-1.0 — Public Domain Dedication.