Class: RDF::MergeGraph
- Inherits:
-
Object
- Object
- RDF::MergeGraph
- Includes:
- Countable, Enumerable, Queryable, Value
- Defined in:
- 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.
Instance Attribute Summary collapse
-
#graph_name ⇒ Array<RDF::URI, false>
readonly
Name of this graph, used for setting the context on returned
Statements. -
#sources ⇒ Array<Array<(RDF::Queryable, RDF::Resource)>>
readonly
The set of aggregated
queryableinstances included in this aggregate.
Instance Method Summary collapse
- #count ⇒ Object
- #durable? ⇒ Boolean
- #each(&block) ⇒ Object
-
#each_graph(&block) ⇒ Object
Iterate over each graph, in order, finding named graphs from the most recently added
source. - #empty? ⇒ Boolean
-
#graph? ⇒ Boolean
Returns
trueto indicate that this is a graph. - #has_graph?(value) ⇒ Boolean
- #has_statement?(statement) ⇒ Boolean
-
#initialize(graph_name: nil, name: nil) {|self| ... } ⇒ MergeGraph
constructor
Create a new aggregation instance.
-
#name(name) ⇒ RDF::MergeGraph
Set the graph_name for statements in this graph.
-
#named? ⇒ Boolean
Returns
trueif this is a named graph. -
#source(queryable, graph_name) ⇒ RDF::MergeGraph
(also: #add)
Add a queryable to the set of constituent queryable instances.
-
#unnamed? ⇒ Boolean
Returns
trueif this is a unnamed graph. -
#writable? ⇒ Boolean
MergeGraph is writable if any source is writable.
Constructor Details
#initialize(graph_name: nil, name: nil) {|self| ... } ⇒ MergeGraph
Create a new aggregation instance.
48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 48 def initialize(graph_name: nil, name: nil, &block) @sources = [] @graph_name = graph_name || name if block_given? case block.arity when 1 then block.call(self) else instance_eval(&block) end end end |
Instance Attribute Details
#graph_name ⇒ Array<RDF::URI, false> (readonly)
Name of this graph, used for setting the context on returned Statements.
38 39 40 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 38 def graph_name @graph_name end |
#sources ⇒ Array<Array<(RDF::Queryable, RDF::Resource)>> (readonly)
The set of aggregated queryable instances included in this aggregate
32 33 34 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 32 def sources @sources end |
Instance Method Details
#count ⇒ Object
136 137 138 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 136 def count each_statement.to_a.length end |
#durable? ⇒ Boolean
122 123 124 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 122 def durable? sources.all? {|(source, ctx)| source.durable?} end |
#each(&block) ⇒ Object
153 154 155 156 157 158 159 160 161 162 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 153 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.
175 176 177 178 179 180 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 175 def each_graph(&block) if block_given? yield self end enum_graph end |
#empty? ⇒ Boolean
129 130 131 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 129 def empty? count == 0 end |
#graph? ⇒ Boolean
Returns true to indicate that this is a graph.
65 66 67 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 65 def graph? true end |
#has_graph?(value) ⇒ Boolean
167 168 169 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 167 def has_graph?(value) @graph_name == value end |
#has_statement?(statement) ⇒ Boolean
143 144 145 146 147 148 149 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 143 def has_statement?(statement) sources.any? do |(source, ctx)| statement = statement.dup statement.graph_name = ctx source.has_statement?(statement) end end |
#name(name) ⇒ RDF::MergeGraph
Set the graph_name for statements in this graph
112 113 114 115 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 112 def name(name) @graph_name = name self end |
#named? ⇒ Boolean
The next release, graphs will not be named, this will return false
Returns true if this is a named graph.
74 75 76 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 74 def named? !unnamed? end |
#source(queryable, graph_name) ⇒ RDF::MergeGraph Also known as: add
Add a queryable to the set of constituent queryable instances
101 102 103 104 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 101 def source(queryable, graph_name) @sources << [queryable, graph_name] self end |
#unnamed? ⇒ Boolean
The next release, graphs will not be named, this will return true
Returns true if this is a unnamed graph.
83 84 85 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 83 def unnamed? @graph_name.nil? end |
#writable? ⇒ Boolean
MergeGraph is writable if any source is writable. Updates go to the last writable source.
91 92 93 |
# File 'lib/rdf/aggregate_repo/merge_graph.rb', line 91 def writable? sources.any? {|(source, ctx)| source.writable?} end |