Skip to main content

ontologos_ql/
lib.rs

1//! OWL QL conjunctive query answering and taxonomy hierarchy navigation.
2
3#![warn(missing_docs)]
4
5pub mod hierarchy;
6mod parse;
7mod query;
8pub mod rewrite;
9
10use ontologos_core::{Ontology, Taxonomy};
11use thiserror::Error;
12
13pub use hierarchy::TaxonomyHierarchy;
14pub use parse::{MAX_QUERY_ATOMS, MAX_QUERY_LEN, parse_conjunctive_query};
15pub use query::{ConjunctiveQuery, QueryAnswer, QueryAtom};
16pub use rewrite::rewrite_query;
17
18/// Result type for QL operations.
19pub type Result<T> = std::result::Result<T, Error>;
20
21/// QL query errors.
22#[derive(Debug, Error)]
23pub enum Error {
24    /// Unknown class in query.
25    #[error("unknown class in query: {0}")]
26    UnknownClass(String),
27    /// Parse error.
28    #[error("query parse error: {0}")]
29    Parse(String),
30    /// Query engine error.
31    #[error(transparent)]
32    Query(#[from] hierarchy::Error),
33}
34
35/// Answer a conjunctive query over a classified ontology.
36pub fn answer_query<'a>(
37    ontology: &'a Ontology,
38    taxonomy: &'a Taxonomy,
39    query: &ConjunctiveQuery,
40) -> Result<Vec<QueryAnswer>> {
41    let engine = hierarchy::TaxonomyHierarchy::new(ontology, taxonomy);
42    query::evaluate(&engine, ontology, query)
43}