Class: RDF::N3::Algebra::Log::Includes

Inherits:
ResourceOperator show all
Defined in:
vendor/bundler/ruby/3.0.0/bundler/gems/rdf-n3-63de66d94bd1/lib/rdf/n3/algebra/log/includes.rb

Overview

The subject formula includes the object formula.

Formula A includes formula B if there exists some substitution which when applied to B creates a formula B' such that for every statement in B' is also in A, every variable universally (or existentially) quantified in B' is quantified in the same way in A.

Variable substitution is applied recursively to nested compound terms such as formulae, lists and sets.

(Understood natively by cwm when in in the antecedent of a rule. You can use this to peer inside nested formulae.)

Direct Known Subclasses

NotIncludes

Constant Summary collapse

NAME =
:logIncludes
URI =
RDF::N3::Log.includes

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

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, #valid?

Methods included from Builtin

#each, #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, #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, #valid?, #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_sxp, #to_sxp_bin, #validate!, #variable?, #vars

Methods included from SPARQL::Algebra::Expression

cast, #constant?, #evaluate, extension, extensions, for, #invalid?, new, #node?, open, #optimize, #optimize!, parse, register_extension, #to_sxp_bin, #valid?, #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

#apply(subject, object) ⇒ RDF::Literal::Boolean

Note:

this does allow object to have variables not in the subject, if they could have been substituted away.

Creates a repository constructed by substituting variables and in that subject with known IRIs and queries object against that repository. Either retuns a single solution, or no solutions.

Parameters:

Returns:



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'vendor/bundler/ruby/3.0.0/bundler/gems/rdf-n3-63de66d94bd1/lib/rdf/n3/algebra/log/includes.rb', line 40

def apply(subject, object)
  subject_var_map = subject.variables.values.inject({}) {|memo, v| memo.merge(v => RDF::URI(v.name))}
  object_vars = object.variables.keys
  log_debug(NAME,  "subject var map") {SXP::Generator.string(subject_var_map.to_sxp_bin)}
  log_debug(NAME, "object vars") {SXP::Generator.string(object_vars.to_sxp_bin)}
  # create a queryable from subject, replacing variables with IRIs for thsoe variables.
  queryable = RDF::Repository.new do |r|
    log_depth do
      subject.each do |stmt|
        parts = stmt.to_quad.map do |part|
          part.is_a?(RDF::Query::Variable) ? subject_var_map.fetch(part) : part
        end
        r << RDF::Statement.from(parts)
      end
    end
  end

  # Query object against subject
  solns = log_depth {queryable.query(object, **@options)}
  log_info("(#{NAME} solutions)") {SXP::Generator.string solns.to_sxp_bin}

  if !solns.empty? && (object_vars - solns.variable_names).empty?
    # Return solution
    solns.first
  else
    # Return false,
    RDF::Literal::FALSE
  end
end

#input_operandObject

Both subject and object are inputs.



26
27
28
# File 'vendor/bundler/ruby/3.0.0/bundler/gems/rdf-n3-63de66d94bd1/lib/rdf/n3/algebra/log/includes.rb', line 26

def input_operand
  RDF::N3::List.new(values: operands)
end

#resolve(resource, position:) ⇒ RDF::Term

Both subject and object must be formulae.

Parameters:

  • resource (RDF::Term)
  • position (:subject, :object)

Returns:

See Also:

  • ResourceOperator#evaluate


21
22
23
# File 'vendor/bundler/ruby/3.0.0/bundler/gems/rdf-n3-63de66d94bd1/lib/rdf/n3/algebra/log/includes.rb', line 21

def resolve(resource, position:)
  resource if resource.formula?
end