module RDF::Enumerable

Public Class Methods

add_entailment(method, proc) click to toggle source

Add an entailment method. The method accepts no arguments, and returns or yields an array of values associated with the particular entailment method @param [Symbol] method @param [Proc] proc

# File lib/rdf/reasoner/extensions.rb, line 148
def add_entailment(method, proc)
  @@entailments[method] = proc
end

Public Instance Methods

entail(*rules, &block) click to toggle source

Perform entailments on this enumerable in a single pass, yielding entailed statements.

For best results, either run rules separately expanding the enumberated graph, or run repeatedly until no new statements are added to the enumerable containing both original and entailed statements. As ‘:subClassOf` and `:subPropertyOf` entailments are implicitly recursive, this may not be necessary except for extreme cases.

@overload entail

@param [Array<Symbol>] *rules
  Registered entailment method(s).

@yield statement
@yieldparam [RDF::Statement] statement
@return [void]

@overload entail

@param [Array<Symbol>] *rules Registered entailment method(s)
@return [Enumerator]
# File lib/rdf/reasoner/extensions.rb, line 169
def entail(*rules, &block)
  if block_given?
    rules = %w(subClassOf subPropertyOf domain range).map(&:to_sym) if rules.empty?

    self.each do |statement|
      rules.each {|rule| statement.entail(rule, &block)}
    end
  else
    # Otherwise, return an Enumerator with the entailed statements
    this = self
    RDF::Queryable::Enumerator.new do |yielder|
      this.entail(*rules) {|y| yielder << y}
    end
  end
end