Module: ShEx::Algebra::TripleExpression

Included in:
EachOf, OneOf, TripleConstraint
Defined in:
lib/shex/algebra/triple_expression.rb

Overview

Implements neigh, arcs_out, args_in and matches

Instance Method Summary collapse

Instance Method Details

#matches(arcs_in, arcs_out, depth: 0) ⇒ TripleExpression

matches: asserts that a triple expression is matched by a set of triples that come from the neighbourhood of a node in an RDF graph. The expression matches(T, expr, m) indicates that a set of triples T can satisfy these rules…

Behavior should be overridden in subclasses, which end by calling this through super.

Parameters:

  • arcs_in (Array<RDF::Statement>)
  • arcs_out (Array<RDF::Statement>)

Returns:

Raises:

  • (ShEx::NotMatched)

    with expression accessor to access matched and unmatched statements along with satisfied and unsatisfied operations.



15
16
17
# File 'lib/shex/algebra/triple_expression.rb', line 15

def matches(arcs_in, arcs_out, depth: 0)
  raise NotImplementedError, "#matches Not implemented in #{self.class}"
end

#maximumInteger, Float::INFINITY

Maximum constraint (defaults to 1)

Returns:

  • (Integer, Float::INFINITY)


62
63
64
65
66
67
# File 'lib/shex/algebra/triple_expression.rb', line 62

def maximum
  @maximum ||= begin
    op = operands.detect {|o| o.is_a?(Array) && o.first == :max} || [:max, 1]
    op[1] == '*' ? Float::INFINITY : op[1]
  end
end

#minimumInteger

Minimum constraint (defaults to 1)

Returns:

  • (Integer)


52
53
54
55
56
57
# File 'lib/shex/algebra/triple_expression.rb', line 52

def minimum
  @minimum ||= begin
    op = operands.detect {|o| o.is_a?(Array) && o.first == :min} || [:min, 1]
    op[1]
  end
end

#triple_constraintsArray<TripleConstraints>

Included TripleConstraints

Returns:

  • (Array<TripleConstraints>)


40
41
42
43
44
45
46
47
# File 'lib/shex/algebra/triple_expression.rb', line 40

def triple_constraints
  @triple_contraints ||= operands.select do |o|
    o.is_a?(TripleExpression)
  end.
  map(&:triple_constraints).
  flatten.
  uniq
end

#triple_expression?Boolean

This operator includes TripleExpression

Returns:

  • (Boolean)


70
# File 'lib/shex/algebra/triple_expression.rb', line 70

def triple_expression?; true; end

#validate_expressions!Object

expressions must be TripleExpressions or references to TripleExpressions

Raises:



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/shex/algebra/triple_expression.rb', line 23

def validate_expressions!
  expressions.each do |op|
    case op
    when TripleExpression
    when RDF::Resource
      ref = schema.find(op)
      ref.is_a?(TripleExpression) ||
      structure_error("#{json_type} must reference a TripleExpression: #{ref}")
    else
      structure_error("#{json_type} must be a TripleExpression or reference: #{op.to_sxp}")
    end
  end
end