ssnolib: Library for the Simple Standard Name Ontology (SSNO)
A Python library to work with the SSNO ontology. It provides Python classes for ontology concepts and facilitates the creation of RDF files (JSON-LD, TTL, XML). RDF files are both human- and machine-readable, and most importantly, machine-actionable. The library can be integrated into your data (conversion) pipelines.
Features
- Python classes for all SSNO ontology concepts
- Easy creation and export of JSON-LD, TTL, and XML files
- Support for Standard Name Tables (SNT)
- Extensible for HDF5, XML, and YAML formats
- Local web apps (Streamlit, Flask) for management and enrichment
- Compatible with Python 3.9–3.13
- Comprehensive documentation and tutorials
Note: The library version matches the supported ontology version. For example, 1.5.0.1 refers to ontology version 1.5.0 and patch version .1 of the library.
Installation
Install the core library:
pip install ssnolib
For development:
git clone https://github.com/matthiasprobst/ssnolib.git
cd ssnolib
pip install -e .[dev]
Quickstart
Describe a Standard Name and dump it to Turtl
import ssnolib
air_temp = ssnolib.StandardName(
standardName='air_temperature',
unit='K',
description='Air temperature is the bulk temperature of the air, not the surface (skin) temperature.@en')
with open('air_temperature.jsonld', 'w') as f:
f.write(air_temp.model_dump_ttl())
The serialized TTL file looks like this:
@prefix ssno: <https://matthiasprobst.github.io/ssno#> .
[] a ssno:StandardName ;
ssno:description "Air temperature is the bulk temperature of the air, not the surface (skin) temperature."@en ;
ssno:standardName "air_temperature" ;
ssno:unit <http://qudt.org/vocab/unit/K> .
Describe Standard Name Tables
A Standard Name Table (SNT) defines Standard Names and exists as an RDF file
(usually in TTL, XML, or JSON-LD format). The SNT itself is modeled by ssnolib.StandardNameTable. In the
following example, we define a SNT with one Standard Name (air_temperature) which is stored in a dcat:Dataset with one dcat:Distribution.
The distribution points to a TTL file containing the SNT, which can be downloaded.
import ssnolib
from ssnolib.dcat import Dataset, Distribution
distribution = Distribution(
title='TTL Table@en',
downloadURL='https://example.org/cf-standard-name-table.ttl',
mediaType='text/turtle'
)
snt_dataset = Dataset(
title='CF Standard Name Table Dataset@en',
description='The CF Standard Name Table is a controlled vocabulary for climate and forecast metadata.@en',
distribution=distribution
)
snt = ssnolib.StandardNameTable(
id="https://doi.org/10.5281/zenodo.12345678",
title='CF Standard Name Table (latest version)@en',
dataset=snt_dataset,
created="2023-10-10",
standardNames=[air_temp,]
)
The serialized version in TTL format can be obtained by:
print(snt.serialize("ttl", base_uri="https://example.org#"))
which results in:
@prefix dcat: <http://www.w3.org/ns/dcat#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix ssno: <https://matthiasprobst.github.io/ssno#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<https://doi.org/10.5281/zenodo.12345678> a ssno:StandardNameTable ;
dcterms:created "2023-10-10"^^xsd:date ;
dcterms:title "CF Standard Name Table (latest version)"@en ;
ssno:dataset <https://example.org/#N2f15bceee1cf431688c375b242d2c61b> ;
ssno:standardNames <https://example.org/#N5542e225237745dfa57de897543fa5c8> .
<https://example.org/#N2f15bceee1cf431688c375b242d2c61b> a dcat:Dataset ;
dcterms:description "The CF Standard Name Table is a controlled vocabulary for climate and forecast metadata."@en ;
dcterms:title "CF Standard Name Table Dataset"@en ;
dcat:distribution <https://example.org/#Ncd83fad310144161b45f7c466d6fd7cc> .
<https://example.org/#N5542e225237745dfa57de897543fa5c8> a ssno:StandardName ;
ssno:description "Air temperature is the bulk temperature of the air, not the surface (skin) temperature."@en ;
ssno:standardName "air_temperature" ;
ssno:unit <http://qudt.org/vocab/unit/K> .
<https://example.org/#Ncd83fad310144161b45f7c466d6fd7cc> a dcat:Distribution ;
dcterms:title "TTL Table"@en ;
dcat:downloadURL <https://example.org/cf-standard-name-table.ttl> ;
dcat:mediaType <https://www.iana.org/assignments/media-types/text/turtle> .
Web App Usage
Two simple web-apps exist to manage Standard Name Tables and to semantically enrich HDF5 files with Standard Names.
- A Streamlit app to semantically enrich HDF5 files (requires
hdfextra) - A Flask app to create and manage Standard Name Tables (requires
appextra)
Install the library with the required extras:
pip install ssnolib[app,hdf]
To start the GUI:
ssnolib --h5sn
or
ssnolib --app
This will start a local development server at https://127.0.0.1:5000/.
Note: The web app is work in progress. Do not expose it to the public. Feedback and contributions are welcome!
Testing
To run tests:
pytest tests
Contribution
Contributions are welcome! Please open an issue or pull request. Guidelines:
- Write clear commit messages
- Add tests for new features
- Document changes in CHANGELOG.md
Citation
Please cite this project using the CITATION.cff.
License
This project is licensed under the MIT License.
Support & Contact
- Report issues: GitHub Issues
- Questions & feedback: matth.probst@gmail.com
Metadata
Release files for ssnolib 2.2.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ssnolib-2.2.0.3.tar.gz | 75.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ssnolib-2.2.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 166.5 kB
Release files / ssnolib-2.2.0.3.tar.gz
| Download URL | ssnolib-2.2.0.3.tar.gz |
|---|---|
| Size | 75.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
25940dbc32512fe69c5626c5fde26dba7ca4cf59c8a61b9533814e0d62faf772
|
|
BLAKE2b-256 checksum How to use checksums |
f507d8aad91a6b5ecefc4ecf5bfb56c4510e80a1591f5230cfa4b64d98b34fe9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.0.1 CPython/3.11.11
|
Release files / ssnolib-2.2.0.3-py3-none-any.whl
| Download URL | ssnolib-2.2.0.3-py3-none-any.whl |
|---|---|
| Size | 91.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3fe21e42fd8b61f431cf17fd177071a3d98435e7401d6b512e2c11505b6a4721
|
|
BLAKE2b-256 checksum How to use checksums |
411be005e4ad839ee1a241d30fea832d8a39f6426aa82d8e6d18b075305379ef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.0.1 CPython/3.11.11
|