Class: SHACL::Algebra::QualifiedValueConstraintComponent
- Inherits:
-
Operator
- Object
- SPARQL::Algebra::Operator
- Operator
- SHACL::Algebra::QualifiedValueConstraintComponent
- Defined in:
- vendor/bundler/ruby/3.3.0/bundler/gems/shacl-e638b9acc6d8/lib/shacl/algebra/qualified_value.rb
Constant Summary collapse
- NAME =
:qualifiedValueShape
Constants inherited from Operator
Operator::BUILTIN_KEYS, Operator::PARAMETERS
Constants included from RDF::Util::Logger
Constants inherited from SPARQL::Algebra::Operator
SPARQL::Algebra::Operator::ARITY, SPARQL::Algebra::Operator::IsURI, SPARQL::Algebra::Operator::URI
Constants included from SPARQL::Algebra::Expression
SPARQL::Algebra::Expression::PATTERN_PARENTS
Instance Attribute Summary
Attributes inherited from Operator
#graph, #options, #shapes_graph
Attributes inherited from SPARQL::Algebra::Operator
Instance Method Summary collapse
-
#conforms(node, path:, value_nodes:, depth: 0, **options) ⇒ Array<SHACL::ValidationResult>
Specifies the condition that a specified number of value nodes conforms to the given shape.
Methods inherited from Operator
add_component, apply_op, #comment, component_params, #deactivated?, from_expanded_value, from_json, #id, iri, #iri, #label, #not_satisfied, params, parse_path, #satisfy, to_rdf, #to_sxp_bin, #type
Methods included from JSON::LD::Utils
#add_value, #as_array, #as_resource, #blank_node?, #compare_values, #graph?, #has_value?, #index?, #list?, #node?, #node_or_ref?, #node_reference?, #property?, #simple_graph?, #value?
Methods included from RDF::Util::Logger
#log_debug, #log_depth, #log_error, #log_fatal, #log_info, #log_recover, #log_recovering?, #log_statistics, #log_warn, #logger
Methods inherited from SPARQL::Algebra::Operator
#aggregate?, arity, base_uri, #base_uri, base_uri=, #bind, #boolean, #constant?, #deep_dup, #each_descendant, #eql?, #evaluatable?, evaluate, #executable?, #first_ancestor, for, #formulae, #initialize, #inspect, #mergable?, #ndvars, #node?, #operand, #optimize, #optimize!, #parent, #parent=, prefixes, #prefixes, prefixes=, #rewrite, #to_binary, #to_sparql, to_sparql, #to_sxp, #to_sxp_bin, #validate!, #variable?, #variables, #vars
Methods included from SPARQL::Algebra::Expression
cast, #constant?, #evaluate, extension, extension?, extensions, for, #invalid?, new, #node?, open, #optimize, #optimize!, parse, register_extension, #to_sxp_bin, #valid?, #validate!, #variable?
Constructor Details
This class inherits a constructor from SPARQL::Algebra::Operator
Instance Method Details
#conforms(node, path:, value_nodes:, depth: 0, **options) ⇒ Array<SHACL::ValidationResult>
Specifies the condition that a specified number of value nodes conforms to the given shape. Each sh:qualifiedValueShape
can have: one value for sh:qualifiedMinCount
, one value for sh:qualifiedMaxCount
or, one value for each, at the same subject.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/shacl-e638b9acc6d8/lib/shacl/algebra/qualified_value.rb', line 14 def conforms(node, path:, value_nodes:, depth: 0, **) log_debug(NAME, depth: depth) {SXP::Generator.string({node: node, value_nodes: value_nodes}.to_sxp_bin)} # Separate operands into operators and parameters params, ops = operands.partition {|o| o.is_a?(Array) && o.first.is_a?(Symbol)} params = params.inject({}) {|memo, a| memo.merge(a.first => a.last)} max_count = params[:qualifiedMinCount] min_count = params[:qualifiedMinCount] # FIXME: figure this out disjoint = !!params[:qualifiedValueShapesDisjoint] ops.map do |op| results = value_nodes.map do |n| op.conforms(n, depth: depth + 1, **) end.flatten.compact count = results.select(&:conform?).length log_debug(NAME, depth: depth) {"#{count}/#{results} conforming shapes"} if min_count && count < min_count.to_i not_satisfied(focus: node, path: path, message: "only #{count} conforming values, requires at least #{min_count}", resultSeverity: .fetch(:severity), component: RDF::Vocab::SHACL.QualifiedMinCountConstraintComponent, depth: depth, **) elsif max_count && count > max_count.to_i not_satisfied(focus: node, path: path, message: "#{count} conforming values, requires at most #{max_count}", resultSeverity: .fetch(:severity), component: RDF::Vocab::SHACL.QualifiedMaxCountConstraintComponent, depth: depth, **) else satisfy(focus: node, path: path, message: "#{min_count.to_i} <= #{count} <= #{max_count || 'inf'} values conform", component: RDF::Vocab::SHACL.QualifiedMinCountConstraintComponent, depth: depth, **) end end end |