class RDF::N3::Algebra::Log::Conclusion

All possible conclusions which can be drawn from a formula.

The object of this function, a formula, is the set of conclusions which can be drawn from the subject formula, by successively applying any rules it contains to the data it contains. This is equivalent to cwm’s “–think” command line function. It does use built-ins, so it may for example indirectly invoke other documents, validate signatures, etc.

Constants

NAME
URI

Public Instance Methods

each(solutions:, &block) click to toggle source

Yields statements, and de-asserts ‘inferred` from the subject.

@yield [statement]

each matching statement

@yieldparam [RDF::Statement] solution @yieldreturn [void] ignored

Calls superclass method RDF::N3::Algebra::Builtin#each
# File lib/rdf/n3/algebra/log/conclusion.rb, line 59
def each(solutions:, &block)
  super do |stmt|
    block.call(RDF::Statement.from(stmt.to_quad))
  end
end
input_operand() click to toggle source

Return subject operand.

@return [RDF::Term]

# File lib/rdf/n3/algebra/log/conclusion.rb, line 48
def input_operand
  operands.first
end
resolve(resource, position:) click to toggle source

Evaluates this operator by creating a new formula containing the triples generated by reasoning over the input formula using think.

The subject is evaluated into an isolated repository so that conclusions evaluated when evaluating the subject are not necessarily conclusions resulting from evaluating this operator.

@param [RDF::N3::Algebra:Formula] resource @return [RDF::N3::Algebra::Formula] @see RDF::N3::ListOperator#evaluate

# File lib/rdf/n3/algebra/log/conclusion.rb, line 18
def resolve(resource, position:)
  return resource unless position == :subject

  log_depth do
    reasoner = RDF::N3::Reasoner.new(resource, **@options)
    conclusions = RDF::N3::Repository.new
    reasoner.execute(think: true) {|stmt| conclusions << stmt}

    # The result is a formula containing the conclusions
    form = RDF::N3::Algebra::Formula.from_enumerable(conclusions, **@options).deep_dup

    log_info("#{NAME} resolved") {SXP::Generator.string form.to_sxp_bin} 
    form
  end
end
valid?(subject, object) click to toggle source

To be valid, subject must be a formula, and object a formula or variable.

@param [RDF::Term] subject @param [RDF::Term] object @return [Boolean]

# File lib/rdf/n3/algebra/log/conclusion.rb, line 40
def valid?(subject, object)
  subject.formula? && (object.formula? || object.is_a?(RDF::Query::Variable))
end