activerdf_net7 1.6.16 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +63 -0
- data/activerdf-jena/lib/activerdf_jena/jena.rb +4 -4
- data/activerdf-jena/lib/activerdf_jena/jena_adapter.rb +55 -55
- data/activerdf-jena/lib/activerdf_jena/lucene.rb +1 -1
- data/activerdf-jena/lib/activerdf_jena/ng4j.rb +7 -7
- data/activerdf-jena/lib/activerdf_jena/ng4j_adapter.rb +47 -47
- data/activerdf-jena/lib/activerdf_jena/pellet.rb +1 -1
- data/activerdf-jena/test/test_jena_adapter.rb +121 -120
- data/activerdf-jena/test/test_ng4j_adapter.rb +111 -110
- data/activerdf-rdflite/lib/activerdf_rdflite/fetching.rb +23 -19
- data/activerdf-rdflite/lib/activerdf_rdflite/rdflite.rb +153 -277
- data/activerdf-rdflite/lib/activerdf_rdflite/suggesting.rb +2 -2
- data/activerdf-rdflite/test/test_fetching.rb +7 -22
- data/activerdf-rdflite/test/test_rdflite.rb +44 -257
- data/activerdf-redland/lib/activerdf_redland/redland.rb +246 -282
- data/activerdf-redland/test/test_redland_adapter.rb +62 -224
- data/activerdf-sesame/ext/wrapper-sesame2.jar +0 -0
- data/activerdf-sesame/java/build.number +2 -2
- data/activerdf-sesame/java/build.xml +0 -0
- data/activerdf-sesame/java/lib/junit-3.8.2.jar +0 -0
- data/activerdf-sesame/java/settings.xml +0 -0
- data/activerdf-sesame/java/src/org/activerdf/wrapper/sesame2/WrapperForSesame2.java +0 -0
- data/activerdf-sesame/java/temp/build/org/activerdf/wrapper/sesame2/WrapperForSesame2.class +0 -0
- data/activerdf-sesame/java/temp/manifest/MANIFEST.MF +2 -2
- data/activerdf-sesame/java/test-src/org/activerdf/wrapper/sesame2/TestWrapperForSesame2.java +0 -0
- data/activerdf-sesame/lib/activerdf_sesame/sesame.rb +360 -364
- data/activerdf-sesame/test/test_sesame_adapter.rb +85 -83
- data/activerdf-sparql/lib/activerdf_sparql/sparql.rb +147 -148
- data/activerdf-sparql/lib/activerdf_sparql/sparql_result_parser.rb +5 -5
- data/activerdf-sparql/test/test_sparql_adapter.rb +2 -0
- data/activerdf-yars/lib/activerdf_yars/jars2.rb +85 -83
- data/lib/active_rdf/federation/active_rdf_adapter.rb +26 -39
- data/lib/active_rdf/federation/connection_pool.rb +119 -110
- data/lib/active_rdf/federation/federation_manager.rb +51 -51
- data/lib/active_rdf/objectmanager/bnode.rb +8 -2
- data/lib/active_rdf/objectmanager/literal.rb +81 -50
- data/lib/active_rdf/objectmanager/namespace.rb +117 -84
- data/lib/active_rdf/objectmanager/object_manager.rb +101 -96
- data/lib/active_rdf/objectmanager/ordered_set.rb +1 -1
- data/lib/active_rdf/objectmanager/property.rb +345 -0
- data/lib/active_rdf/objectmanager/property_list.rb +4 -4
- data/lib/active_rdf/objectmanager/property_lookup.rb +57 -0
- data/lib/active_rdf/objectmanager/resource.rb +293 -501
- data/lib/active_rdf/objectmanager/resource_like.rb +2 -2
- data/lib/active_rdf/objectmanager/resource_query.rb +85 -0
- data/lib/active_rdf/queryengine/ntriples_parser.rb +75 -68
- data/lib/active_rdf/queryengine/query.rb +237 -183
- data/lib/active_rdf/queryengine/query2jars2.rb +17 -15
- data/lib/active_rdf/queryengine/query2sparql.rb +107 -101
- data/lib/active_rdf.rb +28 -17
- data/lib/active_rdf_helpers.rb +37 -5
- data/lib/active_rdf_log.rb +11 -11
- data/test/adapters/test_activerdf_adapter.rb +138 -0
- data/test/{test_adapters.rb → adapters/test_adapters.rb} +6 -24
- data/test/adapters/test_bnode_capable_adapter.rb +31 -0
- data/test/adapters/test_context_aware_adapter.rb +31 -0
- data/test/adapters/test_network_aware_adapter.rb +29 -0
- data/test/adapters/test_persistent_adapter.rb +21 -0
- data/test/adapters/test_read_only_adapter.rb +15 -0
- data/test/adapters/test_reasoning_adapter.rb +11 -0
- data/test/adapters/test_writable_adapter.rb +163 -0
- data/test/common.rb +78 -96
- data/test/federation/test_connection_pool.rb +25 -44
- data/test/federation/test_federation_manager.rb +45 -45
- data/test/objectmanager/test_literal.rb +47 -26
- data/test/objectmanager/test_namespace.rb +3 -1
- data/test/objectmanager/test_object_manager.rb +35 -45
- data/test/objectmanager/test_ordered_set.rb +1 -1
- data/test/objectmanager/test_property.rb +261 -0
- data/test/objectmanager/test_resource_reading.rb +196 -104
- data/test/objectmanager/test_resource_reasoning.rb +26 -0
- data/test/objectmanager/test_resource_writing.rb +34 -25
- data/test/queryengine/my_external_resource.rb +5 -1
- data/test/queryengine/test_external_resource_class.rb +1 -8
- data/test/queryengine/test_ntriples_parser.rb +5 -3
- data/test/queryengine/test_query.rb +3 -3
- data/test/queryengine/test_query2jars2.rb +2 -2
- data/test/queryengine/test_query2sparql.rb +2 -2
- data/test/queryengine/test_query_engine.rb +46 -28
- metadata +16 -8
- data/activerdf-rdflite/test/test_bnode_data.nt +0 -5
- data/activerdf-rdflite/test/test_data.nt +0 -32
- data/activerdf-rdflite/test/test_escaped_data.nt +0 -2
- data/activerdf-redland/test/test_person_data.nt +0 -42
- data/test/objectmanager/test_talia_syntax.rb +0 -68
@@ -3,7 +3,7 @@
|
|
3
3
|
# License:: LGPL
|
4
4
|
|
5
5
|
class NG4JAdapter < ActiveRdfAdapter
|
6
|
-
|
6
|
+
|
7
7
|
ConnectionPool.register_adapter(:ng4j, self)
|
8
8
|
|
9
9
|
class NG4JAdapterConfigurationError < StandardError
|
@@ -16,9 +16,9 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
16
16
|
attr_accessor :root_directory
|
17
17
|
attr_accessor :graphset
|
18
18
|
|
19
|
-
# :database
|
19
|
+
# :database
|
20
20
|
# either use :url, :type, :username, AND :password (for a
|
21
|
-
# regular connection) OR :datasource AND :type (for a container
|
21
|
+
# regular connection) OR :datasource AND :type (for a container
|
22
22
|
# connection), default to memory data store
|
23
23
|
# example for a derby connection:
|
24
24
|
# :database => {:url => "jdbc:hsqldb:file:/some/location/on/your/drive", :type => "hsql", :username => "sa", :password => ""}
|
@@ -29,7 +29,7 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
29
29
|
def initialize(params = {})
|
30
30
|
dbparams = params[:database]
|
31
31
|
self.keyword_search = params[:lucene]
|
32
|
-
|
32
|
+
|
33
33
|
# if the model name is not provided and file persistence is used, then jena just
|
34
34
|
# creates random files in the tmp dir. not good, as we need to know the model name
|
35
35
|
# to have persistence
|
@@ -38,12 +38,12 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
38
38
|
else
|
39
39
|
self.model_name = "http://deri.org/defaultgraph"
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
# do some sanity checking
|
43
43
|
if self.keyword_search? && !LuceneARQ.lucene_available?
|
44
44
|
raise NG4JAdapterConfigurationError, "Lucene requested but is not available"
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
# NG4J only supports in-memory store and database storage with HSQL, mysql and postgresql
|
48
48
|
if dbparams
|
49
49
|
|
@@ -55,22 +55,22 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
55
55
|
rescue NameError
|
56
56
|
raise NG4JAdapterConfigurationError, "database type #{dbparams[:type]} not recognized"
|
57
57
|
end
|
58
|
-
|
59
|
-
self.connection = NG4J::DB::DriverManager.getConnection(dbparams[:url],
|
58
|
+
|
59
|
+
self.connection = NG4J::DB::DriverManager.getConnection(dbparams[:url],
|
60
60
|
dbparams[:username],
|
61
61
|
dbparams[:password])
|
62
|
-
|
62
|
+
|
63
63
|
self.graphset = NG4J::DB::NamedGraphSetDB.new(self.connection)
|
64
|
-
|
65
|
-
else
|
66
|
-
self.graphset = NG4J::Impl::NamedGraphSetImpl.new()
|
64
|
+
|
65
|
+
else
|
66
|
+
self.graphset = NG4J::Impl::NamedGraphSetImpl.new()
|
67
67
|
end
|
68
68
|
|
69
69
|
self.model = self.graphset.asJenaModel(self.model_name)
|
70
|
-
|
70
|
+
|
71
71
|
self.reads = true
|
72
72
|
self.writes = true
|
73
|
-
|
73
|
+
|
74
74
|
self
|
75
75
|
end
|
76
76
|
|
@@ -116,7 +116,7 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
116
116
|
o = (is_wildcard?(object) ? Jena::Graph::Node.create("??") : build_object(object))
|
117
117
|
|
118
118
|
self.graphset.removeQuad(NG4J::Internal::Quad.new(c, s, p, o))
|
119
|
-
|
119
|
+
|
120
120
|
self.model.prepare if self.model.respond_to? :prepare
|
121
121
|
self.model.rebind if self.model.respond_to? :rebind
|
122
122
|
end
|
@@ -127,10 +127,10 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
127
127
|
if context.nil?
|
128
128
|
context = RDFS::Resource.new(self.model_name)
|
129
129
|
end
|
130
|
-
|
131
|
-
self.graphset.addQuad(NG4J::Internal::Quad.new(build_context(context), build_subject(subject),
|
130
|
+
|
131
|
+
self.graphset.addQuad(NG4J::Internal::Quad.new(build_context(context), build_subject(subject),
|
132
132
|
build_predicate(predicate), build_object(object)))
|
133
|
-
|
133
|
+
|
134
134
|
self.model.prepare if self.model.respond_to? :prepare
|
135
135
|
self.model.rebind if self.model.respond_to? :rebind
|
136
136
|
end
|
@@ -143,12 +143,12 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
143
143
|
# :format
|
144
144
|
# format -- :ntriples, :n3, or :rdfxml, default :rdfxml
|
145
145
|
# :into
|
146
|
-
# :default_model for the main model, otherwise the contents of the uri get loaded
|
147
|
-
# into a context with the same uri
|
146
|
+
# :default_model for the main model, otherwise the contents of the uri get loaded
|
147
|
+
# into a context with the same uri
|
148
148
|
# TODO: add quad support
|
149
149
|
def load(uri_as_string, params = {})
|
150
150
|
format = params[:format] ? params[:format] : :rdfxml
|
151
|
-
|
151
|
+
|
152
152
|
jena_format =
|
153
153
|
case format
|
154
154
|
when :rdfxml
|
@@ -165,20 +165,20 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
165
165
|
else
|
166
166
|
self.graphset.read(uri_as_string, jena_format)
|
167
167
|
end
|
168
|
-
|
168
|
+
|
169
169
|
self.lucene_index_behind = true
|
170
|
-
|
171
|
-
end
|
170
|
+
|
171
|
+
end
|
172
172
|
|
173
173
|
# this method gets called by the ActiveRDF query engine
|
174
174
|
# TODO: add quad support
|
175
|
-
def
|
175
|
+
def execute(query)
|
176
176
|
|
177
177
|
if self.keyword_search? && query.keyword?
|
178
|
-
|
178
|
+
|
179
179
|
# duplicate the query
|
180
180
|
query_with_keywords = query.dup
|
181
|
-
|
181
|
+
|
182
182
|
# now duplicate the where stuff so we can fiddle with it...
|
183
183
|
# this is GROSS -- fix this if Query ever sprouts a proper
|
184
184
|
# deep copy or a where_clauses setter
|
@@ -191,7 +191,7 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
191
191
|
#query.where("lucene_literal_#{var}".to_sym, LuceneARQ::KEYWORD_PREDICATE, keyword)
|
192
192
|
#query.where(var, "lucene_property_#{var}".to_sym, "lucene_literal_#{var}".to_sym)
|
193
193
|
|
194
|
-
# use this if activerdf expects the literal to come back, not the
|
194
|
+
# use this if activerdf expects the literal to come back, not the
|
195
195
|
# subject, or if using indexbuildersubject (which makes the subject
|
196
196
|
# come back instead of the literal
|
197
197
|
query_with_keywords.where(var, RDFS::Resource.new(LuceneARQ::KEYWORD_PREDICATE), keyword)
|
@@ -210,17 +210,17 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
210
210
|
return [[true]] if results.size > 0
|
211
211
|
return [[false]]
|
212
212
|
end
|
213
|
-
|
213
|
+
|
214
214
|
if query.count?
|
215
215
|
return results.size
|
216
216
|
end
|
217
217
|
|
218
218
|
results
|
219
|
-
|
219
|
+
|
220
220
|
end
|
221
221
|
|
222
222
|
# ==========================================================================
|
223
|
-
# put private methods here to seperate api methods from the
|
223
|
+
# put private methods here to seperate api methods from the
|
224
224
|
# inner workings of the adapter
|
225
225
|
private
|
226
226
|
|
@@ -234,7 +234,7 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
234
234
|
else
|
235
235
|
objlit = object
|
236
236
|
end
|
237
|
-
|
237
|
+
|
238
238
|
if objlit.type
|
239
239
|
type = Jena::Datatypes::TypeMapper.getInstance.getTypeByName(objlit.type.uri)
|
240
240
|
o = Jena::Graph::Node.createLiteral(objlit.value.to_s, nil, type)
|
@@ -243,11 +243,11 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
243
243
|
else
|
244
244
|
o = Jena::Graph::Node.createLiteral(objlit.value.to_s)
|
245
245
|
end
|
246
|
-
end
|
246
|
+
end
|
247
247
|
return o
|
248
248
|
end
|
249
249
|
|
250
|
-
def build_subject(subject)
|
250
|
+
def build_subject(subject)
|
251
251
|
# TODO: raise error if not URI
|
252
252
|
return Jena::Graph::Node.createURI(subject.uri)
|
253
253
|
end
|
@@ -272,7 +272,7 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
272
272
|
# else
|
273
273
|
# objlit = object
|
274
274
|
# end
|
275
|
-
#
|
275
|
+
#
|
276
276
|
# if objlit.type
|
277
277
|
# type = Jena::Datatypes::TypeMapper.getInstance.getTypeByName(objlit.type.uri)
|
278
278
|
# o = self.model.createTypedLiteral(objlit.value, type)
|
@@ -281,14 +281,14 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
281
281
|
# else
|
282
282
|
# o = self.model.createTypedLiteral(objlit.value, nil)
|
283
283
|
# end
|
284
|
-
# end
|
284
|
+
# end
|
285
285
|
# return o
|
286
286
|
# end
|
287
|
-
#
|
288
|
-
# def build_model_subject(subject)
|
287
|
+
#
|
288
|
+
# def build_model_subject(subject)
|
289
289
|
# self.model.getResource(subject.uri)
|
290
290
|
# end
|
291
|
-
#
|
291
|
+
#
|
292
292
|
# def build_model_predicate(predicate)
|
293
293
|
# self.model.getProperty(predicate.uri)
|
294
294
|
# end
|
@@ -298,16 +298,16 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
298
298
|
end
|
299
299
|
|
300
300
|
def query_jena(query)
|
301
|
-
query_sparql = translate(query)
|
302
|
-
|
301
|
+
query_sparql = translate(query)
|
302
|
+
|
303
303
|
# jena_query = Jena::Query::QueryFactory.create(query_sparql)
|
304
|
-
#
|
304
|
+
#
|
305
305
|
# puts jena_query
|
306
306
|
#
|
307
|
-
|
307
|
+
|
308
308
|
if query_sparql =~ /GRAPH/
|
309
309
|
# query contains GRAPH keyword and has to be executed against an NG4J NamedGraphDataset
|
310
|
-
qexec = Jena::Query::QueryExecutionFactory.create(query_sparql,
|
310
|
+
qexec = Jena::Query::QueryExecutionFactory.create(query_sparql,
|
311
311
|
NG4J::Sparql::NamedGraphDataset.new(self.graphset, Jena::Graph::Node.createURI(self.model_name)))
|
312
312
|
else
|
313
313
|
# query without GRAPH keyword gets executed against the union model
|
@@ -321,7 +321,7 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
321
321
|
LuceneARQ::LARQ.setDefaultIndex(qexec.getContext, retrieve_lucene_index)
|
322
322
|
end
|
323
323
|
|
324
|
-
begin
|
324
|
+
begin
|
325
325
|
results = perform_query(query, qexec)
|
326
326
|
ensure
|
327
327
|
qexec.close
|
@@ -334,7 +334,7 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
334
334
|
def perform_query(query, qexec)
|
335
335
|
results = qexec.execSelect
|
336
336
|
arr_results = []
|
337
|
-
|
337
|
+
|
338
338
|
while results.hasNext
|
339
339
|
row = results.nextSolution
|
340
340
|
res_row = []
|
@@ -351,7 +351,7 @@ class NG4JAdapter < ActiveRdfAdapter
|
|
351
351
|
# datatyped literal
|
352
352
|
res_row << Literal.new(thing.getValue, RDFS::Resource.new(thing.getDatatypeURI))
|
353
353
|
elsif thing.getDatatypeURI.nil?
|
354
|
-
# language tagged literal
|
354
|
+
# language tagged literal
|
355
355
|
res_row << Literal.new(thing.getLexicalForm, "@" + thing.getLanguage)
|
356
356
|
else
|
357
357
|
raise ActiveRdfError, "Jena Sparql returned a strange literal"
|