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

Inherits:
ResourceOperator show all
Defined in:
vendor/bundler/ruby/3.3.0/bundler/gems/rdf-n3-a6ef81a7e1ce/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

Constants included from Util::Logger

Util::Logger::IOWrapper

Constants inherited from SPARQL::Algebra::Operator::Binary

SPARQL::Algebra::Operator::Binary::ARITY

Constants inherited from SPARQL::Algebra::Operator

SPARQL::Algebra::Operator::ARITY, SPARQL::Algebra::Operator::IsURI

Constants included from SPARQL::Algebra::Expression

SPARQL::Algebra::Expression::PATTERN_PARENTS

Instance Attribute Summary

Attributes included from Enumerable

#existentials, #universals

Attributes included from SPARQL::Algebra::Query

#solutions

Attributes inherited from SPARQL::Algebra::Operator

#operands

Instance Method Summary collapse

Methods inherited from ResourceOperator

#as_literal, #execute

Methods included from Builtin

#evaluate, #hash, #rank, #to_uri

Methods included from Util::Logger

#log_debug, #log_depth, #log_error, #log_fatal, #log_info, #log_recover, #log_recovering?, #log_statistics, #log_warn, #logger

Methods included from Enumerable

add_entailment, #canonicalize, #canonicalize!, #dump, #each_graph, #each_object, #each_predicate, #each_quad, #each_statement, #each_subject, #each_term, #each_triple, #entail, #enum_graph, #enum_object, #enum_predicate, #enum_quad, #enum_statement, #enum_subject, #enum_term, #enum_triple, #graph?, #graph_names, #invalid?, #method_missing, #object?, #objects, #predicate?, #predicates, #project_graph, #quad?, #quads, #respond_to_missing?, #statement?, #statements, #subject?, #subjects, #supports?, #term?, #terms, #to_a, #to_h, #to_set, #triple?, #triples, #validate!

Methods included from Util::Aliasing::LateBound

#alias_method

Methods included from Isomorphic

#bijection_to, #isomorphic_with?

Methods included from Countable

#count, #empty?

Methods included from SPARQL::Algebra::Update

#execute, #graph_name=, #unshift, #variables

Methods included from SPARQL::Algebra::Query

#each_solution, #empty?, #execute, #failed?, #graph_name=, #matched?, #query_yields_boolean?, #query_yields_solutions?, #query_yields_statements?, #unshift, #variables

Methods inherited from SPARQL::Algebra::Operator::Binary

#initialize

Methods inherited from SPARQL::Algebra::Operator

#aggregate?, arity, base_uri, #base_uri, base_uri=, #bind, #boolean, #constant?, #deep_dup, #each_descendant, #eql?, #evaluatable?, evaluate, #executable?, #first_ancestor, for, #formulae, #initialize, #inspect, #ndvars, #node?, #operand, #optimize, #optimize!, #parent, #parent=, prefixes, #prefixes, prefixes=, #rewrite, #to_binary, #to_sparql, to_sparql, #to_sxp, #to_sxp_bin, #validate!, #variable?, #variables, #vars

Methods included from SPARQL::Algebra::Expression

cast, #constant?, #evaluate, extension, extension?, extensions, for, #invalid?, new, #node?, open, #optimize, #optimize!, parse, register_extension, #to_sxp_bin, #validate!, #variable?

Constructor Details

This class inherits a constructor from SPARQL::Algebra::Operator::Binary

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class RDF::Enumerable

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 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-n3-a6ef81a7e1ce/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 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-n3-a6ef81a7e1ce/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 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-n3-a6ef81a7e1ce/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 'vendor/bundler/ruby/3.3.0/bundler/gems/rdf-n3-a6ef81a7e1ce/lib/rdf/n3/algebra/log/conclusion.rb', line 40

def valid?(subject, object)
  subject.formula? && (object.formula? || object.is_a?(RDF::Query::Variable))
end