Skip to main content

SSNOlib is a Python library for working with the Standard Name Ontology (SSNO).

Project description

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

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ssnolib-2.2.0.2.tar.gz (71.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ssnolib-2.2.0.2-py3-none-any.whl (58.7 kB view details)

Uploaded Python 3

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

Hashes for ssnolib-2.2.0.2.tar.gz
Algorithm Hash digest
SHA256 5fd9104b5c33945cb3cc0fd5fe9ea0749e5c4057c225f2a384f2d6e126c20d7e
MD5 6a9210157c7f89be7d59cd8eb878d794
BLAKE2b-256 78773a16e7fa7ad2cc7031c2bcf419ae9169f5ec2503012d0e11f63d0a64c879

See more details on using hashes here.

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

Hashes for ssnolib-2.2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c076d4186a335fcdf7a1655858b90b00cbb8e67d4d04f3d2f9b5df8a5eb814f5
MD5 4c17970522a89402c4bc0d80f89227c2
BLAKE2b-256 d80b841e3b4b2d87d81d876e0424177b3edbf998faf24d6158fdae0e2e9a2589

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page