rdf-sesame 1.1.2 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/rdf/sesame/repository.rb +80 -36
- data/lib/rdf/sesame/version.rb +3 -3
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dbe9c97f53c462f991525db0effc51a5b1293012
|
4
|
+
data.tar.gz: 935fadb4ab956da298a4e51c942498b31bc2f518
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2779d4893d1d44f9ef133b48d386271ab4791911900a56da78490c332a3a56c5e4275bcd266277c3690457bea1b9a4f69f84fc5803b58ada8dcdd30868d4ce67
|
7
|
+
data.tar.gz: e2abaff8e9f58fcf0418edc9035bb41cde8d3b1bc795271390938339a1d37ce80357417427585996a47545d8bb5467fc3a702567897088cb2883d8b592ba1404
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.0
|
@@ -115,11 +115,11 @@ module RDF::Sesame
|
|
115
115
|
when RDF::Statement
|
116
116
|
writer = RDF::NTriples::Writer.new
|
117
117
|
q = {
|
118
|
-
:subj => writer.
|
119
|
-
:pred => writer.
|
120
|
-
:obj => writer.
|
118
|
+
:subj => writer.format_term(query.subject),
|
119
|
+
:pred => writer.format_term(query.predicate),
|
120
|
+
:obj => writer.format_term(query.object)
|
121
121
|
}
|
122
|
-
q.merge!(:context => writer.
|
122
|
+
q.merge!(:context => writer.format_term(query.graph_name)) if query.has_graph?
|
123
123
|
url.query_values = q
|
124
124
|
when Hash
|
125
125
|
url.query_values = query unless query.empty?
|
@@ -141,7 +141,7 @@ module RDF::Sesame
|
|
141
141
|
# @see RDF::Repository#supports?
|
142
142
|
def supports?(feature)
|
143
143
|
case feature.to_sym
|
144
|
-
when :
|
144
|
+
when :graph_name then true # statement contexts / named graphs
|
145
145
|
else super
|
146
146
|
end
|
147
147
|
end
|
@@ -171,6 +171,23 @@ module RDF::Sesame
|
|
171
171
|
end
|
172
172
|
end
|
173
173
|
|
174
|
+
##
|
175
|
+
# Returns all namespaces on this Sesame repository.
|
176
|
+
#
|
177
|
+
# @return [Hash{Symbol => RDF::URI}]
|
178
|
+
# @see #repository
|
179
|
+
# @see #each_repository
|
180
|
+
# @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e204
|
181
|
+
def namespaces
|
182
|
+
require 'json' unless defined?(::JSON)
|
183
|
+
|
184
|
+
response = server.get(path(:namespaces), Server::ACCEPT_JSON)
|
185
|
+
json = ::JSON.parse(response.body)
|
186
|
+
json['results']['bindings'].each_with_object({}) do |binding, namespaces|
|
187
|
+
namespaces[binding['prefix']['value'].to_sym] = RDF::URI.new(binding['namespace']['value'])
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
174
191
|
##
|
175
192
|
# @see RDF::Enumerable#has_triple?
|
176
193
|
def has_triple?(triple)
|
@@ -180,7 +197,7 @@ module RDF::Sesame
|
|
180
197
|
##
|
181
198
|
# @see RDF::Enumerable#has_quad?
|
182
199
|
def has_quad?(quad)
|
183
|
-
has_statement?(RDF::Statement.new(quad[0], quad[1], quad[2], :
|
200
|
+
has_statement?(RDF::Statement.new(quad[0], quad[1], quad[2], :graph_name => quad[3]))
|
184
201
|
end
|
185
202
|
|
186
203
|
##
|
@@ -228,12 +245,12 @@ module RDF::Sesame
|
|
228
245
|
# This is for performance. Otherwise only one query with TriG::Reader will be
|
229
246
|
# necessary
|
230
247
|
|
231
|
-
['null', *
|
248
|
+
['null', *graph_names].uniq.each do |context|
|
232
249
|
query = {}
|
233
250
|
query.merge!(:context => serialize_context(context)) if context
|
234
251
|
response = server.get(path(:statements, query), 'Accept' => 'text/plain')
|
235
252
|
RDF::NTriples::Reader.new(response.body).each_statement do |statement|
|
236
|
-
statement.
|
253
|
+
statement.graph_name = context
|
237
254
|
yield statement
|
238
255
|
end
|
239
256
|
end
|
@@ -242,22 +259,15 @@ module RDF::Sesame
|
|
242
259
|
alias_method :each, :each_statement
|
243
260
|
|
244
261
|
##
|
245
|
-
#
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
when :bnode then RDF::Node.new(context_id['value'])
|
255
|
-
when :uri then RDF::URI.new(context_id['value'])
|
256
|
-
else
|
257
|
-
nil
|
258
|
-
end
|
259
|
-
yield context if context
|
260
|
-
end
|
262
|
+
# Returns all unique RDF graph names, other than the default graph.
|
263
|
+
#
|
264
|
+
# @param unique (true)
|
265
|
+
# @return [Array<RDF::Resource>]
|
266
|
+
# @see #each_graph
|
267
|
+
# @see #enum_graph
|
268
|
+
# @since 2.0
|
269
|
+
def graph_names(unique: true)
|
270
|
+
fetch_graph_names
|
261
271
|
end
|
262
272
|
|
263
273
|
# Run a raw SPARQL query.
|
@@ -371,13 +381,12 @@ module RDF::Sesame
|
|
371
381
|
# @option options [String] :subject Match a specific subject
|
372
382
|
# @option options [String] :predicate Match a specific predicate
|
373
383
|
# @option options [String] :object Match a specific object
|
374
|
-
# @option options [String] :
|
384
|
+
# @option options [String] :graph_name Match a specific graph name.
|
375
385
|
# @return [void]
|
376
|
-
def clear(options={})
|
386
|
+
def clear(options = {})
|
377
387
|
parameters = {}
|
378
|
-
{ :subject => :subj, :predicate => :pred, :object => :obj, :
|
379
|
-
|
380
|
-
parameters.merge! parameter_key => RDF::NTriples.serialize(RDF::URI.new(value)) if value
|
388
|
+
{ :subject => :subj, :predicate => :pred, :object => :obj, :graph_name => :context }.each do |option_key, parameter_key|
|
389
|
+
parameters.merge! parameter_key => RDF::NTriples.serialize(RDF::URI.new(options[option_key])) if options.has_key?(option_key)
|
381
390
|
end
|
382
391
|
response = server.delete(path(:statements, statements_options.merge(parameters)))
|
383
392
|
response.code == "204"
|
@@ -388,20 +397,21 @@ module RDF::Sesame
|
|
388
397
|
##
|
389
398
|
# @private
|
390
399
|
# @see RDF::Queryable#query
|
391
|
-
def query_pattern(pattern)
|
400
|
+
def query_pattern(pattern, options = {}, &block)
|
392
401
|
writer = RDF::NTriples::Writer.new
|
393
402
|
query = {}
|
394
|
-
query.merge!(:context => writer.
|
395
|
-
query.merge!(:subj => writer.
|
396
|
-
query.merge!(:pred => writer.
|
397
|
-
query.merge!(:obj => writer.
|
403
|
+
query.merge!(:context => writer.format_term(pattern.graph_name)) if pattern.has_graph?
|
404
|
+
query.merge!(:subj => writer.format_term(pattern.subject)) unless pattern.subject.is_a?(RDF::Query::Variable) || pattern.subject.nil?
|
405
|
+
query.merge!(:pred => writer.format_term(pattern.predicate)) unless pattern.predicate.is_a?(RDF::Query::Variable) || pattern.predicate.nil?
|
406
|
+
query.merge!(:obj => writer.format_term(pattern.object)) unless pattern.object.is_a?(RDF::Query::Variable) || pattern.object.nil?
|
398
407
|
response = server.get(path(:statements, query), Server::ACCEPT_NTRIPLES)
|
399
408
|
RDF::NTriples::Reader.new(response.body).each_statement do |statement|
|
400
|
-
statement.
|
401
|
-
yield statement
|
409
|
+
statement.graph_name = pattern.graph_name
|
410
|
+
yield statement if block_given?
|
402
411
|
end
|
403
412
|
end
|
404
413
|
|
414
|
+
|
405
415
|
#--------------------------------------------------------------------
|
406
416
|
# @group RDF::Mutable methods
|
407
417
|
|
@@ -432,6 +442,16 @@ module RDF::Sesame
|
|
432
442
|
response.code == "204"
|
433
443
|
end
|
434
444
|
|
445
|
+
##
|
446
|
+
# @private
|
447
|
+
# @see RDF::Mutable#delete
|
448
|
+
#
|
449
|
+
# Optimization to remove multiple statements in one query
|
450
|
+
def delete_statements(statements)
|
451
|
+
data = "DELETE DATA { #{statements_to_text_plain(statements)} }"
|
452
|
+
write_query data, 'sparql', {}
|
453
|
+
end
|
454
|
+
|
435
455
|
private
|
436
456
|
|
437
457
|
# Convert a list of statements to a text-plain-compatible text.
|
@@ -588,5 +608,29 @@ module RDF::Sesame
|
|
588
608
|
options[:context] = @context if @context
|
589
609
|
options
|
590
610
|
end
|
611
|
+
|
612
|
+
# @private
|
613
|
+
#
|
614
|
+
# Fetch the graph names from SESAME API
|
615
|
+
def fetch_graph_names
|
616
|
+
require 'json' unless defined?(::JSON)
|
617
|
+
|
618
|
+
response = server.get(path(:contexts), Server::ACCEPT_JSON)
|
619
|
+
json = ::JSON.parse(response.body)
|
620
|
+
|
621
|
+
json['results']['bindings'].map do |binding|
|
622
|
+
binding['contextID']
|
623
|
+
end
|
624
|
+
.map do |context_id|
|
625
|
+
case context_id['type'].to_s.to_sym
|
626
|
+
when :bnode
|
627
|
+
RDF::Node.new(context_id['value'])
|
628
|
+
when :uri
|
629
|
+
RDF::URI.new(context_id['value'])
|
630
|
+
else
|
631
|
+
nil
|
632
|
+
end
|
633
|
+
end.compact
|
634
|
+
end
|
591
635
|
end # class Repository
|
592
636
|
end # module RDF::Sesame
|
data/lib/rdf/sesame/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf-sesame
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arto Bendiken
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-01-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdf
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '2.0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '2.0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: addressable
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,14 +87,14 @@ dependencies:
|
|
87
87
|
requirements:
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: '
|
90
|
+
version: '2.0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version: '
|
97
|
+
version: '2.0'
|
98
98
|
description: RDF.rb plugin providing a Sesame 2.0 storage adapter.
|
99
99
|
email: public-rdf-ruby@w3.org
|
100
100
|
executables: []
|