Class: SPARQL::Client::Repository
- Inherits:
-
RDF::Repository
- Object
- RDF::Dataset
- RDF::Repository
- SPARQL::Client::Repository
- Defined in:
- vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb
Overview
A read-only repository view of a SPARQL endpoint.
Constant Summary
Constants inherited from RDF::Repository
RDF::Repository::DEFAULT_TX_CLASS
Constants inherited from RDF::Dataset
RDF::Dataset::DEFAULT_GRAPH, RDF::Dataset::ISOLATION_LEVELS
Instance Attribute Summary collapse
- #client ⇒ SPARQL::Client readonly
Attributes inherited from RDF::Repository
Attributes included from RDF::Enumerable
Instance Method Summary collapse
-
#count ⇒ Integer
(also: #size, #length)
Returns the number of statements in this repository.
-
#delete(*statements) ⇒ Object
Deletes RDF statements from
self
. -
#delete_statements(statements)
protected
Deletes the given RDF statements from the underlying storage.
-
#each {|statement| ... } ⇒ Object
Enumerates each RDF statement in this repository.
-
#each_object {|object| ... } ⇒ Enumerator
Iterates over each object in this repository.
-
#each_predicate {|predicate| ... } ⇒ Enumerator
Iterates over each predicate in this repository.
-
#each_statement(&block) ⇒ Object
Iterates the given block for each RDF statement.
-
#each_subject {|subject| ... } ⇒ Enumerator
Iterates over each subject in this repository.
-
#empty? ⇒ Boolean
Returns
true
if this repository contains no statements. -
#has_object?(object) ⇒ Boolean
Returns
true
if this repository contains the given object. -
#has_predicate?(predicate) ⇒ Boolean
Returns
true
if this repository contains the given predicate. -
#has_statement?(statement) ⇒ Boolean
Returns
true
if this repository contains the givenstatement
. -
#has_subject?(subject) ⇒ Boolean
Returns
true
if this repository contains the given subject. -
#has_triple?(triple) ⇒ Boolean
Returns
true
if this repository contains the giventriple
. -
#initialize(uri: nil, **options, &block) ⇒ Repository
constructor
A new instance of Repository.
-
#insert_statements(statements)
protected
Inserts the given RDF statements into the underlying storage or output stream.
-
#query_execute(query, **options) {|solution| ... }
protected
Queries
self
using the given basic graph pattern (BGP) query, yielding each matched solution to the given block. -
#query_pattern(pattern, **options) {|statement| ... } ⇒ Enumerable<Statement>
protected
Queries
self
for RDF statements matching the givenpattern
. -
#update_client ⇒ SPARQL::Client
Returns the client for the update_endpoint if specified, otherwise the #client.
-
#writable? ⇒ Boolean
Returns
false
to indicate that this is a read-only repository.
Methods inherited from RDF::Repository
#delete_insert, #isolation_level, load, #snapshot
Methods included from RDF::Transactable
#begin_transaction, #commit_transaction, #rollback_transaction, #transaction
Methods included from RDF::Mutable
#<<, add_entailment, #apply_changeset, #clear, #delete_insert, #delete_statement, #entail, #entail!, #immutable?, #insert, #load, #method_missing, #mutable?, #respond_to_missing?, #snapshot, #update
Methods included from RDF::Util::Aliasing::LateBound
Methods included from RDF::Util::Coercions
Methods included from RDF::Writable
#<<, #insert, #insert_graph, #insert_reader
Methods included from RDF::Readable
Methods inherited from RDF::Dataset
#inspect, #inspect!, #isolation_level
Methods included from RDF::Queryable
#concise_bounded_description, #first, #first_literal, #first_object, #first_predicate, #first_subject, #first_value, #lint, #query, #query_without_sparql, #to_sparql
Methods included from RDF::Durable
Methods included from RDF::Enumerable
add_entailment, #canonicalize, #canonicalize!, #dump, #each_graph, #each_quad, #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, #term?, #terms, #to_a, #to_h, #to_set, #triple?, #triples, #valid?, #validate!
Methods included from RDF::Isomorphic
#bijection_to, #isomorphic_with?
Constructor Details
#initialize(uri: nil, **options, &block) ⇒ Repository
Returns a new instance of Repository.
14 15 16 17 18 19 20 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 14 def initialize(uri: nil, **, &block) raise ArgumentError, "uri is a required parameter" unless uri @options = .merge(uri: uri) @update_client = SPARQL::Client.new(.delete(:update_endpoint), **) if [:update_endpoint] @client = SPARQL::Client.new(uri, **) super(**@options, &block) end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class RDF::Mutable
Instance Attribute Details
#client ⇒ SPARQL::Client (readonly)
8 9 10 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 8 def client @client end |
Instance Method Details
#count ⇒ Integer Also known as: size, length
Returns the number of statements in this repository.
176 177 178 179 180 181 182 183 184 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 176 def count begin binding = client.query("SELECT (COUNT(*) AS ?count) WHERE { ?s ?p ?o }").first.to_h binding[:count].value.to_i rescue 0 rescue SPARQL::Client::MalformedQuery => e # SPARQL 1.0 does not include support for aggregate functions: each_statement.count end end |
#delete(*statements) ⇒ self #delete(statements) ⇒ self
Deletes RDF statements from self
.
If any statement contains an RDF::Query::Variable
, it is
considered to be a pattern, and used to query
self to find matching statements to delete.
231 232 233 234 235 236 237 238 239 240 241 242 243 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 231 def delete(*statements) statements.map! do |value| if value.respond_to?(:each_statement) delete_statements(value) nil else value end end statements.compact! delete_statements(statements) unless statements.empty? return self end |
#delete_statements(statements) (protected)
This method returns an undefined value.
Deletes the given RDF statements from the underlying storage.
Overridden here to use SPARQL/UPDATE
309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 309 def delete_statements(statements) constant = statements.all? do |value| # needs to be flattened... urgh !value.respond_to?(:each_statement) && begin statement = RDF::Statement.from(value) statement.constant? && !statement.has_blank_nodes? end end if constant update_client.delete_data(statements) else update_client.delete_insert(statements) end end |
#each {|statement| ... } ⇒ Object
Enumerates each RDF statement in this repository.
36 37 38 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 36 def each(&block) client.construct([:s, :p, :o]).where([:s, :p, :o]).each_statement(&block) end |
#each_object {|object| ... } ⇒ Enumerator
Iterates over each object in this repository.
144 145 146 147 148 149 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 144 def each_object(&block) if block_given? client.select(:o, distinct: true).where([:s, :p, :o]).each_solution { |solution| block.call(solution[:o]) } end enum_object end |
#each_predicate {|predicate| ... } ⇒ Enumerator
Iterates over each predicate in this repository.
130 131 132 133 134 135 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 130 def each_predicate(&block) if block_given? client.select(:p, distinct: true).where([:s, :p, :o]).each_solution { |solution| block.call(solution[:p]) } end enum_predicate end |
#each_statement {|statement| ... } #each_statement ⇒ Enumerator<RDF::Statement>
Iterates the given block for each RDF statement.
If no block was given, returns an enumerator.
The order in which statements are yielded is undefined.
56 57 58 59 60 61 62 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 56 def each_statement(&block) if block_given? # Invoke {#each} in the containing class: each(&block) end enum_statement end |
#each_subject {|subject| ... } ⇒ Enumerator
Iterates over each subject in this repository.
116 117 118 119 120 121 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 116 def each_subject(&block) if block_given? client.select(:s, distinct: true).where([:s, :p, :o]).each_solution { |solution| block.call(solution[:s]) } end enum_subject end |
#empty? ⇒ Boolean
Returns true
if this repository contains no statements.
194 195 196 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 194 def empty? client.ask.whether([:s, :p, :o]).false? end |
#has_object?(object) ⇒ Boolean
Returns true
if this repository contains the given object.
105 106 107 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 105 def has_object?(object) client.ask.whether([:s, :p, object]).true? end |
#has_predicate?(predicate) ⇒ Boolean
Returns true
if this repository contains the given predicate.
95 96 97 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 95 def has_predicate?(predicate) client.ask.whether([:s, predicate, :o]).true? end |
#has_statement?(statement) ⇒ Boolean
Returns true
if this repository contains the given statement
.
167 168 169 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 167 def has_statement?(statement) has_triple?(statement.to_triple) end |
#has_subject?(subject) ⇒ Boolean
Returns true
if this repository contains the given subject.
85 86 87 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 85 def has_subject?(subject) client.ask.whether([subject, :p, :o]).true? end |
#has_triple?(triple) ⇒ Boolean
Returns true
if this repository contains the given triple
.
157 158 159 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 157 def has_triple?(triple) client.ask.whether(triple.to_a[0...3]).true? end |
#insert_statements(statements) (protected)
This method returns an undefined value.
Inserts the given RDF statements into the underlying storage or output stream.
Overridden here to use SPARQL/UPDATE
334 335 336 337 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 334 def insert_statements(statements) raise ArgumentError, "Some statement is incomplete" if statements.any?(&:incomplete?) update_client.insert_data(statements) end |
#query_execute(query, **options) {|solution| ... } (protected)
This method returns an undefined value.
Queries self
using the given basic graph pattern (BGP) query,
yielding each matched solution to the given block.
Overrides Queryable::query_execute to use SPARQL::Client::query
263 264 265 266 267 268 269 270 271 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 263 def query_execute(query, **, &block) return nil unless block_given? q = SPARQL::Client::Query. select(query.variables, **{}). where(*query.patterns) client.query(q, **).each do |solution| yield solution end end |
#query_pattern(pattern, **options) {|statement| ... } ⇒ Enumerable<Statement> (protected)
This should use basic SPARQL query mechanism.
Queries self
for RDF statements matching the given pattern
.
287 288 289 290 291 292 293 294 295 296 297 298 299 300 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 287 def query_pattern(pattern, **, &block) pattern = pattern.dup pattern.subject ||= RDF::Query::Variable.new pattern.predicate ||= RDF::Query::Variable.new pattern.object ||= RDF::Query::Variable.new pattern.initialize! query = client.construct(pattern).where(pattern) if block_given? query.each_statement(&block) else query.solutions.to_a.extend(RDF::Enumerable, RDF::Queryable) end end |
#update_client ⇒ SPARQL::Client
Returns the client for the update_endpoint if specified, otherwise the #client.
27 28 29 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 27 def update_client @update_client || @client end |
#writable? ⇒ Boolean
Returns false
to indicate that this is a read-only repository.
203 204 205 |
# File 'vendor/bundler/ruby/3.3.0/bundler/gems/sparql-client-464d3f76cfd5/lib/sparql/client/repository.rb', line 203 def writable? true end |