Skip to main content

Python bindings for the OntoEnv Rust library. Manages ontology-based environments for building knowledge graphs.

Project description

OntoEnv Python Bindings

Installation

pip install ontoenv

Usage

from ontoenv import OntoEnv
from rdflib import Graph

# creates a new environment in the current directory, or loads
# an existing one. To use a different directory, pass the 'path'
# argument: OntoEnv(path="/path/to/env")
# OntoEnv() will discover ontologies in the current directory and
# its subdirectories
env = OntoEnv()

# add an ontology from a file path.
# env.add returns the name of the ontology, which is its URI
# e.g. "https://brickschema.org/schema/1.4-rc1/Brick"
brick_name = env.add("../brick/Brick.ttl")
print(f"Added ontology {brick_name}")

# When you add from a URL whose declared ontology name differs (for example a
# versioned IRI served at a versionless URL), ontoenv records that alias. You
# can later refer to the ontology by either the canonical name or the original
# URL when resolving imports or querying.

# get the graph of the ontology we just added
# env.get_graph returns an rdflib.Graph
brick_graph = env.get_graph(brick_name)
print(f"Brick graph has {len(brick_graph)} triples")

# get the full closure of the ontology, including all of its imports
# returns a tuple (rdflib.Graph, list[str])
brick_closure_graph, _ = env.get_closure(brick_name)
print(f"Brick closure has {len(brick_closure_graph)} triples")

# you can also add ontologies from a URL
rec_name = env.add("https://w3id.org/rec/rec.ttl")
rec_graph = env.get_graph(rec_name)
print(f"REC graph has {len(rec_graph)} triples")

# you can add an in-memory rdflib.Graph directly
in_memory = Graph()
in_memory.parse(data="""
@prefix owl: <http://www.w3.org/2002/07/owl#> .
<http://example.com/in-memory> a owl:Ontology .
""", format="turtle")
in_memory_name = env.add(in_memory)
print(f"Added in-memory ontology {in_memory_name}")

# if you have an rdflib.Graph with an owl:Ontology declaration,
# you can transitively import its dependencies into the graph
g = Graph()
# this graph just has one triple: the ontology declaration for Brick
g.parse(data="""
@prefix owl: <http://www.w3.org/2002/07/owl#> .
<https://brickschema.org/schema/1.4-rc1/Brick> a owl:Ontology .
""")
# this will load all of the owl:imports of the Brick ontology into 'g'
env.import_dependencies(g)
print(f"Graph with imported dependencies has {len(g)} triples")

Namespace prefixes

OntoEnv can extract namespace prefix mappings from ontology source files. Prefixes come from both parser-level declarations (@prefix in Turtle, PREFIX in SPARQL-style syntaxes) and SHACL sh:declare entries.

# Get all namespaces across the entire environment
all_ns = env.get_namespaces()
# {'owl': 'http://www.w3.org/2002/07/owl#', 'brick': 'https://brickschema.org/schema/Brick#', ...}

# Get namespaces for a single ontology
ns = env.get_namespaces("https://brickschema.org/schema/1.4-rc1/Brick")

# Include namespaces from transitive owl:imports
ns_with_imports = env.get_namespaces("https://brickschema.org/schema/1.4-rc1/Brick", include_closure=True)

From the CLI:

ontoenv namespaces                                     # all namespaces
ontoenv namespaces https://example.org/my-ontology     # single ontology
ontoenv namespaces https://example.org/my-ontology --closure   # with imports
ontoenv namespaces --json                              # JSON output

Custom graph store

If you want OntoEnv to write graphs into an existing Python-backed store, pass a graph_store object that implements a small protocol:

class GraphStore:
    def add_graph(self, iri: str, graph: Graph, overwrite: bool = False) -> None: ...
    def get_graph(self, iri: str) -> Graph: ...
    def remove_graph(self, iri: str) -> None: ...
    def graph_ids(self) -> list[str]: ...
    def size(self) -> dict[str, int]: ...  # optional, returns {"num_graphs": ..., "num_triples": ...}

Example:

store = DictGraphStore()
env = OntoEnv(graph_store=store, temporary=True)

graph_store is currently incompatible with recreate and create_or_use_cached.

RDFLib store with Rust SPARQL

If you want to use ontoenv as an rdflib store directly, use OntoEnvStore. This gives you normal rdflib.Graph and rdflib.Dataset objects, but executes SPARQL through the Rust backend instead of rdflib's Python query engine.

Use env.snapshot_as_dataset() to get a read-only rdflib.Dataset view of the env. The default backend="auto" picks the zero-copy rdf5d snapshot when a persistent .ontoenv/store.r5tu exists and otherwise falls back to an in-memory copy. Pass backend="rdf5d" to require the fast path (raises for temporary or graph_store= envs) or backend="copy" to always materialize.

from rdflib import URIRef
from ontoenv import OntoEnv

env = OntoEnv(path=".demo-env", recreate=True, offline=True, search_directories=["./brick"])
brick_name = env.add("./brick/Brick.ttl")
env.update()
env.flush()

dataset = env.snapshot_as_dataset()

