This is an extension of the DCAT Application Profile v3.0 in LinkML. It is intended to be used by NFDI4Chem & NFDI4Cat as a core that can further be extended in profiles to provide domain specific metadata for a dataset.
The official DCAT-AP 3.0.0 SHACL shapes where downloaded from the DCAT-AP GitHub repository from the 3.0.0 release folder within the master branch. We chose this shapes definition file, as they are in line with the current DCAT-AP Specification website and because its IRI resolves. It must be noted, that this is not case for the shapes provides in the GitHub 3.0.0 release (respectively the release branch).
The downloaded SHACL shapes were then processed by the dcat_ap_shacl_2_linkml.py to generate two LinkML representations from it:
- dcat_ap_linkml.yaml - an almost 1:1 translation from SHACL to LinkML that could be reused by anyone who wants to.
- dcat_ap_plus.yaml - the LinkML representation of DCAT-AP to which we added the additional constraints, classes and properties we need for our DCAT-AP extension.
https://nfdi-de.github.io/chem-dcat-ap
- examples/ - example data and code
- project/ - project files (do not edit these)
- src/ - source files (edit these)
- tests/ - Python tests
See also the documentation of the template: https://github.com/linkml/linkml-project-copier?tab=readme-ov-file#prerequisites
-
uv
uv is a tool to manage Python projects and for managing isolated Python-based applications. You will use it in your generated project to manage dependencies and build distribution files. Install uv by following their instructions.
Note: Environments with private pypi repository may need extra configuration (example):
export UV_DEFAULT_INDEX=https://nexus.example.com/repository/pypi-all/simple -
Copier
Copier is a tool for generating projects based on a template (like this one!). It also allows re-configuring the projects and to keep them updated when the original template changes. To insert dates into the template, copier requires jinja2_time in the copier environment. Install both with uv by running:
uv tool install --with jinja2-time copier
-
just
The project contains a
justfilewith pre-defined complex commands. To execute these commands you need just as command runner. Install it by running:uv tool install rust-just
To generate project artefacts run:
just gen-project: generates all other representationsjust deploy: deploys sitejust testdoc: locally builds docs and runs test server
To regenerate the DCAT-AP LinkML representation as well as the PLUS extension run:
uv run python src/dcat_ap_shacl_2_linkml.py
Validate and test all: just test
Validate a single example dataset using LinkML's validator framework:
- Validate domain agnostic DCAT-AP extension conform
AnalysisDatasetexampleuv run linkml validate tests/data/valid/AnalysisDataset-001.yaml -s src/chem_dcat_ap/schema/chem_dcat_ap.yaml -C AnalysisDataset - Validate a NMR spectroscopy-specific dataset example conforming to ChemDCAT-AP's
SubstanceSampleCharacterizationDatasetuv run linkml validate tests/data/valid/SubstanceSampleCharacterizationDataset-001.yaml -s src/chem_dcat_ap/schema/chem_dcat_ap.yaml -C SubstanceSampleCharacterizationDataset - Validate a reaction dataset example conforming to ChemDCAT-AP's
ReactionMonitoringDatasetuv run linkml validate tests/data/valid/ReactionMonitoringDataset-001.yaml -s src/chem_dcat_ap/schema/chem_dcat_ap.yaml -C ReactionMonitoringDataset - Validate a chemical reaction example conforming to ChemDCAT-AP's
ChemicalReactionuv run linkml validate tests/data/valid/ChemicalReaction-001.yaml -s src/chem_dcat_ap/schema/chem_dcat_ap.yaml -C ChemicalReaction - Validate a chemical substance sample example conforming to ChemDCAT-AP's
SubstanceSampleuv run linkml validate tests/data/valid/SubstanceSample-001.yaml -s src/chem_dcat_ap/schema/chem_dcat_ap.yaml -C SubstanceSample - Validate a material sample example conforming to ChemDCAT-AP's
MaterialSampleuv run linkml validate tests/data/valid/MaterialSample-001.yaml -s src/chem_dcat_ap/schema/chem_dcat_ap.yaml -C MaterialSample
To convert the test data into a TTL graph run:
- Convert the domain agnostic DCAT-AP+ based example of a AnalysisDataset
uv run linkml-convert -t ttl tests/data/valid/AnalysisDataset-001.yaml -s src/chem_dcat_ap/schema/chem_dcat_ap.yaml -P "_base=https://search.nfdi4chem.de/dataset/" -C AnalysisDataset - Convert a NMR spectroscopy-specific dataset example conforming to ChemDCAT-AP's
SubstanceSampleCharacterizationDatasetuv run linkml-convert -t ttl tests/data/valid/SubstanceSampleCharacterizationDataset-001.yaml -s src/chem_dcat_ap/schema/chem_dcat_ap.yaml -P "_base=https://search.nfdi4chem.de/dataset/" -C SubstanceSampleCharacterizationDataset - Convert a reaction dataset example conforming to ChemDCAT-AP's
ReactionMonitoringDatasetuv run linkml-convert -t ttl tests/data/valid/ReactionMonitoringDataset-001.yaml -s src/chem_dcat_ap/schema/chem_dcat_ap.yaml -P "_base=https://search.nfdi4chem.de/dataset/" -C ReactionMonitoringDataset - Convert a material sample example conforming to ChemDCAT-AP's
MaterialSampleuv run linkml-convert -t ttl tests/data/valid/MaterialSample-001.yaml -s src/chem_dcat_ap/schema/chem_dcat_ap.yaml -P "_base=https://search.nfdi4chem.de/dataset/" -C MaterialSample - Convert a chemical substance sample example conforming to ChemDCAT-AP's
SubstanceSampleuv run linkml-convert -t ttl tests/data/valid/SubstanceSample-001.yaml -s src/chem_dcat_ap/schema/chem_dcat_ap.yaml -P "_base=https://search.nfdi4chem.de/dataset/" -C SubstanceSample - Convert a chemical reaction example conforming to ChemDCAT-AP's
ChemicalReactionuv run linkml-convert -t ttl tests/data/valid/ChemicalReaction-001.yaml -s src/chem_dcat_ap/schema/chem_dcat_ap.yaml -P "_base=https://search.nfdi4chem.de/dataset/" -C ChemicalReaction
````commandline
uv run mkdocs serve
````
````commandline
rm -rf docs/elements/*.md && uv run gen-doc -d docs/elements src/chem_dcat_ap/schema/chem_dcat_ap.yaml
````
This project was initially created with linkml-project-cookiecutter. and later migrated to linkml-project-copier.