Class: SPARQL::Client::Repository
- Inherits:
-
RDF::Repository
- Object
- RDF::Repository
- SPARQL::Client::Repository
- Defined in:
- lib/sparql/client/repository.rb
Overview
A read-only repository view of a SPARQL endpoint.
Instance Attribute Summary collapse
- #client ⇒ SPARQL::Client readonly
Instance Method Summary collapse
- #clear_statements ⇒ Object
-
#count ⇒ Integer
(also: #size, #length)
Returns the number of statements in this repository.
-
#delete(*statements) ⇒ Object
Deletes RDF statements from ‘self`.
-
#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 given `statement`.
-
#has_subject?(subject) ⇒ Boolean
Returns ‘true` if this repository contains the given subject.
-
#has_triple?(triple) ⇒ Boolean
Returns ‘true` if this repository contains the given `triple`.
-
#initialize(uri: nil, **options, &block) ⇒ Repository
constructor
A new instance of Repository.
- #supports?(feature) ⇒ Boolean
-
#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.
Constructor Details
#initialize(uri: nil, **options, &block) ⇒ Repository
Returns a new instance of Repository.
14 15 16 17 18 19 20 |
# File '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 |
Instance Attribute Details
#client ⇒ SPARQL::Client (readonly)
8 9 10 |
# File 'lib/sparql/client/repository.rb', line 8 def client @client end |
Instance Method Details
#clear_statements ⇒ Object
212 213 214 |
# File 'lib/sparql/client/repository.rb', line 212 def clear_statements update_client.clear(:all) end |
#count ⇒ Integer Also known as: size, length
Returns the number of statements in this repository.
176 177 178 179 180 181 182 183 184 185 186 |
# File '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: count = 0 each_statement { count += 1 } # TODO: optimize this 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.
233 234 235 236 237 238 239 240 241 242 243 244 245 |
# File 'lib/sparql/client/repository.rb', line 233 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 |
#each {|statement| ... } ⇒ Object
Enumerates each RDF statement in this repository.
36 37 38 |
# File '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 '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 '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| ... } ⇒ void #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 '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 '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.
196 197 198 |
# File 'lib/sparql/client/repository.rb', line 196 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 '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 '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 '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 '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 'lib/sparql/client/repository.rb', line 157 def has_triple?(triple) client.ask.whether(triple.to_a[0...3]).true? end |
#supports?(feature) ⇒ Boolean
67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/sparql/client/repository.rb', line 67 def supports?(feature) case feature.to_sym # statement contexts / named graphs when :context then false when :graph_name then false when :inference then false # forward-chaining inference when :validity then false when :literal_equality then true else false end end |
#update_client ⇒ SPARQL::Client
Returns the client for the update_endpoint if specified, otherwise the #client.
27 28 29 |
# File '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.
205 206 207 |
# File 'lib/sparql/client/repository.rb', line 205 def writable? true end |