Class: SHACL::Algebra::Xone
- Defined in:
- lib/shacl/algebra/xone.rb
Constant Summary collapse
- NAME =
:xone
Constants inherited from Operator
Instance Attribute Summary
Attributes inherited from Operator
Instance Method Summary collapse
-
#conforms(node, path: nil, depth: 0, **options) ⇒ Array<SHACL::ValidationResult>
Specifies the condition that each value node conforms to exactly one of the provided shapes.
Methods inherited from Operator
apply_op, #comment, #deactivated?, from_expanded_value, from_json, #id, iri, #iri, #label, #not_satisfied, parse_path, #satisfy, to_rdf, #to_sxp_bin, #type
Instance Method Details
#conforms(node, path: nil, depth: 0, **options) ⇒ Array<SHACL::ValidationResult>
Specifies the condition that each value node conforms to exactly one of the provided shapes.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/shacl/algebra/xone.rb', line 35 def conforms(node, path: nil, depth: 0, **) log_debug(NAME, depth: depth) {SXP::Generator.string({node: node}.to_sxp_bin)} num_conform = operands.inject(0) do |memo, op| results = op.conforms(node, depth: depth + 1, **) memo += (results.flatten.all?(&:conform?) ? 1 : 0) end case num_conform when 0 not_satisfied(focus: node, path: path, value: node, message: "node does not conform to any shape", resultSeverity: .fetch(:severity), component: RDF::Vocab::SHACL.XoneConstraintComponent, depth: depth, **) when 1 satisfy(focus: node, path: path, value: node, message: "node conforms to a single shape", component: RDF::Vocab::SHACL.XoneConstraintComponent, depth: depth, **) else not_satisfied(focus: node, path: path, value: node, message: "node conforms to #{num_conform} shapes", resultSeverity: .fetch(:severity), component: RDF::Vocab::SHACL.XoneConstraintComponent, depth: depth, **) end end |