rdf-sesame 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|