Class: RDF::MergeGraph

Inherits:
Object show all
Includes:
Countable, Enumerable, Queryable, Value
Defined in:
vendor/bundler/ruby/2.5.0/bundler/gems/rdf-aggregate-repo-57d526e3bd82/lib/rdf/aggregate_repo/merge_graph.rb

Overview

A Merged graph.

Implements a merged graph, containing statements from one or more source graphs. This is done through lazy evaluation of the sources, so that a copy of each source isn't required.

This class can also be used to change the context (graph name) of triples from the name used in the source.

Examples:

Constructing a merge with arguments

aggregate = RDF::AggregateRepo.new(repo1, repo2)

Constructing an aggregate with closure

aggregate = RDF::MergeGraph.new do
  source graph1, context1
  source graph2, context2
  name false
end

See Also:

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Queryable

#concise_bounded_description, #lint, #query, #query_without_sparql

Methods included from Enumerable

add_entailment, #entail

Methods included from Isomorphic

#bijection_to, #isomorphic_with?

Constructor Details

#initialize(queryable = [], options = {}) {|self| ... } ⇒ MergeGraph

Create a new aggregation instance.

Parameters:

Options Hash (options):

  • :graph_name (RDF::Resource)
  • :name (RDF::Resource)

    alias for :graph_name

Yields:

  • merger

Yield Parameters:

Yield Returns:

  • (void)

    ignored



50
51
52
53
54
55
56
57
58
59
60
# File 'vendor/bundler/ruby/2.5.0/bundler/gems/rdf-aggregate-repo-57d526e3bd82/lib/rdf/aggregate_repo/merge_graph.rb', line 50

def initialize(options = {}, &block)
  @sources = []
  @graph_name = options[:graph_name] || options[:name]

  if block_given?
    case block.arity
    when 1 then block.call(self)
    else instance_eval(&block)
    end
  end
end

Instance Attribute Details

#graph_nameArray<RDF::URI, false> (readonly)

Name of this graph, used for setting the context on returned Statements.

Returns:



38
39
40
# File 'vendor/bundler/ruby/2.5.0/bundler/gems/rdf-aggregate-repo-57d526e3bd82/lib/rdf/aggregate_repo/merge_graph.rb', line 38

def graph_name
  @graph_name
end

#sourcesArray<Array<(RDF::Queryable, RDF::Resource)>> (readonly)

The set of aggregated queryable instances included in this aggregate

Returns:



32
33
34
# File 'vendor/bundler/ruby/2.5.0/bundler/gems/rdf-aggregate-repo-57d526e3bd82/lib/rdf/aggregate_repo/merge_graph.rb', line 32

def sources
  @sources
end

Instance Method Details

#each(&block) ⇒ Object

See Also:

  • Enumerable#each_statement


155
156
157
158
159
160
161
162
163
164
# File 'vendor/bundler/ruby/2.5.0/bundler/gems/rdf-aggregate-repo-57d526e3bd82/lib/rdf/aggregate_repo/merge_graph.rb', line 155

def each(&block)
  return enum_for(:each) unless block_given?

  # Add everything to a new graph for de-duplication
  tmp = RDF::Graph.new(graph_name: @graph_name, data: RDF::Repository.new)
  sources.each do |(source, gn)|
    tmp << RDF::Graph.new(graph_name: gn || nil, data: source)
  end
  tmp.each(&block)
end

#each_graph(&block) ⇒ Object

Iterate over each graph, in order, finding named graphs from the most recently added source.

See Also:

  • Enumerable#each_graph


177
178
179
180
181
182
# File 'vendor/bundler/ruby/2.5.0/bundler/gems/rdf-aggregate-repo-57d526e3bd82/lib/rdf/aggregate_repo/merge_graph.rb', line 177

def each_graph(&block)
  if block_given?
    yield self
  end
  enum_graph
end

#graph?Boolean

Returns true to indicate that this is a graph.

Returns:

  • (Boolean)


67
68
69
# File 'vendor/bundler/ruby/2.5.0/bundler/gems/rdf-aggregate-repo-57d526e3bd82/lib/rdf/aggregate_repo/merge_graph.rb', line 67

def graph?
  true
end

#name(name) ⇒ RDF::MergeGraph

Set the graph_name for statements in this graph

Parameters:

  • name (RDF::Resource, false)

Returns:



114
115
116
117
# File 'vendor/bundler/ruby/2.5.0/bundler/gems/rdf-aggregate-repo-57d526e3bd82/lib/rdf/aggregate_repo/merge_graph.rb', line 114

def name(name)
  @graph_name = name
  self
end

#named?Boolean

Note:

The next release, graphs will not be named, this will return false

Returns true if this is a named graph.

Returns:

  • (Boolean)


76
77
78
# File 'vendor/bundler/ruby/2.5.0/bundler/gems/rdf-aggregate-repo-57d526e3bd82/lib/rdf/aggregate_repo/merge_graph.rb', line 76

def named?
  !unnamed?
end

#source(queryable, graph_name) ⇒ RDF::MergeGraph Also known as: add

Add a queryable to the set of constituent queryable instances

Parameters:

Returns:



103
104
105
106
# File 'vendor/bundler/ruby/2.5.0/bundler/gems/rdf-aggregate-repo-57d526e3bd82/lib/rdf/aggregate_repo/merge_graph.rb', line 103

def source(queryable, graph_name)
  @sources << [queryable, graph_name]
  self
end

#unnamed?Boolean

Note:

The next release, graphs will not be named, this will return true

Returns true if this is a unnamed graph.

Returns:

  • (Boolean)


85
86
87
# File 'vendor/bundler/ruby/2.5.0/bundler/gems/rdf-aggregate-repo-57d526e3bd82/lib/rdf/aggregate_repo/merge_graph.rb', line 85

def unnamed?
  @graph_name.nil?
end

#writable?Boolean

MergeGraph is writable if any source is writable. Updates go to the last writable source.

Returns:

  • (Boolean)


93
94
95
# File 'vendor/bundler/ruby/2.5.0/bundler/gems/rdf-aggregate-repo-57d526e3bd82/lib/rdf/aggregate_repo/merge_graph.rb', line 93

def writable?
  sources.any? {|(source, ctx)| source.writable?}
end