Skip to main content

Python bindings for the OntoLogos OWL reasoner — RDFS, OWL RL, and OWL EL classification

Project description

ontologos

PyPI Python Documentation License

Python bindings for OntoLogos — a Rust-native OWL reasoner for RDFS, OWL RL, OWL EL, OWL 2 DL, and SWRL on PyPI (1.1.2 published).

Install: pip install ontologos. Production profiles: rdfs, rl, el, auto, dl, swrl. Preview: alc, dl-preview. See Release status and Profile stability.

Load .owl / .ttl files or build ontologies in memory, run the same profile engines as the CLI, and export taxonomies to pandas or Polars. Powered by PyO3 and the stable Python ABI (abi3).

Full guide: ontologos.readthedocs.io — Python

Features

  • File or in-memoryReasoner(path=...) or Ontology / OntologyBuilder
  • Profiles"rdfs", "rl", "el", "auto", "dl", "swrl" on PyPI; "dl-preview", "alc" are preview
  • Classify — RDFS/RL materialization reports or EL taxonomy dicts
  • Explain — proof graph dicts with IRI-resolved conclusions (EL full traces)
  • Incremental — multi-pass add_subclass_of / remove_subclass_of with incremental=True
  • Export — optional subsumptions_to_pandas / subsumptions_to_polars

Install

Requires Python 3.10+.

pip install ontologos

Optional DataFrame helpers:

pip install 'ontologos[pandas]'
pip install 'ontologos[polars]'

Pre-built wheels are published for:

OS Architectures
Linux x86_64, aarch64 (manylinux)
macOS x86_64, aarch64
Windows x64, aarch64

One abi3 wheel per platform covers Python 3.10–3.13+. If no wheel matches, build from source (Rust + maturin).

Quick start

Download Pizza for EL examples (from a clone: ./benchmarks/scripts/download.sh at repo root):

# From repository clone only:
./benchmarks/scripts/download.sh

Classify an OWL file

import ontologos

# OWL EL taxonomy
reasoner = ontologos.Reasoner(path="pizza.owl", profile="el")
taxonomy = reasoner.classify()
print(taxonomy["subsumption_count"], taxonomy["subsumptions"][:3])

# RDFS materialization
reasoner = ontologos.Reasoner(path="ontology.owl", profile="rdfs")
report = reasoner.classify()
print(report["inferred_axioms"])

# Auto-detect profile (EL or RL)
reasoner = ontologos.Reasoner(path="ontology.owl", profile="auto")
result = reasoner.classify()

Build in memory

from ontologos import OntologyBuilder, Reasoner

builder = OntologyBuilder()
builder.add_class("http://example.org/A")
builder.add_class("http://example.org/B")
builder.subclass_of("http://example.org/A", "http://example.org/B")
ontology = builder.build()

reasoner = Reasoner(ontology=ontology, profile="el")
taxonomy = reasoner.classify()

Load from JSON dict instead of the builder (v2 or v3; writers on workspace 1.1.2 emit v3):

from ontologos import Ontology, Reasoner

ontology = Ontology.from_dict({
    "format_version": 2,
    "entities": [
        {"iri": "http://example.org/A", "kind": "Class"},
        {"iri": "http://example.org/B", "kind": "Class"},
    ],
    "axioms": [
        {"SubClassOf": {
            "subclass": "http://example.org/A",
            "superclass": "http://example.org/B",
        }}
    ],
})
reasoner = Reasoner(ontology=ontology, profile="el")
reasoner.classify()

Incremental edits

reasoner = Reasoner(ontology=ontology, profile="el", incremental=True)
reasoner.classify()

reasoner.add_subclass_of("http://example.org/B", "http://example.org/C")
reasoner.classify()  # re-classify with warm session

reasoner.remove_subclass_of("http://example.org/A", "http://example.org/B")
reasoner.classify()

Explain inferences

graph = reasoner.explain()
print(graph["node_count"])
for node in graph["nodes"][:5]:
    print(node["rule"], node.get("conclusion_sub"))
Profile Explain coverage
EL Full inference traces
RL / RDFS Asserted axioms seeded; inferred steps lack per-rule premises until upstream exposes traces
auto Routes like classify

Export to DataFrame

from ontologos import subsumptions_to_pandas

df = subsumptions_to_pandas(taxonomy)
# columns: subclass, superclass

API overview

Type / method Description
Reasoner(path=..., profile=..., incremental=False) Load OWL file and classify
Reasoner(ontology=..., ...) Classify in-memory ontology
reasoner.classify() Run engine; returns taxonomy or materialization dict
reasoner.explain() Proof graph dict (node_count, nodes, parse_meta)
reasoner.taxonomy Last EL taxonomy (after classify)
reasoner.parse_meta Parser warnings and axiom counts
reasoner.add_subclass_of / remove_subclass_of Incremental axiom edits
reasoner.add_axiom_json Add axiom via JSON object (v2/v3 shape)
Ontology.from_json / from_dict Load JSON snapshot (v2 or v3)
OntologyBuilder Fluent builder → build()
subsumptions_to_pandas / subsumptions_to_polars Optional taxonomy export

