Class: ShEx::Algebra::And
- Includes:
- ShapeExpression
- Defined in:
- lib/shex/algebra/and.rb
Constant Summary collapse
- NAME =
:and
Constants inherited from Operator
Instance Attribute Summary
Attributes inherited from Operator
#id, #logger, #operands, #options, #schema
Class Method Summary collapse
-
.from_shexj(operator, **options) ⇒ Operator
Creates an operator instance from a parsed ShExJ representation.
Instance Method Summary collapse
-
#initialize(*args, **options) ⇒ And
constructor
A new instance of And.
- #json_type ⇒ Object
-
#satisfies?(focus, depth: 0) ⇒ Boolean, ShapeExpression
S is a ShapeAnd and for every shape expression se2 in shapeExprs, satisfies(n, se2, G, m).
-
#validate! ⇒ Operator
expressions must be ShapeExpressions or references to ShapeExpressions.
Methods included from ShapeExpression
#validate_expressions!, #validate_self_references!
Methods inherited from Operator
#base_uri, #closed?, #dup, #each_descendant, #eql?, #expression, #expressions, #find, #focus, #focus=, #inspect, #iri, iri, #matched, #matched=, #message, #message=, #not_matched, #not_satisfied, #operand, #parent, #parent=, #references, #satisfied, #satisfied=, #satisfy, #semact?, #semantic_actions, #serialize_value, #status, #structure_error, #to_h, #to_json, #to_sxp, #to_sxp_bin, #triple_expression?, #unmatched, #unmatched=, #unsatisfied, #unsatisfied=, #value, value
Constructor Details
#initialize(*args, **options) ⇒ And
Returns a new instance of And.
7 8 9 10 11 12 13 14 15 16 |
# File 'lib/shex/algebra/and.rb', line 7 def initialize(*args, **) case when args.length < 2 raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 2..)" end # All arguments must be ShapeExpression raise ArgumentError, "All operands must be Shape operands or resource" unless args.all? {|o| o.is_a?(ShapeExpression) || o.is_a?(RDF::Resource)} super end |
Class Method Details
.from_shexj(operator, **options) ⇒ Operator
Creates an operator instance from a parsed ShExJ representation
22 23 24 25 26 |
# File 'lib/shex/algebra/and.rb', line 22 def self.from_shexj(operator, **) raise ArgumentError unless operator.is_a?(Hash) && operator['type'] == 'ShapeAnd' raise ArgumentError, "missing shapeExprs in #{operator.inspect}" unless operator.has_key?('shapeExprs') super end |
Instance Method Details
#json_type ⇒ Object
74 75 76 |
# File 'lib/shex/algebra/and.rb', line 74 def json_type "ShapeAnd" end |
#satisfies?(focus, depth: 0) ⇒ Boolean, ShapeExpression
S is a ShapeAnd and for every shape expression se2 in shapeExprs, satisfies(n, se2, G, m).
33 34 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 |
# File 'lib/shex/algebra/and.rb', line 33 def satisfies?(focus, depth: 0) status "" satisfied = [] unsatisfied = expressions.dup # Operand raises NotSatisfied, so no need to check here. expressions.each do |op| satisfied << case op when RDF::Resource schema.enter_shape(op, focus) do |shape| if shape shape.satisfies?(focus, depth: depth + 1) else status "Satisfy as #{op} was re-entered for #{focus}", depth: depth end end when ShapeExpression op.satisfies?(focus, depth: depth + 1) end unsatisfied.shift end satisfy focus: focus, satisfied: satisfied, depth: depth rescue ShEx::NotSatisfied => e not_satisfied e., focus: focus, satisfied: satisfied, unsatisfied: unsatisfied, depth: depth end |
#validate! ⇒ Operator
expressions must be ShapeExpressions or references to ShapeExpressions
68 69 70 71 72 |
# File 'lib/shex/algebra/and.rb', line 68 def validate! validate_expressions! validate_self_references! super end |