shacl_validation/constraints/core/value_range/
min_inclusive.rs1use crate::constraints::constraint_error::ConstraintError;
2use crate::constraints::NativeValidator;
3use crate::constraints::SparqlValidator;
4use crate::helpers::constraint::validate_ask_with;
5use crate::validation_report::result::ValidationResult;
6use crate::value_nodes::ValueNodes;
7use indoc::formatdoc;
8use shacl_ast::compiled::component::CompiledComponent;
9use shacl_ast::compiled::component::MinInclusive;
10use shacl_ast::compiled::shape::CompiledShape;
11use srdf::Query;
12use srdf::Sparql;
13use std::fmt::Debug;
14
15impl<S: Query + Debug + 'static> NativeValidator<S> for MinInclusive<S> {
16 fn validate_native(
17 &self,
18 _component: &CompiledComponent<S>,
19 _shape: &CompiledShape<S>,
20 _store: &S,
21 _value_nodes: &ValueNodes<S>,
22 _source_shape: Option<&CompiledShape<S>>,
23 ) -> Result<Vec<ValidationResult>, ConstraintError> {
24 Err(ConstraintError::NotImplemented("MinInclusive".to_string()))
25 }
26}
27
28impl<S: Sparql + Debug + 'static> SparqlValidator<S> for MinInclusive<S> {
29 fn validate_sparql(
30 &self,
31 component: &CompiledComponent<S>,
32 shape: &CompiledShape<S>,
33 store: &S,
34 value_nodes: &ValueNodes<S>,
35 _source_shape: Option<&CompiledShape<S>>,
36 ) -> Result<Vec<ValidationResult>, ConstraintError> {
37 let min_inclusive_value = self.min_inclusive().clone();
38
39 let query = |value_node: &S::Term| {
40 formatdoc! {
41 " ASK {{ FILTER ({} <= {}) }} ",
42 value_node, min_inclusive_value
43 }
44 };
45
46 validate_ask_with(component, shape, store, value_nodes, query)
47 }
48}