use std::collections::HashMap;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Variable {
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Iri {
pub value: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Literal {
pub value: String,
pub language: Option<String>,
pub datatype: Option<Iri>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum Term {
Variable(Variable),
Iri(Iri),
Literal(Literal),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct TriplePattern {
pub subject: Term,
pub predicate: Term,
pub object: Term,
}
#[derive(Debug, Clone)]
pub enum Algebra {
Bgp(Vec<TriplePattern>),
Join {
left: Box<Algebra>,
right: Box<Algebra>,
},
Union {
left: Box<Algebra>,
right: Box<Algebra>,
},
}
#[derive(Debug, Clone)]
pub enum Expression {
Term(Term),
And(Box<Expression>, Box<Expression>),
Or(Box<Expression>, Box<Expression>),
Not(Box<Expression>),
}
pub type Solution = Vec<HashMap<Variable, Term>>;