activerdf_sesame 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +6 -0
- data/README +23 -16
- data/Rakefile +51 -31
- data/VERSION +1 -0
- data/lib/activerdf_sesame/sesame.rb +40 -57
- metadata +11 -9
data/CHANGELOG
ADDED
data/README
CHANGED
@@ -1,26 +1,33 @@
|
|
1
|
+
The Sesame2 adapter for ActiveRDF connects ActiveRDF with the Sesame2 RDF store.
|
1
2
|
|
2
|
-
|
3
|
+
== Benefits and disadvantages
|
4
|
+
Using Sesame2 through this adapter has the following benefits :
|
5
|
+
* Good performance, because java code is used for all communication
|
6
|
+
* Support for RDF Schema inferencing
|
7
|
+
* Support for quads/named graphs (as soon as I get around to implementing them in the adapter)
|
3
8
|
|
4
|
-
|
5
|
-
*
|
6
|
-
*
|
7
|
-
* support for
|
9
|
+
The disadvantages currently are:
|
10
|
+
* Requires installation of jruby and manual setting of the Java CLASSPATH
|
11
|
+
* No OWL inferencing (but on other ActiveRDF adapter currently has this anyway)
|
12
|
+
* No support for a database backend (Sesame2 uses its own native storage
|
13
|
+
interanlly, which is recommended anyway)
|
8
14
|
|
9
|
-
|
10
|
-
* installation of jruby and manual setting of the java CLASSPATH are required
|
11
|
-
* no owl inferencing (but all the other adapters also dont have this)
|
12
|
-
* no support for a database backend
|
15
|
+
The adapter uses Sesame 2 Alpha 4, which is distributed as a jar inside this gem.
|
13
16
|
|
14
|
-
|
17
|
+
== License
|
18
|
+
The adapter is distributed under LGPL, the Sesame2 jar is under the Aduna
|
19
|
+
license. See LICENSE for more information.
|
15
20
|
|
21
|
+
== Installation
|
16
22
|
For installation instructions visit: http://wiki.activerdf.org/ActiveRDF_and_RoR_and_Sesame
|
17
23
|
|
24
|
+
== More info
|
18
25
|
For more information about ActiveRDF visit:
|
19
|
-
http://www.activerdf.org/
|
20
|
-
http://wiki.activerdf.org/ActiveRDF
|
26
|
+
* http://www.activerdf.org/
|
27
|
+
* http://wiki.activerdf.org/ActiveRDF
|
21
28
|
|
22
|
-
For more information about Sesame 2, visit:
|
23
|
-
http://www.openrdf.org/
|
24
|
-
|
25
|
-
This ruby gem was created by Benjamin Heitmann <benjamin.heitmann@deri.org>
|
29
|
+
For more information about Sesame 2, visit:
|
30
|
+
* http://www.openrdf.org/
|
26
31
|
|
32
|
+
== Athors
|
33
|
+
* Benjamin Heitmann <benjamin.heitmann@deri.org>
|
data/Rakefile
CHANGED
@@ -1,55 +1,75 @@
|
|
1
|
+
require 'meta_project'
|
1
2
|
require 'rake'
|
2
3
|
require 'rake/testtask'
|
3
4
|
require 'rake/clean'
|
4
5
|
require 'rake/gempackagetask'
|
5
6
|
require 'rake/rdoctask'
|
6
|
-
require '
|
7
|
+
require 'rake/contrib/xforge'
|
8
|
+
require 'rubygems'
|
7
9
|
require 'fileutils'
|
8
|
-
|
10
|
+
require '../tools/rakehelp'
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
+
$version = IO.read('VERSION').strip
|
13
|
+
$name = 'activerdf_sesame'
|
14
|
+
$project = MetaProject::Project::XForge::RubyForge.new('activerdf')
|
12
15
|
|
13
|
-
|
14
|
-
|
16
|
+
# setup tests
|
17
|
+
setup_tests
|
18
|
+
setup_clean ["pkg", "lib/*.bundle", "*.gem", ".config"]
|
15
19
|
|
16
|
-
#
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
+
# setup rdoc
|
21
|
+
Rake::RDocTask.new do |rdoc|
|
22
|
+
rdoc.rdoc_dir = 'doc/rdoc'
|
23
|
+
rdoc.options << '--line-numbers'
|
24
|
+
rdoc.rdoc_files.add ['README', 'LICENSE', 'lib/**/*.rb', 'doc/**/*.rdoc']
|
25
|
+
end
|
20
26
|
|
21
|
-
|
22
|
-
|
23
|
-
'ext/*.jar',
|
24
|
-
'[A-Z]*',
|
25
|
-
'lib/**/*.rb',
|
26
|
-
'test/**/*',
|
27
|
-
]
|
27
|
+
desc "Does a full compile, test run"
|
28
|
+
task :default => [:test, :package]
|
28
29
|
|
29
30
|
# define package task
|
30
|
-
setup_gem(
|
31
|
-
spec.summary = "
|
31
|
+
setup_gem($name, $version) do |spec|
|
32
|
+
spec.summary = "jruby adapter to sesame2 datastore (for usage in ActiveRDF)"
|
32
33
|
spec.description = spec.summary
|
33
34
|
spec.author="Benjamin Heitmann <benjamin.heitmann@deri.org>"
|
34
35
|
spec.add_dependency('gem_plugin', '>= 0.2.1')
|
35
36
|
spec.add_dependency('activerdf', '>= 1.2')
|
36
|
-
spec.files =
|
37
|
-
|
37
|
+
spec.files = FileList[ 'ext/*.jar', '[A-Z]*', 'lib/**/*.rb', 'test/**/*' ].to_a
|
38
38
|
end
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
sh %{sudo gem install pkg/#{NAME}-#{@VERSION}.gem}
|
40
|
+
task :verify_rubyforge do
|
41
|
+
raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER']
|
42
|
+
raise "RUBYFORGE_PASSWORD environment variable not set!" unless ENV['RUBYFORGE_PASSWORD']
|
44
43
|
end
|
45
44
|
|
46
|
-
|
47
|
-
|
48
|
-
|
45
|
+
desc "Release files on RubyForge."
|
46
|
+
task :release_files => [:clean, :verify_rubyforge, :package ] do
|
47
|
+
release_files = FileList["pkg/#$name-#$version.gem"]
|
48
|
+
|
49
|
+
Rake::XForge::Release.new($project) do |release|
|
50
|
+
release.user_name = ENV['RUBYFORGE_USER']
|
51
|
+
release.password = ENV['RUBYFORGE_PASSWORD']
|
52
|
+
release.files = release_files.to_a
|
53
|
+
release.release_name = "#$name #$version"
|
54
|
+
release.package_name = "activerdf-sesame"
|
55
|
+
release.release_notes = ""
|
49
56
|
|
50
|
-
|
57
|
+
changes = []
|
58
|
+
File.open("CHANGELOG") do |file|
|
59
|
+
current = true
|
51
60
|
|
52
|
-
|
53
|
-
|
61
|
+
file.each do |line|
|
62
|
+
line.chomp!
|
63
|
+
if current and line =~ /^==/
|
64
|
+
current = false; next
|
65
|
+
end
|
66
|
+
break if line.empty? and not current
|
67
|
+
changes << line
|
68
|
+
end
|
69
|
+
end
|
70
|
+
release.release_changes = changes.join("\n")
|
71
|
+
end
|
54
72
|
end
|
55
73
|
|
74
|
+
desc "Release the latest version."
|
75
|
+
task :release => [ :verify_rubyforge, :release_files, :rdoc ]
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.2.2
|
@@ -119,69 +119,30 @@ class SesameAdapter < ActiveRdfAdapter
|
|
119
119
|
# you can specify a context to limit deletion to that context:
|
120
120
|
# delete(:s,:p,:o, 'http://context') will delete all triples with that context
|
121
121
|
def delete(s, p, o, c=nil)
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
else
|
127
|
-
raise ActiveRdfError, "the Sesame Adapter tried to delete a subject which was not of type RDFS::Resource, but of type #{s.class}"
|
128
|
-
end
|
129
|
-
if p.class == RDFS::Resource then
|
130
|
-
sesamePredicate = @valueFactory.createURI(p.uri)
|
131
|
-
elsif p == :p
|
132
|
-
sesamePredicate = nil
|
133
|
-
else
|
134
|
-
raise ActiveRdfError, "the Sesame Adapter tried to delete a predicate which was not of type RDFS::Resource, but of type #{p.class}"
|
135
|
-
end
|
136
|
-
if o.class == RDFS::Resource then
|
137
|
-
sesameObject = @valueFactory.createURI(o.uri)
|
138
|
-
elsif o == :o
|
139
|
-
sesameObject = nil
|
140
|
-
else
|
141
|
-
sesameObject = @valueFactory.createLiteral(o.to_s)
|
142
|
-
end
|
143
|
-
|
144
|
-
# TODO contexts
|
145
|
-
candidateStatements = @db.getStatements(sesameSubject, sesamePredicate, sesameObject, false)
|
146
|
-
|
122
|
+
params = activerdf_to_sesame(s, p, o, c)
|
123
|
+
|
124
|
+
# TODO: handle context
|
125
|
+
candidateStatements = @db.getStatements(params[0], params[1], params[2], false)
|
147
126
|
@db.remove(candidateStatements)
|
148
|
-
|
149
127
|
candidateStatements.close
|
150
|
-
|
128
|
+
|
129
|
+
@db
|
151
130
|
end
|
152
131
|
|
153
132
|
# adds triple(s,p,o) to datastore
|
154
133
|
# s,p must be resources, o can be primitive data or resource
|
155
134
|
def add(s,p,o,c=nil)
|
156
|
-
|
157
|
-
if s.class == RDFS::Resource then
|
158
|
-
sesameSubject = @valueFactory.createURI(s.uri)
|
159
|
-
else
|
160
|
-
raise ActiveRdfError, "the Sesame Adapter tried to add a subject which was not of type RDFS::Resource, but of type #{s.class}"
|
161
|
-
end
|
162
|
-
if p.class == RDFS::Resource then
|
163
|
-
sesamePredicate = @valueFactory.createURI(p.uri)
|
164
|
-
else
|
165
|
-
raise ActiveRdfError, "the Sesame Adapter tried to add a predicate which was not of type RDFS::Resource, but of type #{p.class}"
|
166
|
-
end
|
167
|
-
if o.class == RDFS::Resource then
|
168
|
-
sesameObject = @valueFactory.createURI(o.uri)
|
169
|
-
else
|
170
|
-
sesameObject = @valueFactory.createLiteral(o.to_s)
|
171
|
-
end
|
172
|
-
|
173
135
|
# TODO: handle context, especially if it is null
|
174
|
-
|
175
|
-
@db.add(sesameSubject, sesamePredicate, sesameObject)
|
176
|
-
# for contexts, just add 4th parameter
|
177
|
-
|
178
136
|
# TODO: do we need to handle errors from the java side ?
|
137
|
+
|
138
|
+
check_input = [s,p,o]
|
139
|
+
raise ActiveRdfError, "cannot add triple with nil subject, predicate, or object" if check_input.any? {|r| r.nil? || r.is_a?(Symbol) }
|
179
140
|
|
180
|
-
|
141
|
+
params = activerdf_to_sesame(s, p, o, c)
|
142
|
+
@db.add(params[0], params[1], params[2])
|
143
|
+
@db
|
181
144
|
end
|
182
145
|
|
183
|
-
|
184
|
-
|
185
146
|
# flushing is done automatically, because we run sesame2 in autocommit mode
|
186
147
|
def flush
|
187
148
|
true
|
@@ -203,18 +164,17 @@ class SesameAdapter < ActiveRdfAdapter
|
|
203
164
|
# a to a RDFHandler, which we supply, by constructing a NTriplesWriter, which writes to StringWriter,
|
204
165
|
# and we kindly ask that StringWriter to make a string for us. Note, you have to use stringy.to_s,
|
205
166
|
# somehow stringy.toString does not work. yes yes, those wacky jruby guys ;)
|
206
|
-
|
207
|
-
sesameWriter = NTriplesWriter.new(
|
167
|
+
_string = StringWriter.new
|
168
|
+
sesameWriter = NTriplesWriter.new(_string)
|
208
169
|
@db.export(sesameWriter)
|
209
|
-
return
|
170
|
+
return _string.to_s
|
210
171
|
end
|
211
172
|
|
212
173
|
# loads triples from file in ntriples format
|
213
174
|
def load(file)
|
214
175
|
reader = FileReader.new(file)
|
215
176
|
@db.add(reader, "", RDFFormat::NTRIPLES)
|
216
|
-
|
217
|
-
return @db
|
177
|
+
@db
|
218
178
|
end
|
219
179
|
|
220
180
|
# executes ActiveRDF query on the sesame triple store associated with this adapter
|
@@ -308,5 +268,28 @@ class SesameAdapter < ActiveRdfAdapter
|
|
308
268
|
raise ActiveRdfError, "the Sesame Adapter tried to return something which is neither a URI nor a Literal, but is instead a #{input.java_class.name}"
|
309
269
|
end
|
310
270
|
end
|
311
|
-
|
271
|
+
|
272
|
+
# converts spoc input into sesame objects (RDFS::Resource into
|
273
|
+
# valueFactory.createURI etc.)
|
274
|
+
def activerdf_to_sesame(s, p, o, c)
|
275
|
+
# TODO: manage contexts
|
276
|
+
params = []
|
277
|
+
|
278
|
+
# construct sesame parameters from s,p,o,c
|
279
|
+
[s,p,o].each_with_index do |r,i|
|
280
|
+
params[i] = case r
|
281
|
+
when RDFS::Resource
|
282
|
+
@valueFactory.createURI(s.uri)
|
283
|
+
when Symbol
|
284
|
+
nil
|
285
|
+
else
|
286
|
+
if i < 2 # subject or predicate
|
287
|
+
raise ActiveRdfError, "trying to add or delete a subject, predicate, or object of type #{r.class}"
|
288
|
+
else
|
289
|
+
@valueFactory.createLiteral(o.to_s)
|
290
|
+
end
|
291
|
+
end
|
292
|
+
end
|
293
|
+
params << c
|
294
|
+
end
|
312
295
|
end
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.2
|
3
3
|
specification_version: 1
|
4
4
|
name: activerdf_sesame
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
7
|
-
date: 2007-02-
|
8
|
-
summary:
|
6
|
+
version: 0.2.2
|
7
|
+
date: 2007-02-13 00:00:00 +00:00
|
8
|
+
summary: jruby adapter to sesame2 datastore (for usage in ActiveRDF)
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
11
|
email:
|
12
12
|
homepage:
|
13
13
|
rubyforge_project:
|
14
|
-
description:
|
14
|
+
description: jruby adapter to sesame2 datastore (for usage in ActiveRDF)
|
15
15
|
autorequire:
|
16
16
|
default_executable:
|
17
17
|
bindir: bin
|
@@ -29,18 +29,20 @@ post_install_message:
|
|
29
29
|
authors:
|
30
30
|
- Benjamin Heitmann <benjamin.heitmann@deri.org>
|
31
31
|
files:
|
32
|
-
- ext/wrapper-sesame2.jar
|
33
32
|
- ext/openrdf-sesame-2.0-alpha4-onejar.jar
|
33
|
+
- ext/wrapper-sesame2.jar
|
34
34
|
- LICENSE
|
35
|
-
- README
|
36
|
-
- Rakefile
|
37
35
|
- LICENSE-aduna
|
38
36
|
- LICENSE-lgpl
|
37
|
+
- README
|
38
|
+
- Rakefile
|
39
|
+
- VERSION
|
40
|
+
- CHANGELOG
|
39
41
|
- lib/activerdf_sesame/init.rb
|
40
42
|
- lib/activerdf_sesame/sesame.rb
|
41
43
|
- test/eyal-foaf.nt
|
42
|
-
- test/test_sesame_adapter.rb
|
43
44
|
- test/eyal-foaf.rdf
|
45
|
+
- test/test_sesame_adapter.rb
|
44
46
|
test_files: []
|
45
47
|
|
46
48
|
rdoc_options: []
|