ontology-based rare disease common data model
Welcome to the repo of the ontology-based rare disease common data model (RD-CDM) harmonising international registry use, HL7® FHIR®, and the GA4GH Phenopacket Schema.
Latest docs: https://rd-cdm.readthedocs.io/en/latest/
Manuscript
The corresponding paper for RD-CDM v2.0.0 has been published in Nature Scientific Data:
https://www.nature.com/articles/s41597-025-04558-z
Table of Contents
- Project Description
- What you get from PyPI
- Features
- Installation
- CLI tools
- Validating with BioPortal
- Contributing & Contact
- Resources
- License
- Citing
- Acknowledgements
Project Description
The ontology-based RD-CDM harmonizes rare disease data capture across registries. It integrates ERDRI-CDS, HL7 FHIR, and GA4GH Phenopacket Schema to support interoperable data for research and care. RD-CDM v2.0.x comprises 78 data elements covering formal criteria, personal information, patient status, disease, genetic findings, phenotypic findings, and family history.
What you get from PyPI
Installing rd-cdm from PyPI provides:
-
Schema
src/rd_cdm/schema/rd_cdm.yaml— LinkML schema defining the data model structure. Theversionanddatefields here are the single source of truth for the data model version.
-
Instances
src/rd_cdm/instances/code_systems.yamlsrc/rd_cdm/instances/data_elements.yamlsrc/rd_cdm/instances/value_sets.yamlsrc/rd_cdm/instances/rd_cdm.yaml— merged instance, version-stamped withrd_cdm_versionandrd_cdm_dateat the topsrc/rd_cdm/instances/jsons/rd_cdm.jsonsrc/rd_cdm/instances/csvs/rd_cdm.csv
-
Generated Python classes (LinkML)
src/rd_cdm/python_classes/rd_cdm.py— LinkML runtime dataclassessrc/rd_cdm/python_classes/rd_cdm_pydantic.py— Pydantic v2 models
-
CLI entry points
rd-cdm-merge— merge instance parts intord_cdm.yamlrd-cdm-json— export tojsons/rd_cdm.jsonrd-cdm-csv— export tocsvs/rd_cdm.csvrd-cdm-validate— validate ontology codes via BioPortal
Features
- Interoperability: Aligns with HL7 FHIR v4.0.1 and GA4GH Phenopacket v2.0
- Ontology-driven: Uses SNOMED CT, LOINC, NCIT, MONDO, OMIM, HPO, and more
- Modular: Clear separation of schema, instances, and exports
- Self-describing exports: Every YAML, JSON, and CSV file carries
rd_cdm_versionandrd_cdm_dateso outputs are unambiguous without needing to know which package version was installed - Tooling: Merge, export, and validation utilities via simple CLI commands
- Pydantic models: Runtime validation generated from the LinkML schema
Installation
From PyPI:
pip install rd-cdm
Optional extras:
pip install rd-cdm[test] # pytest, requests-mock
pip install rd-cdm[docs] # mkdocs and the material theme
pip install rd-cdm[dev] # linkml (for regenerating Python classes and docs)
Development install
git clone https://github.com/BIH-CEI/rd-cdm.git
cd rd-cdm
python -m venv .venv && source .venv/bin/activate
pip install -U pip
pip install -e ".[test,dev]"
pytest -q
We use a src/ layout. Use the installed CLI entry points shown below rather than running scripts directly.
CLI tools
After installation the following commands are available:
# Merge instance parts → src/rd_cdm/instances/rd_cdm.yaml
rd-cdm-merge
# Export merged YAML → src/rd_cdm/instances/jsons/rd_cdm.json
rd-cdm-json
# Export merged YAML → src/rd_cdm/instances/csvs/rd_cdm.csv
rd-cdm-csv
# Validate all ontology codes against BioPortal
rd-cdm-validate
The recommended order when updating the model is:
rd-cdm-merge && rd-cdm-json && rd-cdm-csv && rd-cdm-validate
Validating with BioPortal
rd-cdm-validate checks all ontology codes in the merged instance against
BioPortal and reports version drift and missing or deprecated terms.
Get an API key
Sign up at https://bioportal.bioontology.org/accounts/new, go to your account settings, and copy your API key.
Set the environment variable
macOS / Linux:
export BIOPORTAL_API_KEY="your-key-here"
Windows (PowerShell):
setx BIOPORTAL_API_KEY "your-key-here"
Contributing and Contact
The RD-CDM is a community-driven effort. Please feel free to open issues, discuss features, or submit pull requests. For larger contributions consider reaching out directly.
See the Contributing section of our documentation
for full guidelines.
RareLink
RareLink is a REDCap-based framework for rare disease research linking international registries to FHIR and Phenopackets, built on the RD-CDM.
Resources
Ontologies
- Human Phenotype Ontology 🔗
- Monarch Initiative Disease Ontology 🔗
- Online Mendelian Inheritance in Man 🔗
- Orphanet Rare Disease Ontology 🔗
- SNOMED CT 🔗
- ICD-11 🔗
- ICD-10-CM 🔗
- NCBI Taxonomy 🔗
- LOINC 🔗
- HGNC 🔗
- NCI Thesaurus OBO Edition 🔗
For the ontology versions used in each RD-CDM release, see the resources page in our documentation.
License
Citing
Graefe, A.S.L., Hübner, M.R., Rehburg, F. et al. An ontology-based rare disease common data model harmonising international registries, FHIR, and Phenopackets. Sci Data 12, 234 (2025). https://doi.org/10.1038/s41597-025-04558-z
Acknowledgements
- Adam SL Graefe
- Filip Rehburg
- Samer Alkarkoukly
- Daniel Danis
- Peter N. Robinson
- Oya Beyan
- Sylvia Thun
Metadata
Release files for rd-cdm 2.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rd_cdm-2.1.0.tar.gz | 94.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rd_cdm-2.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 216.3 kB
Release files / rd_cdm-2.1.0.tar.gz
| Download URL | rd_cdm-2.1.0.tar.gz |
|---|---|
| Size | 94.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e9fa5405740b2337268fa069d06475dddd35fc3bace6887622fb05037baf401b
|
|
BLAKE2b-256 checksum How to use checksums |
fbee6a6d2f370407470bbbb036f04611ec5f98e701ddb5da6775df40c66e1138
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Release files / rd_cdm-2.1.0-py3-none-any.whl
| Download URL | rd_cdm-2.1.0-py3-none-any.whl |
|---|---|
| Size | 121.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dccba6d3853621c7fa811c80b074d1af1b3a45eb8d4e313774277fcaacacb66e
|
|
BLAKE2b-256 checksum How to use checksums |
f2a597f660cca2577fbd6acac700c9583820edf32b40afe5d13b6f0bbba675ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|