Skip to main content

ssnolib: Library for the Simple Standard Name Ontology (SSNO)

Tests Coverage Python Versions SSNO Version License

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.

  1. A Streamlit app to semantically enrich HDF5 files (requires hdf extra)
  2. A Flask app to create and manage Standard Name Tables (requires app extra)

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

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)

Source distribution for ssnolib 2.2.0.3
File Size Uploaded
ssnolib-2.2.0.3.tar.gz 75.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ssnolib 2.2.0.3
File Interpreter ABI Platform
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
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page