for row in dataset.query(
    """
    SELECT ?entity ?label
    WHERE {
      GRAPH <https://brickschema.org/schema/1.4/Brick> {
        ?entity <http://www.w3.org/2000/01/rdf-schema#label> ?label .
      }
    }
    LIMIT 5
    """
):
    print(row.entity, row.label)

brick_graph = dataset.graph(URIRef(brick_name))
print(len(brick_graph))
env.close()

Importing ontoenv also registers the rdflib plugin name "ontoenv", so this works too:

from rdflib import Graph
import ontoenv

graph = Graph(store="ontoenv")

See demo_rdflib_store.py for a complete runnable example.

CLI Entrypoint

Installing ontoenv also provides the Rust-backed ontoenv command-line tool:

pip install ontoenv
ontoenv --help

The CLI is identical to the standalone ontoenv-cli binary; see the top-level README for usage.

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

ontoenv-0.5.5.tar.gz (1.2 MB view details)

Uploaded Source

Built Distributions

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

ontoenv-0.5.5-cp311-abi3-win_amd64.whl (6.3 MB view details)

Uploaded CPython 3.11+Windows x86-64

ontoenv-0.5.5-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (64.0 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ x86-64

ontoenv-0.5.5-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (62.9 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ ARM64

ontoenv-0.5.5-cp311-abi3-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

ontoenv-0.5.5-cp311-abi3-macosx_10_14_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.11+macOS 10.14+ x86-64

ontoenv-0.5.5-cp311-abi3-macosx_10_14_x86_64.macosx_11_0_arm64.macosx_10_14_universal2.whl (14.4 MB view details)

Uploaded CPython 3.11+macOS 10.14+ universal2 (ARM64, x86-64)macOS 10.14+ x86-64macOS 11.0+ ARM64

File details

Details for the file ontoenv-0.5.5.tar.gz.

File metadata

  • Download URL: ontoenv-0.5.5.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ontoenv-0.5.5.tar.gz
Algorithm Hash digest
SHA256 dca666f3b3e34db4505f799cb1cb3b2404f2bea99dd92d29df8bde0631bf4cd7
MD5 5bb56fd64fd29e413fa09dfa502e864f
BLAKE2b-256 78fc201810f6f72d65528d9b21d818f92ece80f2f931c8ee3af9a19de237771e

See more details on using hashes here.

File details

Details for the file ontoenv-0.5.5-cp311-abi3-win_amd64.whl.

File metadata

  • Download URL: ontoenv-0.5.5-cp311-abi3-win_amd64.whl
  • Upload date:
  • Size: 6.3 MB
  • Tags: CPython 3.11+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ontoenv-0.5.5-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 07a16edcf8e09177f9c4692d8999e0bbb957cee9f7488a5713757d21a10ba37f
MD5 698961d68040aca8b1565d9d9f6a5d89
BLAKE2b-256 ed0d7c128b132b155af85585cc6d421ea94c9aa693f2421d68035230dacbef6e

See more details on using hashes here.

File details

Details for the file ontoenv-0.5.5-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ontoenv-0.5.5-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3c2209ac90aa022b857323b77a2b95046b75af2a238a7695165a0adca60a7b8d
MD5 3050ea2b26b9e7c478804071ef3d8c4b
BLAKE2b-256 340e6a80aad3a0a66ed1faada6c287c6bcf988f4051c20d25615119c76b6b377

See more details on using hashes here.

File details

Details for the file ontoenv-0.5.5-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ontoenv-0.5.5-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 20620552f56c64163ca41c9e16b607c285e8b90eef910149521030bb5d2fe054
MD5 ad25696ea34835386465148239c0f337
BLAKE2b-256 48d2405be0c75105a6a02a8fc6f9055cf7edeca980246567e0f30487e177fff2

See more details on using hashes here.

File details

Details for the file ontoenv-0.5.5-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ontoenv-0.5.5-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c01d17adafbdd4faf9cf9aee9e4e3cf449d35fdfc126fd2da12d4e9910242812
MD5 acefafdd2dad77c46254a4378aaac475
BLAKE2b-256 3a02b44b33c6f13b933716b8d9937f722e344ac367d812468919977d642a0005

See more details on using hashes here.

File details

Details for the file ontoenv-0.5.5-cp311-abi3-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for ontoenv-0.5.5-cp311-abi3-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 bf2dc37ba7f3e40fc2fb8e5a38af8b3b0c39e3dfd5fa2a08f0755d2d5b2583d3
MD5 0e6a24b363e7b95a33a5a7a2ae6120ff
BLAKE2b-256 02e523697646e41d49b14c3d03589faa1ec3bcfd7dd54948f9c5ad5397c4fee8

See more details on using hashes here.

File details

Details for the file ontoenv-0.5.5-cp311-abi3-macosx_10_14_x86_64.macosx_11_0_arm64.macosx_10_14_universal2.whl.

File metadata

File hashes

Hashes for ontoenv-0.5.5-cp311-abi3-macosx_10_14_x86_64.macosx_11_0_arm64.macosx_10_14_universal2.whl
Algorithm Hash digest
SHA256 ff19faa8712d08bbf003f8740b0547901e4d53368db4d091d2d884dd78c57bb5
MD5 6f30fb4c0c396bcd8bc232907258c563
BLAKE2b-256 dea14be83c9278258225490e83f9e5d2871789889e6043677627b3d863ebaa85

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