Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased¶
0.6.0 - 2026-06-12¶
Added¶
ontologos-explain:ProofGraph,build_proof_graph,explain_with_profile,explain_rdfs/explain_rl/explain_elInferenceTrace/TraceStepinontologos-corefor engine-agnostic explanation traces- EL completion trace recording (
ElRule, instrumentedCompletionGraph) - Query APIs:
explain_subsumption,explain_unsatisfiablewith EL-first HST pruning - Human-readable
render_textformatter for proof graphs - CLI
ontologos explain --profile auto|el|rl|rdfs(JSON + text output) - Conformance:
explain_benchmarks.rs(≥10 inferences across RDFS, RL, EL)
Changed¶
- RDFS/RL
MaterializationReport.tracesrenamed to.trace(InferenceTrace) - RL saturation merges RDFS traces into the combined RL trace
ReasonerConfig::explanationshonored on RL classify routes
Fixed¶
- RL report previously dropped RDFS inference traces during saturation
0.5.0 - 2026-06-12¶
Added¶
ontologos-el: OWL EL completion classifier (ElClassifier,classify_reasoner,classify_with_profile)ontologos-query: taxonomy query API (direct_subclasses,is_subsumed,equivalent_classes,unsatisfiable_classes)Taxonomytype inontologos-core(subsumptions, equivalences, unsatisfiable)- CLI
--profile el|rl|rdfs|autoonclassify; taxonomy JSON/text output for EL - Python
profile="el"/"auto";classify()returns taxonomy or materialization dict - Parser: decompose
SubClassOf(C, ObjectIntersectionOf(...))into EL axioms - HermiT
ClassificationTestpizza harness with vendored fixtures (benchmarks/data/hermit/) - Pizza EL golden conformance (
pizza-el-golden.json,compare-elk.shin CI) - Vendored
go-subset.owlEL performance gate (< 10s)
Changed¶
- Breaking: CLI
classifydefaults to--profile auto(EL/RL routing), not RDFS-only — usematerializeor--profile rdfsfor RDFS - Python package version aligned to 0.5.0
Fixed¶
- RL soundness: replace unsound upward existential
subClassOfpropagation with downward scm-spo1 - RL existential subsumption: compare asserted existentials only (avoids spurious inferences from property weakening)
- EL completion graph: seed
EquivalentObjectPropertiesat graph build time
Documentation¶
- OWL EL classification
- Migration v0.4.x → v0.5.0
- v0.5 capability matrix, architecture, conformance, and Python guide updates
0.4.0 - 2026-06-12¶
Added¶
- ABox in
ontologos-core:ClassAssertion,ObjectPropertyAssertion,SameIndividual,DifferentIndividuals,EquivalentObjectProperties,AsymmetricObjectProperty - Axiom indexes for individuals, property assertions,
sameAs, and equivalent properties - JSON snapshot v2 round-trip for new axiom variants;
OntologyBuilderABox helpers - Parser mapping for named ABox axioms and
AsymmetricObjectProperty/EquivalentObjectProperties ontologos-rl: OWL RL forward-chaining (RlEngine::saturate) on top of RDFS materializationontologos_rl::classify_reasoner/materialize_reasonerforProfile::Rl- HermiT Tier-A ports:
testSubsumption2/testSubsumption3(inlined existential encoding) - Family RL corpus test; optional
compare-reasonable.shharness for external diff
Changed¶
- Profile detection: mapped ABox constructs are allowed under OWL RL (family corpus → RL)
- Python
profile="rl"routes throughontologos_rl::classify_reasoner Reasoner::classify()withProfile::Rlreturns delegate hint (useontologos_rl)- CLI
classifyprints stderr note that it runs RDFS only;explainhidden from--helpuntil v0.6
Documentation¶
- Read the Docs site with adoption-focused guides (crates.io quick start, RDFS tutorial, capability matrix, glossary, performance, production integration)
- FAQ and onboarding fixes; README slimmed for evaluators
- MkDocs strict build enforced in CI
Published¶
- ontologos-core 0.4.0
- ontologos-parser 0.4.0
- ontologos-profile 0.4.0
- ontologos-rdfs 0.4.0
- ontologos-rl 0.4.0
0.3.1 - 2026-06-12¶
Changed¶
ontologos classifyemits the same inference report asmaterialize(status: classified, axiom counts, per-rule breakdown)- Clarified
Reasoner::classifydocumentation: CLI/Python useontologos_rdfsforProfile::Rdfs
Fixed¶
Reasoner::classify()withProfile::Rdfsreturns a delegate hint instead of genericNotImplemented- FAQ, load guide, and CLI reference updated for Pizza → DL profile detection
- Documented OWL import non-resolution, RDFS materialization scope, and batch fixed-point engine (vs worklist)
Published¶
- ontologos-core 0.3.1
- ontologos-parser 0.3.1
- ontologos-profile 0.3.1
- ontologos-rdfs 0.3.1
0.3.0 - 2026-06-12¶
Added¶
ontologos-rdfs: TBox RDFS materialization (subClassOf/subPropertyOfclosure, domain/range inheritance)MaterializationReportwith per-rule inference counts and optional tracesmaterialize_reasoner(&mut Reasoner)andclassify_reasoner(&mut Reasoner)forProfile::RdfsReasoner::ontology_mut()for in-place materializationOntologyBuilder::property_domain/property_rangehelpers- RDFS unit tests (including long transitive chains) and Family/Pizza corpus conformance tests
ontologos materializeCLI with text and JSON report output- DL profile diagnostics explaining mapped constructs that rule out EL/RL
- Python
Reasoner(path, profile="rdfs")for RDFS materialization viaclassify() ontologos-conformanceworkspace harness with HermiT Tier-A RDFS test ports (tests/hermit/)- HermiT replacement strategy doc (docs/internal/research/hermit-replacement.md)
Changed¶
RdfsEngine::materializenow takes&mut Ontologyand returns a structured reportReasoner::classifynow takes&mut self(delegates toontologos-rdfsfrom CLI/Python forProfile::Rdfs)ontologos classifyruns RDFS materialization (OWL EL/RL classification remains v0.5)- Workspace version bumped to 0.3.0
Fixed¶
- Parser path sandbox: reject prefix-bypass paths (
uploads_basevsuploads_base_evil) - Parser mapping: allow axioms at entity limit;
DeclareDatatypeno longer blocks class with same IRI - RDFS inference traces now record premise axiom ids
- Profile detection docs and Pizza corpus expectations aligned with DL classification (658 mapped axioms)
Published¶
- ontologos-core 0.3.0
- ontologos-parser 0.3.0
- ontologos-profile 0.3.0
- ontologos-rdfs 0.3.0 (new crate)
0.2.0 - 2026-06-11¶
Added¶
ontologos-parser: OWL/XML, RDF/XML, OWL Functional Syntax, and Turtle loading via horned-owl;ParseLimits;ParseMetaon loaded ontologiesontologos-profile: EL / RL / QL / DL profile detection with diagnostics- New axiom variants:
SubClassOfExistential,SymmetricObjectProperty,ReflexiveObjectProperty,FunctionalObjectProperty - Parser fixtures and manifest-driven integration tests (Pizza, Family)
benchmarks/scripts/download.shfor benchmark corpus download
Changed¶
ontologos profileloads OWL files and reports detected profileontologos_parser::load_ontologyis the supported file-load API (Ontology::from_fileremains a stub onontologos-core)- Pizza/Family benchmark corpora: Family ontology vendored in-repo; Pizza downloaded from owlcs/pizza-ontology
Published¶
- ontologos-parser and ontologos-profile on crates.io
0.1.0 - 2026-06-11¶
First release. Publishes ontologos-core to crates.io only; engine crates remain workspace-internal until implemented.
Added¶
- Adoption documentation: CONTRIBUTING, FAQ, docs index, JSON v2 schema, security guide, error reference, comparison guide, runnable
pizza_builderexample - Research notes under
docs/internal/research/(OWL 2, HermiT, ELK, RDFox) - Benchmark ontology manifest at
benchmarks/manifest.toml ontologos-corein-memory ontology model:InternPool/IriIdfor deduplicated absolute IRIsEntityRegistrywith kind validation- Structured
Axiomenum with validation AxiomStoreandAxiomIndexfor engine-ready lookupsOntologyfacade withOntologyBuilder- Versioned JSON serialization (
to_json/from_json) - Integration tests with
pizza_minimalfixture - Criterion benchmark for 10k-axiom serialize/deserialize
Changed¶
- JSON snapshot format bumped to version 2 (IRI-keyed entities and axioms; v1 rejected for untrusted input)
- Hardened deserialization: resource limits,
deny_unknown_fields, duplicate entity/axiom handling - IRI validation: allowlist (
http,https,urn), reject control characters and dangerous schemes detect_profilereturnsErr(NotImplemented)instead of empty success- CLI: propagate emit errors, human-readable
--format text, removed--format yaml - File loading routed through
ontologos-parser::load_ontologywith path validation - Hardened test suite: semantic JSON round-trip,
add_axiomindex wiring, axiom/IRI/entity edge cases, parser format detection, CLI smoke test Ontology::from_filenow returnsError::ParseNotAvailable(parsing lands in v0.2)- Breaking:
AxiomKindreplaced by structuredAxiomwith entity references