soma-schema 0.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- soma_schema-0.2.2/.gitignore +165 -0
- soma_schema-0.2.2/LICENSE +21 -0
- soma_schema-0.2.2/PKG-INFO +109 -0
- soma_schema-0.2.2/README.md +98 -0
- soma_schema-0.2.2/pyproject.toml +81 -0
- soma_schema-0.2.2/src/docs/Liu2024_PM25_CFTR_SOMA.xlsx +0 -0
- soma_schema-0.2.2/src/docs/Montgomery2020_PM25_Mucociliary_SOMA.xlsx +0 -0
- soma_schema-0.2.2/src/docs/about.md +119 -0
- soma_schema-0.2.2/src/docs/artifacts.md +39 -0
- soma_schema-0.2.2/src/docs/claude-code-skills.md +317 -0
- soma_schema-0.2.2/src/docs/examples.md +1291 -0
- soma_schema-0.2.2/src/docs/index.md +241 -0
- soma_schema-0.2.2/src/docs/soma-icon.svg +42 -0
- soma_schema-0.2.2/src/docs/soma-logo.svg +61 -0
- soma_schema-0.2.2/src/docs/stylesheets/extra.css +279 -0
- soma_schema-0.2.2/src/soma/__init__.py +5 -0
- soma_schema-0.2.2/src/soma/datamodel/__init__.py +8 -0
- soma_schema-0.2.2/src/soma/datamodel/soma.py +4264 -0
- soma_schema-0.2.2/src/soma/datamodel/soma_pydantic.py +1975 -0
- soma_schema-0.2.2/src/soma/schema/README.md +3 -0
- soma_schema-0.2.2/src/soma/schema/aop_framework.yaml +357 -0
- soma_schema-0.2.2/src/soma/schema/assay_base.yaml +1382 -0
- soma_schema-0.2.2/src/soma/schema/assay_microschemas.yaml +1203 -0
- soma_schema-0.2.2/src/soma/schema/soma.yaml +230 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# DataHarmonizer build artifacts
|
|
2
|
+
node_modules/
|
|
3
|
+
dist/
|
|
4
|
+
docs/harmonizer.html
|
|
5
|
+
docs/schemas/
|
|
6
|
+
docs/menu.json
|
|
7
|
+
docs/assets/
|
|
8
|
+
|
|
9
|
+
# generated part of documentation
|
|
10
|
+
/docs/elements/*.md
|
|
11
|
+
/docs/artifacts/
|
|
12
|
+
/docs/examples/
|
|
13
|
+
/docs/schema/
|
|
14
|
+
|
|
15
|
+
# docs copied from src/docs by justfile _copy-docs
|
|
16
|
+
/docs/about.md
|
|
17
|
+
/docs/artifacts.md
|
|
18
|
+
/docs/examples.md
|
|
19
|
+
/docs/index.md
|
|
20
|
+
# linkml-run-examples output (not useful to have in git in its current form)
|
|
21
|
+
/examples/output/
|
|
22
|
+
|
|
23
|
+
# Derived schemas, generated from the schema.yaml
|
|
24
|
+
tmp/
|
|
25
|
+
project/*
|
|
26
|
+
!project/README.md
|
|
27
|
+
!project/excel/
|
|
28
|
+
!project/sqlschema/
|
|
29
|
+
!project/jsonschema/
|
|
30
|
+
!project/owl/
|
|
31
|
+
|
|
32
|
+
# Byte-compiled / optimized / DLL files
|
|
33
|
+
__pycache__/
|
|
34
|
+
*.py[cod]
|
|
35
|
+
*$py.class
|
|
36
|
+
|
|
37
|
+
# C extensions
|
|
38
|
+
*.so
|
|
39
|
+
|
|
40
|
+
# Distribution / packaging
|
|
41
|
+
.Python
|
|
42
|
+
build/
|
|
43
|
+
develop-eggs/
|
|
44
|
+
dist/
|
|
45
|
+
downloads/
|
|
46
|
+
eggs/
|
|
47
|
+
.eggs/
|
|
48
|
+
lib/
|
|
49
|
+
lib64/
|
|
50
|
+
parts/
|
|
51
|
+
sdist/
|
|
52
|
+
var/
|
|
53
|
+
wheels/
|
|
54
|
+
pip-wheel-metadata/
|
|
55
|
+
share/python-wheels/
|
|
56
|
+
*.egg-info/
|
|
57
|
+
.installed.cfg
|
|
58
|
+
*.egg
|
|
59
|
+
MANIFEST
|
|
60
|
+
|
|
61
|
+
# PyInstaller
|
|
62
|
+
# Usually these files are written by a python script from a template
|
|
63
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
64
|
+
*.manifest
|
|
65
|
+
*.spec
|
|
66
|
+
|
|
67
|
+
# Installer logs
|
|
68
|
+
pip-log.txt
|
|
69
|
+
pip-delete-this-directory.txt
|
|
70
|
+
|
|
71
|
+
# Unit test / coverage reports
|
|
72
|
+
htmlcov/
|
|
73
|
+
.tox/
|
|
74
|
+
.nox/
|
|
75
|
+
.coverage
|
|
76
|
+
.coverage.*
|
|
77
|
+
.cache
|
|
78
|
+
nosetests.xml
|
|
79
|
+
coverage.xml
|
|
80
|
+
*.cover
|
|
81
|
+
*.py,cover
|
|
82
|
+
.hypothesis/
|
|
83
|
+
.pytest_cache/
|
|
84
|
+
|
|
85
|
+
# Translations
|
|
86
|
+
*.mo
|
|
87
|
+
*.pot
|
|
88
|
+
|
|
89
|
+
# Django stuff:
|
|
90
|
+
*.log
|
|
91
|
+
local_settings.py
|
|
92
|
+
db.sqlite3
|
|
93
|
+
db.sqlite3-journal
|
|
94
|
+
|
|
95
|
+
# Flask stuff:
|
|
96
|
+
instance/
|
|
97
|
+
.webassets-cache
|
|
98
|
+
|
|
99
|
+
# Scrapy stuff:
|
|
100
|
+
.scrapy
|
|
101
|
+
|
|
102
|
+
# Sphinx documentation
|
|
103
|
+
docs/_build/
|
|
104
|
+
|
|
105
|
+
# PyBuilder
|
|
106
|
+
target/
|
|
107
|
+
|
|
108
|
+
# Jupyter Notebook
|
|
109
|
+
.ipynb_checkpoints
|
|
110
|
+
|
|
111
|
+
# IPython
|
|
112
|
+
profile_default/
|
|
113
|
+
ipython_config.py
|
|
114
|
+
|
|
115
|
+
# pyenv
|
|
116
|
+
.python-version
|
|
117
|
+
|
|
118
|
+
# pipenv
|
|
119
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
120
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
121
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
122
|
+
# install all needed dependencies.
|
|
123
|
+
#Pipfile.lock
|
|
124
|
+
|
|
125
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
|
126
|
+
__pypackages__/
|
|
127
|
+
|
|
128
|
+
# Celery stuff
|
|
129
|
+
celerybeat-schedule
|
|
130
|
+
celerybeat.pid
|
|
131
|
+
|
|
132
|
+
# SageMath parsed files
|
|
133
|
+
*.sage.py
|
|
134
|
+
|
|
135
|
+
# Environments
|
|
136
|
+
.env
|
|
137
|
+
.venv
|
|
138
|
+
env/
|
|
139
|
+
venv/
|
|
140
|
+
ENV/
|
|
141
|
+
env.bak/
|
|
142
|
+
venv.bak/
|
|
143
|
+
|
|
144
|
+
# Spyder project settings
|
|
145
|
+
.spyderproject
|
|
146
|
+
.spyproject
|
|
147
|
+
|
|
148
|
+
# Rope project settings
|
|
149
|
+
.ropeproject
|
|
150
|
+
|
|
151
|
+
# mkdocs documentation
|
|
152
|
+
/site
|
|
153
|
+
|
|
154
|
+
# mypy
|
|
155
|
+
.mypy_cache/
|
|
156
|
+
.dmypy.json
|
|
157
|
+
dmypy.json
|
|
158
|
+
|
|
159
|
+
# Pyre type checker
|
|
160
|
+
.pyre/
|
|
161
|
+
|
|
162
|
+
# pycharm
|
|
163
|
+
.idea
|
|
164
|
+
# Local vscode editor config
|
|
165
|
+
.vscode
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Sierra Moxon
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: soma-schema
|
|
3
|
+
Version: 0.2.2
|
|
4
|
+
Summary: This is the project description.
|
|
5
|
+
Author-email: Sierra Moxon <smoxon@lbl.gov>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Requires-Python: <4.0,>=3.9
|
|
9
|
+
Requires-Dist: linkml-runtime>=1.9.4
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
<img src="src/docs/soma-logo.svg" alt="SOMA Logo" width="700">
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
A <a href="https://linkml.io/">LinkML</a> schema for representing Key Event and Outcome measurements, assays, and experimental protocols in the context of environmental health sciences (EHS) outcomes research.
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
<p align="center">
|
|
21
|
+
<a href="https://EHS-Data-Standards.github.io/soma"><strong>Documentation</strong></a> ·
|
|
22
|
+
<a href="https://EHS-Data-Standards.github.io/soma/elements/"><strong>Schema</strong></a> ·
|
|
23
|
+
<a href="https://EHS-Data-Standards.github.io/soma/examples.html"><strong>Examples</strong></a> ·
|
|
24
|
+
<a href="https://EHS-Data-Standards.github.io/soma/artifacts.html"><strong>Artifacts</strong></a>
|
|
25
|
+
</p>
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Purpose
|
|
30
|
+
|
|
31
|
+
This data model provides a standardized way to capture and exchange data about airway biology
|
|
32
|
+
assays relevant to respiratory health outcomes, including:
|
|
33
|
+
|
|
34
|
+
- **Ciliary function** - Beat frequency, active area, morphology
|
|
35
|
+
- **Airway surface liquid** - ASL height, periciliary layer depth, ion composition
|
|
36
|
+
- **Mucociliary clearance** - Transport rates, directionality, clearance efficiency
|
|
37
|
+
- **Oxidative stress** - ROS, lipid peroxidation, antioxidant capacity
|
|
38
|
+
- **Ion channel function** - CFTR chloride secretion, sweat chloride
|
|
39
|
+
- **Signaling pathways** - EGFR phosphorylation, downstream kinases
|
|
40
|
+
- **Mucin biology** - Goblet cells, MUC5AC/MUC5B expression
|
|
41
|
+
- **Inflammatory markers** - BALF/sputum cell counts, cytokines
|
|
42
|
+
- **Lung function** - Spirometry outcomes (FEV1, FVC)
|
|
43
|
+
- **Gene expression** - Target gene mRNA levels
|
|
44
|
+
|
|
45
|
+
## Key Features
|
|
46
|
+
|
|
47
|
+
- **Assay-centric architecture** with domain-specific assay classes using named measurement slots
|
|
48
|
+
- **StudySubject hierarchy** for describing biological systems: cell cultures, human/animal subjects, populations
|
|
49
|
+
- **Typed protocol hierarchy**: ImagingProtocol, MolecularAssayProtocol, StainingProtocol, SpirometryProtocol
|
|
50
|
+
- **AOP Framework integration**: KeyEvent and AdverseOutcomePathway classes with assay linkage
|
|
51
|
+
- **Ontology-backed** entities mapped to GO, ChEBI, CL, UO, OBI, and other biomedical ontologies
|
|
52
|
+
|
|
53
|
+
## Getting Started
|
|
54
|
+
|
|
55
|
+
The schema can be used to:
|
|
56
|
+
|
|
57
|
+
1. **Validate data** - Ensure your data conforms to the model
|
|
58
|
+
2. **Generate code** - Create Python dataclasses, Pydantic models, JSON Schema
|
|
59
|
+
3. **Transform data** - Convert between JSON, YAML, RDF, and other formats
|
|
60
|
+
|
|
61
|
+
## Development Workflow
|
|
62
|
+
|
|
63
|
+
For local development, use `uv` and `just` as the canonical entry points.
|
|
64
|
+
The repository may contain underlying Python, npm, and LinkML commands, but contributors
|
|
65
|
+
should treat the `just` recipes as the supported interface for routine setup, testing,
|
|
66
|
+
and generation tasks.
|
|
67
|
+
|
|
68
|
+
### Prerequisites
|
|
69
|
+
|
|
70
|
+
- `uv` for Python environment and dependency management
|
|
71
|
+
- `just` for repository task automation
|
|
72
|
+
- `node` and `npm` for DataHarmonizer frontend builds
|
|
73
|
+
|
|
74
|
+
### Setup
|
|
75
|
+
|
|
76
|
+
Install the Python dependencies managed by the repo:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
just install
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Common Commands
|
|
83
|
+
|
|
84
|
+
- Run the full validation workflow: `just test`
|
|
85
|
+
- Regenerate project artifacts: `just gen-project`
|
|
86
|
+
- Regenerate schema documentation: `just gen-doc`
|
|
87
|
+
- Build the DataHarmonizer assets: `just build-dh`
|
|
88
|
+
- List all available recipes: `just --list`
|
|
89
|
+
|
|
90
|
+
If you need to run a Python tool directly, prefer `uv run ...` so it executes inside the
|
|
91
|
+
managed project environment.
|
|
92
|
+
|
|
93
|
+
## Repository Structure
|
|
94
|
+
|
|
95
|
+
* [docs/](docs/) - mkdocs-managed documentation
|
|
96
|
+
* [examples/](examples/) - Examples of using the schema
|
|
97
|
+
* [project/](project/) - project files (auto-generated, do not edit)
|
|
98
|
+
* [src/soma/schema/](src/soma/schema) - LinkML schema (edit this)
|
|
99
|
+
* [src/soma/datamodel/](src/soma/datamodel) - generated Python datamodel
|
|
100
|
+
* [tests/](tests/) - Python tests
|
|
101
|
+
|
|
102
|
+
## Developer Tools
|
|
103
|
+
|
|
104
|
+
There are several pre-defined command-recipes available.
|
|
105
|
+
They are written for the command runner [just](https://github.com/casey/just/). To list all pre-defined commands, run `just` or `just --list`.
|
|
106
|
+
|
|
107
|
+
## Credits
|
|
108
|
+
|
|
109
|
+
This project uses the template [linkml-project-copier](https://github.com/dalito/linkml-project-copier) published as [doi:10.5281/zenodo.15163584](https://doi.org/10.5281/zenodo.15163584).
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="src/docs/soma-logo.svg" alt="SOMA Logo" width="700">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
A <a href="https://linkml.io/">LinkML</a> schema for representing Key Event and Outcome measurements, assays, and experimental protocols in the context of environmental health sciences (EHS) outcomes research.
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://EHS-Data-Standards.github.io/soma"><strong>Documentation</strong></a> ·
|
|
11
|
+
<a href="https://EHS-Data-Standards.github.io/soma/elements/"><strong>Schema</strong></a> ·
|
|
12
|
+
<a href="https://EHS-Data-Standards.github.io/soma/examples.html"><strong>Examples</strong></a> ·
|
|
13
|
+
<a href="https://EHS-Data-Standards.github.io/soma/artifacts.html"><strong>Artifacts</strong></a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Purpose
|
|
19
|
+
|
|
20
|
+
This data model provides a standardized way to capture and exchange data about airway biology
|
|
21
|
+
assays relevant to respiratory health outcomes, including:
|
|
22
|
+
|
|
23
|
+
- **Ciliary function** - Beat frequency, active area, morphology
|
|
24
|
+
- **Airway surface liquid** - ASL height, periciliary layer depth, ion composition
|
|
25
|
+
- **Mucociliary clearance** - Transport rates, directionality, clearance efficiency
|
|
26
|
+
- **Oxidative stress** - ROS, lipid peroxidation, antioxidant capacity
|
|
27
|
+
- **Ion channel function** - CFTR chloride secretion, sweat chloride
|
|
28
|
+
- **Signaling pathways** - EGFR phosphorylation, downstream kinases
|
|
29
|
+
- **Mucin biology** - Goblet cells, MUC5AC/MUC5B expression
|
|
30
|
+
- **Inflammatory markers** - BALF/sputum cell counts, cytokines
|
|
31
|
+
- **Lung function** - Spirometry outcomes (FEV1, FVC)
|
|
32
|
+
- **Gene expression** - Target gene mRNA levels
|
|
33
|
+
|
|
34
|
+
## Key Features
|
|
35
|
+
|
|
36
|
+
- **Assay-centric architecture** with domain-specific assay classes using named measurement slots
|
|
37
|
+
- **StudySubject hierarchy** for describing biological systems: cell cultures, human/animal subjects, populations
|
|
38
|
+
- **Typed protocol hierarchy**: ImagingProtocol, MolecularAssayProtocol, StainingProtocol, SpirometryProtocol
|
|
39
|
+
- **AOP Framework integration**: KeyEvent and AdverseOutcomePathway classes with assay linkage
|
|
40
|
+
- **Ontology-backed** entities mapped to GO, ChEBI, CL, UO, OBI, and other biomedical ontologies
|
|
41
|
+
|
|
42
|
+
## Getting Started
|
|
43
|
+
|
|
44
|
+
The schema can be used to:
|
|
45
|
+
|
|
46
|
+
1. **Validate data** - Ensure your data conforms to the model
|
|
47
|
+
2. **Generate code** - Create Python dataclasses, Pydantic models, JSON Schema
|
|
48
|
+
3. **Transform data** - Convert between JSON, YAML, RDF, and other formats
|
|
49
|
+
|
|
50
|
+
## Development Workflow
|
|
51
|
+
|
|
52
|
+
For local development, use `uv` and `just` as the canonical entry points.
|
|
53
|
+
The repository may contain underlying Python, npm, and LinkML commands, but contributors
|
|
54
|
+
should treat the `just` recipes as the supported interface for routine setup, testing,
|
|
55
|
+
and generation tasks.
|
|
56
|
+
|
|
57
|
+
### Prerequisites
|
|
58
|
+
|
|
59
|
+
- `uv` for Python environment and dependency management
|
|
60
|
+
- `just` for repository task automation
|
|
61
|
+
- `node` and `npm` for DataHarmonizer frontend builds
|
|
62
|
+
|
|
63
|
+
### Setup
|
|
64
|
+
|
|
65
|
+
Install the Python dependencies managed by the repo:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
just install
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Common Commands
|
|
72
|
+
|
|
73
|
+
- Run the full validation workflow: `just test`
|
|
74
|
+
- Regenerate project artifacts: `just gen-project`
|
|
75
|
+
- Regenerate schema documentation: `just gen-doc`
|
|
76
|
+
- Build the DataHarmonizer assets: `just build-dh`
|
|
77
|
+
- List all available recipes: `just --list`
|
|
78
|
+
|
|
79
|
+
If you need to run a Python tool directly, prefer `uv run ...` so it executes inside the
|
|
80
|
+
managed project environment.
|
|
81
|
+
|
|
82
|
+
## Repository Structure
|
|
83
|
+
|
|
84
|
+
* [docs/](docs/) - mkdocs-managed documentation
|
|
85
|
+
* [examples/](examples/) - Examples of using the schema
|
|
86
|
+
* [project/](project/) - project files (auto-generated, do not edit)
|
|
87
|
+
* [src/soma/schema/](src/soma/schema) - LinkML schema (edit this)
|
|
88
|
+
* [src/soma/datamodel/](src/soma/datamodel) - generated Python datamodel
|
|
89
|
+
* [tests/](tests/) - Python tests
|
|
90
|
+
|
|
91
|
+
## Developer Tools
|
|
92
|
+
|
|
93
|
+
There are several pre-defined command-recipes available.
|
|
94
|
+
They are written for the command runner [just](https://github.com/casey/just/). To list all pre-defined commands, run `just` or `just --list`.
|
|
95
|
+
|
|
96
|
+
## Credits
|
|
97
|
+
|
|
98
|
+
This project uses the template [linkml-project-copier](https://github.com/dalito/linkml-project-copier) published as [doi:10.5281/zenodo.15163584](https://doi.org/10.5281/zenodo.15163584).
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling", "uv-dynamic-versioning"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "soma-schema"
|
|
7
|
+
description = "This is the project description."
|
|
8
|
+
authors = [
|
|
9
|
+
{name = "Sierra Moxon", email = "smoxon@lbl.gov"},
|
|
10
|
+
]
|
|
11
|
+
license = "MIT"
|
|
12
|
+
license-files = ["LICENSE"]
|
|
13
|
+
readme = "README.md"
|
|
14
|
+
requires-python = ">=3.9,<4.0"
|
|
15
|
+
dynamic = ["version"]
|
|
16
|
+
|
|
17
|
+
dependencies = [
|
|
18
|
+
"linkml-runtime >=1.9.4",
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
[dependency-groups]
|
|
22
|
+
dev = [
|
|
23
|
+
"linkml>=1.9.3",
|
|
24
|
+
"mkdocs-material>=8.2.8",
|
|
25
|
+
"mkdocs-mermaid2-plugin>=1.1.1",
|
|
26
|
+
"jupyter>=1.0.0",
|
|
27
|
+
"mknotebooks>= 0.8.0",
|
|
28
|
+
"oaklib>=0.6.0",
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
# See https://hatch.pypa.io/latest/config/build/#file-selection for how to
|
|
32
|
+
# explicitly include files other than default into the build distributions.
|
|
33
|
+
|
|
34
|
+
[tool.hatch.build.targets.sdist]
|
|
35
|
+
# Without this, hatchling packs the whole repo (200+ MB of example PDFs)
|
|
36
|
+
# and the upload exceeds PyPI's 100 MB file limit.
|
|
37
|
+
only-include = ["src"]
|
|
38
|
+
|
|
39
|
+
[tool.hatch.build.targets.wheel]
|
|
40
|
+
packages = ["src/soma"]
|
|
41
|
+
|
|
42
|
+
[tool.hatch.version]
|
|
43
|
+
source = "uv-dynamic-versioning"
|
|
44
|
+
|
|
45
|
+
# Ref.: https://github.com/ninoseki/uv-dynamic-versioning/
|
|
46
|
+
[tool.uv-dynamic-versioning]
|
|
47
|
+
vcs = "git"
|
|
48
|
+
style = "pep440"
|
|
49
|
+
fallback-version = "0.0.0"
|
|
50
|
+
|
|
51
|
+
# Ref.: https://docs.pytest.org/en/stable/reference/reference.html#configuration-options
|
|
52
|
+
[tool.pytest.ini_options]
|
|
53
|
+
testpaths = ["tests"]
|
|
54
|
+
|
|
55
|
+
# Ref.: https://github.com/codespell-project/codespell
|
|
56
|
+
[tool.codespell]
|
|
57
|
+
skip = [
|
|
58
|
+
"LICENSE",
|
|
59
|
+
"pyproject.toml",
|
|
60
|
+
"uv.lock",
|
|
61
|
+
"project/*",
|
|
62
|
+
"src/soma/datamodel/soma_pydantic.py",
|
|
63
|
+
"src/soma/datamodel/soma.py",
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
# Reminder: words have to be lowercased for the ignore-words-list
|
|
67
|
+
ignore-words-list = "linke"
|
|
68
|
+
quiet-level = 3
|
|
69
|
+
|
|
70
|
+
# Ref.: https://github.com/crate-ci/typos (spell checker)
|
|
71
|
+
[tool.typos.default.extend-words]
|
|
72
|
+
linke = "linke"
|
|
73
|
+
[tool.typos.files]
|
|
74
|
+
extend-exclude = [
|
|
75
|
+
"LICENSE",
|
|
76
|
+
"uv.lock",
|
|
77
|
+
"pyproject.toml",
|
|
78
|
+
"project/*",
|
|
79
|
+
"src/soma/datamodel/soma_pydantic.py",
|
|
80
|
+
"src/soma/datamodel/soma.py",
|
|
81
|
+
]
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# About
|
|
2
|
+
|
|
3
|
+
## The SOMA
|
|
4
|
+
|
|
5
|
+
The SOMA is part of the [EHS Data Standards](https://github.com/EHS-Data-Standards)
|
|
6
|
+
initiative, focused on developing standardized data models for environmental health sciences research.
|
|
7
|
+
|
|
8
|
+
## Project Goals
|
|
9
|
+
|
|
10
|
+
This project aims to:
|
|
11
|
+
|
|
12
|
+
1. **Standardize data representation** for exposure-outcome relationships in EHS research
|
|
13
|
+
2. **Enable data interoperability** across studies, cohorts, and institutions
|
|
14
|
+
3. **Support mechanistic understanding** through integration with Adverse Outcome Pathways (AOPs)
|
|
15
|
+
4. **Bridge epidemiological and toxicological data** from human studies and model systems
|
|
16
|
+
|
|
17
|
+
## The Data Model
|
|
18
|
+
|
|
19
|
+
### Design Principles
|
|
20
|
+
|
|
21
|
+
The SOMA follows these principles:
|
|
22
|
+
|
|
23
|
+
- **Ontology-first** - All entities are mapped to established biomedical ontologies
|
|
24
|
+
- **FAIR-compliant** - Supports Findable, Accessible, Interoperable, and Reusable data
|
|
25
|
+
- **Extensible** - New assay types can be added without breaking existing data
|
|
26
|
+
- **Multi-scale** - Captures data from molecular to population levels
|
|
27
|
+
|
|
28
|
+
### Technology Stack
|
|
29
|
+
|
|
30
|
+
The model is built using:
|
|
31
|
+
|
|
32
|
+
- [LinkML](https://linkml.io/) - Linked Data Modeling Language for schema definition
|
|
33
|
+
- [MkDocs](https://www.mkdocs.org/) with [Material theme](https://squidfunk.github.io/mkdocs-material/)
|
|
34
|
+
for documentation
|
|
35
|
+
- Python for data validation and transformation
|
|
36
|
+
|
|
37
|
+
### Core Domains
|
|
38
|
+
|
|
39
|
+
| Domain | Description |
|
|
40
|
+
|--------|-------------|
|
|
41
|
+
| Assays | Domain-specific assay classes with named measurement slots (e.g., CiliaryFunctionAssay, LungFunctionAssay) |
|
|
42
|
+
| Study Subjects | Biological systems under study: cell cultures (CellularSystem), human/animal subjects (InVivoSubject), populations (PopulationSubject) |
|
|
43
|
+
| Protocols | Typed experimental procedures: ImagingProtocol, MolecularAssayProtocol, StainingProtocol, SpirometryProtocol |
|
|
44
|
+
| AOP Framework | Adverse Outcome Pathways: KeyEvent, AdverseOutcomePathway, with assay linkage via `informs_on_key_event` |
|
|
45
|
+
|
|
46
|
+
## Contributing
|
|
47
|
+
|
|
48
|
+
We welcome contributions from the community. To contribute:
|
|
49
|
+
|
|
50
|
+
1. Visit the [GitHub repository](https://github.com/EHS-Data-Standards/soma)
|
|
51
|
+
2. Review the existing schema in `src/soma/schema/`
|
|
52
|
+
3. Open an issue to discuss proposed changes
|
|
53
|
+
4. Submit a pull request with your contributions
|
|
54
|
+
|
|
55
|
+
## Development
|
|
56
|
+
|
|
57
|
+
For local development, use [uv](https://docs.astral.sh/uv/) and
|
|
58
|
+
[just](https://github.com/casey/just/) as the canonical entry points.
|
|
59
|
+
The repository may contain underlying Python, npm, and LinkML commands, but
|
|
60
|
+
contributors should treat the `just` recipes as the supported interface for
|
|
61
|
+
routine setup, testing, and generation tasks.
|
|
62
|
+
|
|
63
|
+
### Prerequisites
|
|
64
|
+
|
|
65
|
+
- Python 3.10+
|
|
66
|
+
- [uv](https://docs.astral.sh/uv/) for Python environment and dependency management
|
|
67
|
+
- [just](https://github.com/casey/just/) for repository task automation
|
|
68
|
+
- `node` and `npm` for DataHarmonizer frontend builds
|
|
69
|
+
|
|
70
|
+
### Setup
|
|
71
|
+
|
|
72
|
+
Install the Python dependencies managed by the repo:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
just install
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Common Commands
|
|
79
|
+
|
|
80
|
+
- Run the full validation workflow: `just test`
|
|
81
|
+
- Regenerate project artifacts: `just gen-project`
|
|
82
|
+
- Regenerate schema documentation: `just gen-doc`
|
|
83
|
+
- Build the DataHarmonizer assets: `just build-dh`
|
|
84
|
+
- Run the local documentation server: `just testdoc`
|
|
85
|
+
- List all available recipes: `just --list`
|
|
86
|
+
|
|
87
|
+
If you need to run a Python tool directly, prefer `uv run ...` so it executes
|
|
88
|
+
inside the managed project environment.
|
|
89
|
+
|
|
90
|
+
### Project Structure
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
soma/
|
|
94
|
+
├── src/
|
|
95
|
+
│ ├── docs/ # Documentation source files
|
|
96
|
+
│ └── soma/
|
|
97
|
+
│ ├── schema/ # LinkML schema definition
|
|
98
|
+
│ └── datamodel/ # Generated Python models
|
|
99
|
+
├── docs/
|
|
100
|
+
│ └── elements/ # Generated schema docs
|
|
101
|
+
├── project/ # Generated artifacts
|
|
102
|
+
├── tests/
|
|
103
|
+
│ └── data/ # Test data files
|
|
104
|
+
└── examples/ # Usage examples
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## License
|
|
108
|
+
|
|
109
|
+
This project is released under the [MIT License](https://opensource.org/licenses/MIT).
|
|
110
|
+
|
|
111
|
+
## Acknowledgments
|
|
112
|
+
|
|
113
|
+
This project uses the [linkml-project-copier](https://github.com/dalito/linkml-project-copier)
|
|
114
|
+
template for project structure and build tooling.
|
|
115
|
+
|
|
116
|
+
## Contact
|
|
117
|
+
|
|
118
|
+
For questions or feedback, please open an issue on the
|
|
119
|
+
[GitHub repository](https://github.com/EHS-Data-Standards/soma/issues).
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Generated Artifacts
|
|
2
|
+
|
|
3
|
+
Download the generated model serializations:
|
|
4
|
+
|
|
5
|
+
- [JSON Schema](artifacts/soma.schema.json)
|
|
6
|
+
- [Pydantic Model](artifacts/soma_pydantic.py)
|
|
7
|
+
- [Python Dataclasses](artifacts/soma.py)
|
|
8
|
+
- [Excel Spreadsheet](artifacts/soma.xlsx)
|
|
9
|
+
|
|
10
|
+
## Paper-Derived SOMA Data
|
|
11
|
+
|
|
12
|
+
SOMA-conformant data extracted from published PM2.5 research papers. Each workbook contains
|
|
13
|
+
assay measurements mapped to the SOMA schema with full provenance (figure/table references,
|
|
14
|
+
p-values, protocols, exposure conditions).
|
|
15
|
+
|
|
16
|
+
### Montgomery et al. (2020)
|
|
17
|
+
|
|
18
|
+
**"Genome-Wide Analysis Reveals Mucociliary Remodeling of the Nasal Airway Epithelium Induced by Urban PM2.5"**
|
|
19
|
+
|
|
20
|
+
Am J Respir Cell Mol Biol. 2020;63(2):172-184 |
|
|
21
|
+
[Paper](https://academic.oup.com/ajrcmb/article/63/2/172/8461239) |
|
|
22
|
+
[PubMed Central](https://pmc.ncbi.nlm.nih.gov/articles/PMC7397762/) |
|
|
23
|
+
DOI: 10.1165/rcmb.2019-0454OC
|
|
24
|
+
|
|
25
|
+
- [Excel Workbook](artifacts/Montgomery2020_PM25_Mucociliary_SOMA.xlsx)
|
|
26
|
+
- SOMA assay types: GeneExpressionAssay, GobletCellAssay, FoxJExpressionAssay
|
|
27
|
+
- Key findings: CYP1A1 LFC=6.21 (AhR activation), MUC5AC+ cells FC=2.88, FOXJ1+ nuclei 75% decrease, 424 DEGs at moderate dose
|
|
28
|
+
|
|
29
|
+
### Liu et al. (2024)
|
|
30
|
+
|
|
31
|
+
**"PM2.5 Exposure Inhibits Transepithelial Anion Short-circuit Current by Downregulating P2Y2 Receptor/CFTR Pathway"**
|
|
32
|
+
|
|
33
|
+
Int J Med Sci. 2024;21(10):1929-1944 |
|
|
34
|
+
[Paper](https://www.medsci.org/v21p1929.htm) |
|
|
35
|
+
DOI: 10.7150/ijms.96777
|
|
36
|
+
|
|
37
|
+
- [Excel Workbook](artifacts/Liu2024_PM25_CFTR_SOMA.xlsx)
|
|
38
|
+
- SOMA assay types: CFTRFunctionAssay, GeneExpressionAssay, GobletCellAssay, BALFSputumAssay, LungFunctionAssay
|
|
39
|
+
- Key findings: PM2.5 downregulates P2Y2R/CFTR (p<0.05), inhibits Isc, increases goblet cells (p<0.001), elevates Th2 cytokines
|