SSNOlib is a Python library for working with the Standard Name Ontology (SSNO).
Project description
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
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ssnolib-2.2.0.2.tar.gz.
File metadata
- Download URL: ssnolib-2.2.0.2.tar.gz
- Upload date:
- Size: 71.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5fd9104b5c33945cb3cc0fd5fe9ea0749e5c4057c225f2a384f2d6e126c20d7e
|
|
| MD5 |
6a9210157c7f89be7d59cd8eb878d794
|
|
| BLAKE2b-256 |
78773a16e7fa7ad2cc7031c2bcf419ae9169f5ec2503012d0e11f63d0a64c879
|
File details
Details for the file ssnolib-2.2.0.2-py3-none-any.whl.
File metadata
- Download URL: ssnolib-2.2.0.2-py3-none-any.whl
- Upload date:
- Size: 58.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c076d4186a335fcdf7a1655858b90b00cbb8e67d4d04f3d2f9b5df8a5eb814f5
|
|
| MD5 |
4c17970522a89402c4bc0d80f89227c2
|
|
| BLAKE2b-256 |
d80b841e3b4b2d87d81d876e0424177b3edbf998faf24d6158fdae0e2e9a2589
|