Class: RDF::N3::Algebra::Log::Conclusion

Inherits:
ResourceOperator
  • Object
show all
Defined in:
lib/rdf/n3/algebra/log/conclusion.rb

Overview

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.

Constant Summary collapse

NAME =
:logConclusion
URI =
RDF::N3::Log.conclusion

Instance Attribute Summary

Attributes included from Enumerable

#existentials, #universals

Instance Method Summary collapse

Methods inherited from ResourceOperator

#as_literal, #execute

Methods included from Builtin

#evaluate, #hash, #rank, #to_uri

Instance Method Details

#each(solutions:) {|statement| ... } ⇒ Object

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

Yields:

  • (statement)

    each matching statement

Yield Parameters:

Yield Returns:

  • (void)

    ignored



59
60
61
62
63
# 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_operandRDF::Term

Return subject operand.

Returns:



48
49
50
# File 'lib/rdf/n3/algebra/log/conclusion.rb', line 48

def input_operand
  operands.first
end

#resolve(resource, position:) ⇒ RDF::N3::Algebra::Formula

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.

Parameters:

  • resource (RDF::N3::Algebra:Formula)

Returns:

See Also:

  • ListOperator#evaluate


18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 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) ⇒ Boolean

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

Parameters:

Returns:

  • (Boolean)


40
41
42
# 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