rdf-sesame 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +8 -4
- data/VERSION +1 -1
- data/lib/rdf/sesame.rb +2 -2
- data/lib/rdf/sesame/connection.rb +19 -4
- data/lib/rdf/sesame/repository.rb +121 -27
- data/lib/rdf/sesame/server.rb +17 -16
- data/lib/rdf/sesame/version.rb +2 -2
- metadata +5 -5
data/README
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
RDF::Sesame: Sesame 2.0 Adapter for RDF.rb
|
2
2
|
==========================================
|
3
3
|
|
4
|
-
This is
|
4
|
+
This is an [RDF.rb](http://rdf.rubyforge.org/) plugin that adds support for
|
5
|
+
Sesame 2.0-compatible RDF repositories accessed using Sesame's
|
6
|
+
[HTTP API](http://www.openrdf.org/doc/sesame2/system/ch08.html).
|
7
|
+
|
8
|
+
* <http://github.com/bendiken/rdf-sesame>
|
5
9
|
|
6
10
|
### About Sesame
|
7
11
|
|
@@ -10,13 +14,13 @@ This is a Sesame 2.0 adapter for [RDF.rb](http://rdf.rubyforge.org/).
|
|
10
14
|
Documentation
|
11
15
|
-------------
|
12
16
|
|
13
|
-
*
|
17
|
+
* {RDF::Sesame}
|
14
18
|
|
15
19
|
Dependencies
|
16
20
|
------------
|
17
21
|
|
18
|
-
* [RDF.rb](http://
|
19
|
-
* [JSON](http://
|
22
|
+
* [RDF.rb](http://gemcutter.org/gems/rdf) (>= 0.0.9)
|
23
|
+
* [JSON](http://gemcutter.org/gems/json_pure) (>= 1.2.0)
|
20
24
|
|
21
25
|
Installation
|
22
26
|
------------
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/lib/rdf/sesame.rb
CHANGED
@@ -7,8 +7,8 @@ module RDF
|
|
7
7
|
# Dependencies
|
8
8
|
# ------------
|
9
9
|
#
|
10
|
-
# * [RDF.rb](http://
|
11
|
-
# * [JSON](http://
|
10
|
+
# * [RDF.rb](http://gemcutter.org/gems/rdf) (>= 0.0.9)
|
11
|
+
# * [JSON](http://gemcutter.org/gems/json_pure) (>= 1.2.0)
|
12
12
|
#
|
13
13
|
# Installation
|
14
14
|
# ------------
|
@@ -92,7 +92,7 @@ module RDF::Sesame
|
|
92
92
|
|
93
93
|
# Preserve only those URI components that we actually require for
|
94
94
|
# establishing a connection to the HTTP server in question:
|
95
|
-
@url = RDF::URI.new(
|
95
|
+
@url = RDF::URI.new(to_hash)
|
96
96
|
|
97
97
|
@headers = options.delete(:headers) || {}
|
98
98
|
@options = options
|
@@ -307,12 +307,20 @@ module RDF::Sesame
|
|
307
307
|
# Performs an HTTP POST request for the given Sesame `path`.
|
308
308
|
#
|
309
309
|
# @param [String, #to_s] path
|
310
|
+
# @param [String, #to_s] data
|
310
311
|
# @param [Hash{String => String}] headers
|
311
312
|
# @yield [response]
|
312
313
|
# @yieldparam [Net::HTTPResponse] response
|
313
314
|
# @return [Net::HTTPResponse]
|
314
|
-
def post(path, headers = {}, &block)
|
315
|
-
|
315
|
+
def post(path, data, headers = {}, &block)
|
316
|
+
Net::HTTP.start(host, port) do |http|
|
317
|
+
response = http.post(path.to_s, data.to_s, @headers.merge(headers))
|
318
|
+
if block_given?
|
319
|
+
block.call(response)
|
320
|
+
else
|
321
|
+
response
|
322
|
+
end
|
323
|
+
end
|
316
324
|
end
|
317
325
|
|
318
326
|
##
|
@@ -336,7 +344,14 @@ module RDF::Sesame
|
|
336
344
|
# @yieldparam [Net::HTTPResponse] response
|
337
345
|
# @return [Net::HTTPResponse]
|
338
346
|
def delete(path, headers = {}, &block)
|
339
|
-
|
347
|
+
Net::HTTP.start(host, port) do |http|
|
348
|
+
response = http.delete(path.to_s, @headers.merge(headers))
|
349
|
+
if block_given?
|
350
|
+
block.call(response)
|
351
|
+
else
|
352
|
+
response
|
353
|
+
end
|
354
|
+
end
|
340
355
|
end
|
341
356
|
end
|
342
357
|
end
|
@@ -6,22 +6,20 @@ module RDF::Sesame
|
|
6
6
|
# servers.
|
7
7
|
#
|
8
8
|
# @example Opening a Sesame repository (1)
|
9
|
-
# url
|
10
|
-
#
|
9
|
+
# url = "http://localhost:8080/openrdf-sesame/repositories/SYSTEM"
|
10
|
+
# repository = RDF::Sesame::Repository.new(url)
|
11
11
|
#
|
12
12
|
# @example Opening a Sesame repository (2)
|
13
13
|
# server = RDF::Sesame::Server.new("http://localhost:8080/openrdf-sesame")
|
14
|
-
#
|
14
|
+
# repository = RDF::Sesame::Repository.new(:server => server, :id => :SYSTEM)
|
15
15
|
#
|
16
16
|
# @example Opening a Sesame repository (3)
|
17
17
|
# server = RDF::Sesame::Server.new("http://localhost:8080/openrdf-sesame")
|
18
|
-
#
|
18
|
+
# repository = server.repository(:SYSTEM)
|
19
19
|
#
|
20
20
|
# @see RDF::Sesame
|
21
21
|
# @see http://www.openrdf.org/doc/sesame2/system/ch08.html
|
22
22
|
class Repository < RDF::Repository
|
23
|
-
include Enumerable
|
24
|
-
|
25
23
|
# @return [RDF::URI]
|
26
24
|
attr_reader :url
|
27
25
|
alias_method :uri, :url
|
@@ -55,18 +53,19 @@ module RDF::Sesame
|
|
55
53
|
case url_or_options
|
56
54
|
when String
|
57
55
|
initialize(RDF::URI.new(url_or_options), &block)
|
56
|
+
|
58
57
|
when RDF::URI
|
59
|
-
require 'addressable/uri' unless defined?(Addressable)
|
60
58
|
require 'pathname' unless defined?(Pathname)
|
61
59
|
@uri = url_or_options
|
62
|
-
@server = Server.new(RDF::URI.new(
|
60
|
+
@server = Server.new(RDF::URI.new({
|
63
61
|
:scheme => @uri.scheme,
|
64
62
|
:userinfo => @uri.userinfo,
|
65
63
|
:host => @uri.host,
|
66
64
|
:port => @uri.port,
|
67
65
|
:path => Pathname.new(@uri.path).parent.parent.to_s, # + '../..'
|
68
|
-
}))
|
66
|
+
}))
|
69
67
|
@options = {}
|
68
|
+
|
70
69
|
when Hash
|
71
70
|
raise ArgumentError.new("missing options[:server]") unless url_or_options.has_key?(:server)
|
72
71
|
raise ArgumentError.new("missing options[:id]") unless url_or_options.has_key?(:id)
|
@@ -75,6 +74,7 @@ module RDF::Sesame
|
|
75
74
|
@id = @options.delete(:id)
|
76
75
|
@uri = @options.delete(:uri) || server.url("repositories/#{@id}")
|
77
76
|
@title = @options.delete(:title)
|
77
|
+
|
78
78
|
else
|
79
79
|
raise ArgumentError.new("wrong argument type #{url_or_options.class} (expected String, RDF::URI or Hash)")
|
80
80
|
end
|
@@ -90,21 +90,53 @@ module RDF::Sesame
|
|
90
90
|
##
|
91
91
|
# Returns the URL for the given repository-relative `path`.
|
92
92
|
#
|
93
|
-
# @param [String, #to_s]
|
93
|
+
# @param [String, #to_s] path
|
94
|
+
# @param [Hash, RDF::Statement] query
|
94
95
|
# @return [RDF::URI]
|
95
|
-
def url(path = nil)
|
96
|
-
path ? RDF::URI.new("#{@uri}/#{path}") : @uri # FIXME
|
96
|
+
def url(path = nil, query = {})
|
97
|
+
url = path ? RDF::URI.new("#{@uri}/#{path}") : @uri.dup # FIXME
|
98
|
+
unless query.nil?
|
99
|
+
case query
|
100
|
+
when RDF::Statement
|
101
|
+
writer = RDF::NTriples::Writer.new
|
102
|
+
query = {
|
103
|
+
:subj => writer.format_value(query.subject),
|
104
|
+
:pred => writer.format_value(query.predicate),
|
105
|
+
:obj => writer.format_value(query.object),
|
106
|
+
}
|
107
|
+
url.query_values = query
|
108
|
+
when Hash then query
|
109
|
+
url.query_values = query unless query.empty?
|
110
|
+
end
|
111
|
+
end
|
112
|
+
return url
|
97
113
|
end
|
98
114
|
|
99
115
|
alias_method :uri, :url
|
100
116
|
|
117
|
+
##
|
118
|
+
# Returns `true` to indicate that this repository is durable.
|
119
|
+
#
|
120
|
+
# @return [Boolean]
|
121
|
+
def durable?
|
122
|
+
true # FIXME
|
123
|
+
end
|
124
|
+
|
125
|
+
##
|
126
|
+
# Returns `true` if this repository contains no RDF statements.
|
127
|
+
#
|
128
|
+
# @return [Boolean]
|
129
|
+
def empty?
|
130
|
+
count.zero?
|
131
|
+
end
|
132
|
+
|
101
133
|
##
|
102
134
|
# Returns the number of RDF statements in this repository.
|
103
135
|
#
|
104
136
|
# @return [Integer]
|
105
137
|
# @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e569
|
106
|
-
def
|
107
|
-
get(:size) do |response|
|
138
|
+
def count
|
139
|
+
server.get(url(:size)) do |response|
|
108
140
|
case response
|
109
141
|
when Net::HTTPSuccess
|
110
142
|
size = response.body
|
@@ -114,21 +146,83 @@ module RDF::Sesame
|
|
114
146
|
end
|
115
147
|
end
|
116
148
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
149
|
+
##
|
150
|
+
# Returns `true` if this repository contains the given RDF statement.
|
151
|
+
#
|
152
|
+
# @param [RDF::Statement] statement
|
153
|
+
# @return [Boolean]
|
154
|
+
# @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e304
|
155
|
+
def has_statement?(statement)
|
156
|
+
server.get(url(:statements, statement), 'Accept' => 'text/plain') do |response|
|
157
|
+
case response
|
158
|
+
when Net::HTTPSuccess
|
159
|
+
reader = RDF::NTriples::Reader.new(response.body)
|
160
|
+
reader.include?(statement)
|
161
|
+
else false
|
130
162
|
end
|
131
163
|
end
|
164
|
+
end
|
132
165
|
|
166
|
+
##
|
167
|
+
# Enumerates each RDF statement in this repository.
|
168
|
+
#
|
169
|
+
# @yield [statement]
|
170
|
+
# @yieldparam [RDF::Statement] statement
|
171
|
+
# @return [Enumerator]
|
172
|
+
# @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e304
|
173
|
+
def each(&block)
|
174
|
+
server.get(url(:statements), 'Accept' => 'text/plain') do |response|
|
175
|
+
case response
|
176
|
+
when Net::HTTPSuccess
|
177
|
+
reader = RDF::NTriples::Reader.new(response.body)
|
178
|
+
reader.each_statement(&block)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
##
|
184
|
+
# Inserts the given RDF statement into this repository.
|
185
|
+
#
|
186
|
+
# @param [RDF::Statement] statement
|
187
|
+
# @return [Boolean]
|
188
|
+
# @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e304
|
189
|
+
def insert_statement(statement)
|
190
|
+
data = RDF::NTriples::Writer.buffer { |writer| writer << statement } # FIXME for RDF.rb 0.1.0
|
191
|
+
server.post(url(:statements), data, 'Content-Type' => 'text/plain') do |response|
|
192
|
+
case response
|
193
|
+
when Net::HTTPSuccess then true
|
194
|
+
else false
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
##
|
200
|
+
# Deletes the given RDF statement from this repository.
|
201
|
+
#
|
202
|
+
# @param [RDF::Statement] statement
|
203
|
+
# @return [Boolean]
|
204
|
+
# @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e304
|
205
|
+
def delete_statement(statement)
|
206
|
+
server.delete(url(:statements, statement)) do |response|
|
207
|
+
case response
|
208
|
+
when Net::HTTPSuccess then true
|
209
|
+
else false
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
##
|
215
|
+
# Deletes all RDF statements from this repository.
|
216
|
+
#
|
217
|
+
# @return [Boolean]
|
218
|
+
# @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e304
|
219
|
+
def clear_statements
|
220
|
+
server.delete(url(:statements)) do |response|
|
221
|
+
case response
|
222
|
+
when Net::HTTPSuccess then true
|
223
|
+
else false
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
133
227
|
end
|
134
228
|
end
|
data/lib/rdf/sesame/server.rb
CHANGED
@@ -128,7 +128,7 @@ module RDF::Sesame
|
|
128
128
|
# @return [Integer]
|
129
129
|
# @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e180
|
130
130
|
def protocol
|
131
|
-
get(:protocol) do |response|
|
131
|
+
get(url(:protocol)) do |response|
|
132
132
|
case response
|
133
133
|
when Net::HTTPSuccess
|
134
134
|
version = response.body
|
@@ -186,7 +186,7 @@ module RDF::Sesame
|
|
186
186
|
def repositories
|
187
187
|
require 'json' unless defined?(JSON)
|
188
188
|
|
189
|
-
get(:repositories, ACCEPT_JSON) do |response|
|
189
|
+
get(url(:repositories), ACCEPT_JSON) do |response|
|
190
190
|
case response
|
191
191
|
when Net::HTTPSuccess
|
192
192
|
json = JSON.parse(response.body)
|
@@ -206,21 +206,22 @@ module RDF::Sesame
|
|
206
206
|
end
|
207
207
|
end
|
208
208
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
# Performs an HTTP GET request for the given Sesame server `path`.
|
213
|
-
#
|
214
|
-
# @param [String, #to_s] path
|
215
|
-
# @param [Hash{String => String}] headers
|
216
|
-
# @yield [response]
|
217
|
-
# @yieldparam [Net::HTTPResponse] response
|
218
|
-
# @return [Net::HTTPResponse]
|
219
|
-
def get(path, headers = {}, &block)
|
220
|
-
@connection.open do
|
221
|
-
@connection.get(url(path), headers, &block)
|
222
|
-
end
|
209
|
+
def get(path, headers = {}, &block) # @private
|
210
|
+
self.connection.open do
|
211
|
+
self.connection.get(path, headers, &block)
|
223
212
|
end
|
213
|
+
end
|
224
214
|
|
215
|
+
def post(path, data, headers = {}, &block) # @private
|
216
|
+
self.connection.open do
|
217
|
+
self.connection.post(path, data, headers, &block)
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
def delete(path, headers = {}, &block) # @private
|
222
|
+
self.connection.open do
|
223
|
+
self.connection.delete(path, headers, &block)
|
224
|
+
end
|
225
|
+
end
|
225
226
|
end
|
226
227
|
end
|
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: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arto Bendiken
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-02-02 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -40,10 +40,10 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 0.0.
|
43
|
+
version: 0.0.9
|
44
44
|
version:
|
45
45
|
- !ruby/object:Gem::Dependency
|
46
|
-
name:
|
46
|
+
name: json_pure
|
47
47
|
type: :runtime
|
48
48
|
version_requirement:
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -52,7 +52,7 @@ dependencies:
|
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: 1.2.0
|
54
54
|
version:
|
55
|
-
description: RDF
|
55
|
+
description: RDF.rb plugin providing a Sesame 2.0 storage adapter.
|
56
56
|
email: arto.bendiken@gmail.com
|
57
57
|
executables: []
|
58
58
|
|