1#![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
18pub type Result<T> = std::result::Result<T, Error>;
20
21#[derive(Debug, Error)]
23pub enum Error {
24 #[error("unknown class in query: {0}")]
26 UnknownClass(String),
27 #[error("query parse error: {0}")]
29 Parse(String),
30 #[error(transparent)]
32 Query(#[from] hierarchy::Error),
33}
34
35pub 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}