Skip to content

Query API Reference

Taxonomy navigation and conjunctive queries via ontologos-ql.

The ontologos-query crate is a deprecated shim — depend on ontologos-ql directly.

Overview

API Purpose
TaxonomyHierarchy Subclass/superclass navigation after EL or DL classification
answer_query OWL QL conjunctive query answering

Use after ElClassifier::classify, ontologos_facade::classify, or CLI/Python classification.

Hierarchy navigation (Rust)

use ontologos_el::ElClassifier;
use ontologos_parser::load_ontology;
use ontologos_ql::TaxonomyHierarchy;

let ontology = load_ontology(path)?;
let taxonomy = ElClassifier::new().classify(&ontology)?;
let hierarchy = TaxonomyHierarchy::new(&ontology, &taxonomy);

let class = hierarchy.lookup("http://example.org/Pizza").unwrap();
let subs = hierarchy.direct_subclasses(class)?;
let supers = hierarchy.direct_superclasses(class)?;
let subsumed = hierarchy.is_subsumed(sub, sup)?;
let instances = hierarchy.instances_of(class)?;
let types = hierarchy.types_of(individual)?;

TaxonomyHierarchy methods

Method Returns Description
new(ontology, taxonomy) TaxonomyHierarchy Build hierarchy view
lookup(iri) Option<EntityId> Resolve class IRI to entity ID
direct_subclasses(class) Vec<EntityId> Immediate subclasses in taxonomy
direct_superclasses(class) Vec<EntityId> Immediate superclasses
is_subsumed(sub, sup) bool Whether sub ⊑ sup in taxonomy
instances_of(class) Vec<EntityId> Individuals typed as class or subclass
types_of(individual) Vec<EntityId> Classes asserted on individual

Errors

Error Cause
UnknownEntity Entity ID missing or not a class/individual

Conjunctive queries (Rust)

use ontologos_ql::{answer_query, parse_conjunctive_query};

let query = parse_conjunctive_query("Type(?x, http://ex.org/A)")?;
let answers = answer_query(&ontology, &taxonomy, &query)?;

See CLI query subcommand and QL reference.

Python

After EL classification, use the taxonomy dict from classify() or the reasoner.taxonomy property:

from ontologos import Reasoner

reasoner = Reasoner(path="pizza.owl", profile="el")
taxonomy = reasoner.classify()
for sub, sup in taxonomy["subsumptions"][:5]:
    print(sub, "subClassOf", sup)

Optional DataFrame export:

from ontologos import Reasoner, subsumptions_to_pandas

report = Reasoner(path="pizza.owl", profile="el").classify()
df = subsumptions_to_pandas(report)  # pip install 'ontologos[pandas]'