Data Structure

BlastoDB is built around seven main collections: Datasets, Subtypes, Lab Protocols, Publications, Research Labs, People, and Blog, plus a standalone Announcements collection and a Biobank collection. Cross-collection links are stored as stable UUID keys — renaming an entry never breaks a link. Vocabulary lists (Datatypes, Sources, Data Origins, Detection Methods, Countries) provide controlled terms used in datasets and subtypes.

The Biobank also follows the UUID-key rule: each entry references a research lab by its key through affiliated_lab, and the entry's lab name and country are derived from that lab at build time.

Dependency Graph

erDiagram
    DATASET }o--o{ SUBTYPE : "subtypes[ ]"
    DATASET }o--o{ PUBLICATION : "related_publications[ ]"
    DATASET }o--o{ LAB_PROTOCOL : "lab_protocols[ ]"
    LAB_PROTOCOL }o--o{ PUBLICATION : "related_publications[ ]"
    DATASET }o--o{ DATATYPE : "datatypes[ ]"
    DATASET }o--o{ SOURCE : "sources[ ]"
    DATASET }o--o{ DATA_ORIGIN : "data_origins[ ]"
    DATASET }o--o{ DETECTION_METHOD : "detection_methods[ ]"
    DATASET }o--o{ COUNTRY : "countries[ ]"
    SUBTYPE }o--o{ SOURCE : "sources[ ]"
    BLOG }o--o{ PUBLICATION : "related_publications[ ]"
    BLOG }o--o{ SUBTYPE : "related_subtypes[ ]"
    BLOG }o--o{ DATASET : "related_datasets[ ]"
    BIOBANK }o--|| RESEARCH_LAB : "affiliated_lab"

    DATASET {
        uuid key
        string title
        string link_to_source
        string publication_date
        string strains
    }
    BLOG {
        string title
        string publication_date
        string author
        markdown body
    }
    SUBTYPE {
        uuid key
        string name
        url reference_genome_link
        url ssu_rrna_link
    }
    PUBLICATION {
        uuid key
        string title
        string authors
        string date
        string publication_name
        string doi
        url url
    }
    LAB_PROTOCOL {
        uuid key
        string title
    }
    RESEARCH_LAB {
        uuid key
        string lab_name
        string contact_name
        string contact_mail
        string institution_name
        string country
    }
    BIOBANK {
        uuid key
        string title
        string tags
        string contact_person_name
        string contact_person_email
        string affiliated_lab
    }
    PERSON {
        string name
        string mail
        string affiliation
        string role
        url github
    }
    ANNOUNCEMENT {
        string title
        date publication_date
        date valid_until
        markdown body
    }
    DATATYPE {
        string value
    }
    SOURCE {
        string value
    }
    DATA_ORIGIN {
        string value
    }
    DETECTION_METHOD {
        string value
    }
    COUNTRY {
        string value
    }

Cross-linked Collections

These collections reference each other using stable key fields (hidden UUID, auto-generated by the CMS). A link is never broken by renaming an entry.

Collection Key type Linked from
Subtypes UUID (hidden) Datasets → subtypes[], Blog → related_subtypes[]
Datasets UUID (hidden) Blog → related_datasets[]
Lab Protocols UUID (hidden) Datasets → lab_protocols[]
Publications UUID (hidden) Datasets → related_publications[], Lab Protocols → related_publications[], Blog → related_publications[]

Blog articles link to publications, subtypes and datasets. Dataset and subtype pages "reverse-render" a Related Blog Articles section by filtering the blog for articles whose related_* array contains their key.

Standalone Collections

Collection Storage Notes
Research Labs content/data/research_labs.json Referenced by Biobank via affiliated_lab (by key); not linked elsewhere
People content/data/people.json Not linked from any other collection
Announcements content/data/announcements.yaml Date-filtered client-side; shown on homepage
Biobank content/data/biobank/*.md One file per entry; references a Research Lab by key; lab name + country derived from that lab

Vocabulary Lists

Vocabulary fields store string values directly — they are not linked by key. Changing a vocabulary term does not automatically update existing entries.

Vocabulary File Used in
Datatypes content/data/datatypes.yaml Datasets
Sources / Hosts content/data/sources.yaml Datasets, Subtypes
Data Origins content/data/data_origins.yaml Datasets
Detection Methods content/data/detection_methods.yaml Datasets
Countries content/data/countries.yaml Datasets

Schema Reference