linked_data_sparql/
lib.rs1mod construct_query;
20pub mod sparql_graph_store;
21mod sparql_query;
22mod to_construct_query;
23
24pub mod rdf_type_conversions;
25
26pub use crate::construct_query::ConstructQuery;
27pub use crate::sparql_query::SparqlQuery;
28pub use crate::to_construct_query::ToConstructQuery;
29pub use construct_query::and::And;
30pub use construct_query::join::Join;
31pub use construct_query::union::Union;
32pub use linked_data_sparql_derive::Sparql;
33use spargebra::Query;
34use spargebra::term::{NamedNode, Variable};
35
36pub mod reexport {
37 pub use spargebra;
38}
39
40impl<T> SparqlQuery for T
41where
42 T: ToConstructQuery,
43{
44 fn sparql_query_algebra() -> Query {
45 Self::to_query().into()
46 }
47}
48
49pub fn with_predicate<F>(
50 predicate: NamedNode,
51 to_query_with_binding: F,
52) -> impl FnOnce(Variable) -> ConstructQuery
53where
54 F: FnOnce(Variable) -> ConstructQuery,
55{
56 |subject| {
57 let object = Variable::new_unchecked(spargebra::term::BlankNode::default().into_string());
58
59 ConstructQuery::new(subject, predicate, object.clone()).join(to_query_with_binding(object))
60 }
61}