Skip to main content

An OWL 2 RL reasoner with reasonable performance

Project description

Reasonable

Nightly Build Build PyPI version

An OWL 2 RL reasoner with reasonable performance

Performance

Comparing performance of reasonable with OWLRL and Allegro. Evaluation consisted of loading Brick models of different sizes into the respective reasoning engine and timing how long it took to produce the materialization. reasonable is about 7x faster than Allegro and 38x faster than OWLRL on this workload.

benchmark

How to Use

Python

To facilitate usage, we use the pyo3 project to generate Python 3.x bindings to this project. Installing these should be as easy as pip install reasonable.

See also the brickschema package for working with Brick models. The package provides a generic interface to this reasoner and several others.

Usage looks like:

import reasonable

# import triples from an rdflib Graph
import rdflib
g = rdflib.Graph()
g.parse("example_models/ontologies/Brick.n3", format="n3")
g.parse("example_models/small1.n3", format="n3")

r = reasonable.PyReasoner()
r.from_graph(g)
triples = r.reason()
print("from rdflib:", len(triples))

# import triples from files on disk
r = reasonable.PyReasoner()
r.load_file("example_models/ontologies/Brick.n3")
r.load_file("example_models/small1.n3")
triples = r.reason()
print("from files:", len(triples))

Rust

See Rust docs

Example of usage from Rust:

use ::reasonable::owl::Reasoner;
use std::env;
use std::time::Instant;
use log::info;

fn main() {
    env_logger::init();
    let mut r = Reasoner::new();
    env::args().skip(1).map(|filename| {
        info!("Loading file {}", &filename);
        r.load_file(&filename).unwrap()
    }).count();
    let reasoning_start = Instant::now();
    info!("Starting reasoning");
    r.reason();
    info!("Reasoning completed in {:.02}sec", reasoning_start.elapsed().as_secs_f64());
    r.dump_file("output.ttl").unwrap();
}

OWL 2 Rules

Using rule definitions from here.

TODO: implement RDF/RDFS entailment semantics as described here

Note: haven't implemented rules that produce exceptions; waiting to determine the best way of handling these errors.

Equality Semantics

Completed Rule name Notes
no eq-ref implementation is very inefficient; causes lots of flux
yes eq-sym
yes eq-trans
yes eq-rep-s
yes eq-rep-p
yes eq-rep-o
no eq-diff1 throws exception
no eq-diff2 throws exception
no eq-diff3 throws exception

Property Axiom Semantics

Completed Rule name Notes
no prp-ap
yes prp-dom
yes prp-rng
yes prp-fp
yes prp-ifp
yes prp-irp throws exception
yes prp-symp
yes prp-asyp throws exception
yes prp-trp
yes prp-spo1
no prp-spo2
yes prp-eqp1
yes prp-eqp2
yes prp-pdw throws exception
no prp-adp throws exception
yes prp-inv1
yes prp-inv2
no prp-key
no prp-npa1 throws exception
no prp-npa2 throws exception

Class Semantics

Completed Rule name Notes
yes cls-thing
yes cls-nothing1
yes cls-nothing2 throws exception
yes cls-int1
yes cls-int2
yes cls-uni
yes cls-com throws exception
yes cls-svf1
yes cls-svf2
yes cls-avf
yes cls-hv1
yes cls-hv2
no cls-maxc1 throws exception
no cls-maxc2
no cls-maxqc1 throws exception
no cls-maxqc2 throws exception
no cls-maxqc3
no cls-maxqc4
no cls-oo

Class Axiom Semantics

Completed Rule name Notes
yes cax-sco
yes cax-eqc1
yes cax-eqc2
yes cax-dw throws exception
no cax-adc throws exception

Other

  • no datatype semantics for now

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

reasonable-0.1.47_alpha11.tar.gz (1.5 MB view details)

Uploaded Source

Built Distributions

reasonable-0.1.47_alpha11-py3-none-win_amd64.whl (8.4 kB view details)

Uploaded Python 3 Windows x86-64

reasonable-0.1.47_alpha11-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl (6.5 kB view details)

Uploaded Python 3 manylinux: glibc 2.5+ x86-64

reasonable-0.1.47_alpha11-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (8.0 kB view details)

Uploaded Python 3 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

reasonable-0.1.47_alpha11-cp37-abi3-manylinux_2_24_x86_64.whl (438.6 kB view details)

Uploaded CPython 3.7+ manylinux: glibc 2.24+ x86-64

reasonable-0.1.47_alpha11-cp37-abi3-macosx_10_7_x86_64.whl (409.7 kB view details)

Uploaded CPython 3.7+ macOS 10.7+ x86-64

File details

Details for the file reasonable-0.1.47_alpha11.tar.gz.

File metadata

File hashes

Hashes for reasonable-0.1.47_alpha11.tar.gz
Algorithm Hash digest
SHA256 6de5d44c39c65b1c1646e306e972e7272822383417a464757fdbf7ef37fb80f2
MD5 54c6d60a93dcc825dc8cf0eaed23db1b
BLAKE2b-256 3241d4d8731229378526ae72582aef6120b81d38f4b062e1500c3541944974ec

See more details on using hashes here.

File details

Details for the file reasonable-0.1.47_alpha11-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for reasonable-0.1.47_alpha11-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 6fd56613ffedffb9f556570fcb6ebbd3bc31d85a9571d46882be94ca26cd37b9
MD5 6cc0f011a336fff48e62b478ee915361
BLAKE2b-256 e1d631ca31862af5389e87545999413116493b25f1b84f410f8b8dcd1ead6803

See more details on using hashes here.

File details

Details for the file reasonable-0.1.47_alpha11-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for reasonable-0.1.47_alpha11-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 cbf7af39785cf9932f0b62f7a2d67e73a159c0dbf5b11794ae3417d5e6a806cc
MD5 b4d04c71ab9e8bf0bf9647a6223cb685
BLAKE2b-256 df492131d94bd8387a8a10070e5450fb9af71dbfe9d43672b2fa177b764221ae

See more details on using hashes here.

File details

Details for the file reasonable-0.1.47_alpha11-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for reasonable-0.1.47_alpha11-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 f9d53f6db1b11db59732807da6584de3855f0837e5b22f39cec7926c4a6917fe
MD5 a4dbb761ae97f4023200436885029aa4
BLAKE2b-256 b6b79ff4f2a7b59a0a307673b3867111ba9a428501f31f3705abd75e0c6382dd

See more details on using hashes here.

File details

Details for the file reasonable-0.1.47_alpha11-cp37-abi3-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for reasonable-0.1.47_alpha11-cp37-abi3-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 10487a5129b3d352fb8f4f41521160d5c272ae578746106d90c7f8a068e8ff20
MD5 2e3850ed9d745e89e0014f1e4456b371
BLAKE2b-256 d9b5c91c7e5b56ca43f17f28c06f05e5d0b4abb28c22350fbffbab8d20dd7911

See more details on using hashes here.

File details

Details for the file reasonable-0.1.47_alpha11-cp37-abi3-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for reasonable-0.1.47_alpha11-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 26c7a2d8883b15f443718b15af84bd72f01f04c0b3505a5578505f0600a4eeaa
MD5 f5dab81750fb44c9178463a545aef56b
BLAKE2b-256 2347f8bcfb4da5c421e48d2d47c6531ff1051a1017a7ba096f1c4a19eab8764e

See more details on using hashes here.

Supported by

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