Invalid profiles and unsupported constructs raise RuntimeError with a message string.

Reasoner is not thread-safe — do not mutate from multiple threads.

Development

From a repository clone:

cd crates/ontologos-py
python -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install 'maturin>=1.7,<2.0' pytest '.[pandas]'
maturin develop --release
pytest tests/ -q

Pizza EL golden test (requires corpus):

./benchmarks/scripts/download.sh   # from repo root
pytest tests/test_pizza_golden.py -q

What OntoLogos is (and is not)

OntoLogos is an orchestration layer: profile detection, a unified ontology model, CLI, Python wheels, and security limits on top of in-house EL, ontologos-dl for OWL 2 DL, and reasonable for RL/RDFS. It maps a subset of OWL — validate on your corpus before production cutover.

For engine-only workflows, consider reasonable, whelk-rs, or horned-owl directly.

Links

Resource URL
Python guide readthedocs — Python
Getting started readthedocs
Migration v0.9 → v1.0 migration guide
Repository github.com/eddiethedean/ontologos
Rust crates crates.io — ontologos-core
Changelog CHANGELOG.md

License

Licensed under either of Apache-2.0 or MIT.

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

ontologos-1.1.2.tar.gz (426.0 kB view details)

Uploaded Source

Built Distributions

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

ontologos-1.1.2-cp310-abi3-win_arm64.whl (2.4 MB view details)

Uploaded CPython 3.10+Windows ARM64

ontologos-1.1.2-cp310-abi3-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.10+Windows x86-64

ontologos-1.1.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB view details)

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

ontologos-1.1.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

ontologos-1.1.2-cp310-abi3-macosx_11_0_arm64.whl (2.7 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

ontologos-1.1.2-cp310-abi3-macosx_10_12_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file ontologos-1.1.2.tar.gz.

File metadata

  • Download URL: ontologos-1.1.2.tar.gz
  • Upload date:
  • Size: 426.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for ontologos-1.1.2.tar.gz
Algorithm Hash digest
SHA256 275421f78cae8906ac244012058d2f9b6f306bcb24b75167f16f272011234c31
MD5 8185e98c44db39c49decf0e0dd5ce62f
BLAKE2b-256 42322081bc82b33fbdb4a83d732ad10992822ef4fe2317f4d9d04b004a88eb4d

See more details on using hashes here.

File details

Details for the file ontologos-1.1.2-cp310-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for ontologos-1.1.2-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 58568b0263a4ebf86bfc82398b1fdba449a61380e2bdc8aa46e695e415656fc1
MD5 169afdce68f3233ee95f62f5c3fcc689
BLAKE2b-256 57ef9980c41900b48b433131413578c1f1c2a6b0bb7a98251e0affaaaa4ee82a

See more details on using hashes here.

File details

Details for the file ontologos-1.1.2-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for ontologos-1.1.2-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 e2fdb960f9818c7cb141d0462d39c42f0171f0a69969839db779ccf3632defa3
MD5 2d5664739944a8c9bd7d02b3f8496dcc
BLAKE2b-256 a04e691db8ec281291927d449937114a7a4a25be24856aa4a2ffc72809052621

See more details on using hashes here.

File details

Details for the file ontologos-1.1.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ontologos-1.1.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 13b6f1af63cb5f9f61ee45e3800e489f09032bbf7ddc9f383d95076c723540ed
MD5 51f2369a7cb2bc3993ec4b6073c22766
BLAKE2b-256 a5a1824cfa6349470aa2921d3b6f50d13bc779ded81b7062de9d15f690bf530e

See more details on using hashes here.

File details

Details for the file ontologos-1.1.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ontologos-1.1.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5f613f9b5a3184d172ee324300eb47162212ce1e56b99cf0b3696f4701022e67
MD5 6d5c03b251f2c131648b2fb03e93222b
BLAKE2b-256 037829e9b302f55b9d00b5101797f39ef38d6937f7690883bf041e735a70afbc

See more details on using hashes here.

File details

Details for the file ontologos-1.1.2-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ontologos-1.1.2-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 10e996f3bbfe1cc1f5992d595fd0c73013ad06590666dcd7ab7aa70449bea5a0
MD5 f1720a55b4c3295b2dc2657d2a1bf78d
BLAKE2b-256 6ba00b58f46d322724af4f83f3e8091505edcabf1588f60cdbefa1a35eb6d58b

See more details on using hashes here.

File details

Details for the file ontologos-1.1.2-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ontologos-1.1.2-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 618e7e8274ce799d805a20231af7c78782c5e7ccb92039b7974995d783d7e0e0
MD5 c570a6a53487a3138e7d2032e9e64e4f
BLAKE2b-256 c23cf1d27c61c1e965e8c19788d971b989c6d3031c9dc11a0e6aa8dcdaf53a1f

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