activerdf_net7 1.6.11
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +79 -0
- data/LICENSE +504 -0
- data/README.rdoc +34 -0
- data/activerdf-jena/CHANGELOG +14 -0
- data/activerdf-jena/LICENSE +504 -0
- data/activerdf-jena/README +57 -0
- data/activerdf-jena/Rakefile +87 -0
- data/activerdf-jena/TODO +18 -0
- data/activerdf-jena/VERSION +1 -0
- data/activerdf-jena/ext/antlr-2.7.5.jar +0 -0
- data/activerdf-jena/ext/arq-extra.jar +0 -0
- data/activerdf-jena/ext/arq.jar +0 -0
- data/activerdf-jena/ext/aterm-java-1.6.jar +0 -0
- data/activerdf-jena/ext/commons-logging-1.1.jar +0 -0
- data/activerdf-jena/ext/concurrent.jar +0 -0
- data/activerdf-jena/ext/icu4j_3_4.jar +0 -0
- data/activerdf-jena/ext/iri.jar +0 -0
- data/activerdf-jena/ext/jena.jar +0 -0
- data/activerdf-jena/ext/jenatest.jar +0 -0
- data/activerdf-jena/ext/json.jar +0 -0
- data/activerdf-jena/ext/junit.jar +0 -0
- data/activerdf-jena/ext/log4j-1.2.12.jar +0 -0
- data/activerdf-jena/ext/lucene-core-2.0.0.jar +0 -0
- data/activerdf-jena/ext/ng4j.jar +0 -0
- data/activerdf-jena/ext/pellet.jar +0 -0
- data/activerdf-jena/ext/relaxngDatatype.jar +0 -0
- data/activerdf-jena/ext/stax-api-1.0.jar +0 -0
- data/activerdf-jena/ext/wstx-asl-3.0.0.jar +0 -0
- data/activerdf-jena/ext/xercesImpl.jar +0 -0
- data/activerdf-jena/ext/xml-apis.jar +0 -0
- data/activerdf-jena/ext/xsdlib.jar +0 -0
- data/activerdf-jena/lib/activerdf_jena/init.rb +26 -0
- data/activerdf-jena/lib/activerdf_jena/jena.rb +59 -0
- data/activerdf-jena/lib/activerdf_jena/jena_adapter.rb +515 -0
- data/activerdf-jena/lib/activerdf_jena/lucene.rb +22 -0
- data/activerdf-jena/lib/activerdf_jena/ng4j.rb +50 -0
- data/activerdf-jena/lib/activerdf_jena/ng4j_adapter.rb +379 -0
- data/activerdf-jena/lib/activerdf_jena/pellet.rb +25 -0
- data/activerdf-jena/test/bnode_org_rss.rdf +793 -0
- data/activerdf-jena/test/eyal-foaf.nt +39 -0
- data/activerdf-jena/test/fun_with_bnodes.nt +2 -0
- data/activerdf-jena/test/s1.n3 +18 -0
- data/activerdf-jena/test/test_data.nt +32 -0
- data/activerdf-jena/test/test_jena_adapter.rb +451 -0
- data/activerdf-jena/test/test_ng4j_adapter.rb +354 -0
- data/activerdf-rdflite/CHANGELOG +31 -0
- data/activerdf-rdflite/LICENSE +504 -0
- data/activerdf-rdflite/README +16 -0
- data/activerdf-rdflite/Rakefile +73 -0
- data/activerdf-rdflite/VERSION +1 -0
- data/activerdf-rdflite/lib/activerdf_rdflite/fetching.rb +34 -0
- data/activerdf-rdflite/lib/activerdf_rdflite/init.rb +13 -0
- data/activerdf-rdflite/lib/activerdf_rdflite/rdflite.rb +582 -0
- data/activerdf-rdflite/lib/activerdf_rdflite/suggesting.rb +87 -0
- data/activerdf-rdflite/test/test_bnode_data.nt +5 -0
- data/activerdf-rdflite/test/test_data.nt +32 -0
- data/activerdf-rdflite/test/test_escaped_data.nt +2 -0
- data/activerdf-rdflite/test/test_fetching.rb +33 -0
- data/activerdf-rdflite/test/test_rdflite.rb +277 -0
- data/activerdf-redland/CHANGELOG +12 -0
- data/activerdf-redland/LICENSE +504 -0
- data/activerdf-redland/README +9 -0
- data/activerdf-redland/Rakefile +72 -0
- data/activerdf-redland/VERSION +1 -0
- data/activerdf-redland/lib/activerdf_redland/init.rb +10 -0
- data/activerdf-redland/lib/activerdf_redland/redland.rb +362 -0
- data/activerdf-redland/test/test_person_data.nt +42 -0
- data/activerdf-redland/test/test_redland_adapter.rb +242 -0
- data/activerdf-sesame/CHANGELOG +6 -0
- data/activerdf-sesame/LICENSE +10 -0
- data/activerdf-sesame/LICENSE-aduna +10 -0
- data/activerdf-sesame/LICENSE-lgpl +504 -0
- data/activerdf-sesame/README +33 -0
- data/activerdf-sesame/Rakefile +77 -0
- data/activerdf-sesame/VERSION +1 -0
- data/activerdf-sesame/ext/commons-codec-1.3.jar +0 -0
- data/activerdf-sesame/ext/commons-dbcp-1.2.2.jar +0 -0
- data/activerdf-sesame/ext/commons-httpclient-3.1.jar +0 -0
- data/activerdf-sesame/ext/commons-logging-1.1.1.jar +0 -0
- data/activerdf-sesame/ext/commons-pool-1.3.jar +0 -0
- data/activerdf-sesame/ext/commons-pool-1.5.2.jar +0 -0
- data/activerdf-sesame/ext/junit-3.8.2.jar +0 -0
- data/activerdf-sesame/ext/openrdf-sesame-2.0-onejar.jar +0 -0
- data/activerdf-sesame/ext/openrdf-sesame-2.3-pr1-onejar.jar +0 -0
- data/activerdf-sesame/ext/slf4j-api-1.4.3.jar +0 -0
- data/activerdf-sesame/ext/slf4j-nop-1.4.3.jar +0 -0
- data/activerdf-sesame/ext/wrapper-sesame2.jar +0 -0
- data/activerdf-sesame/java/build.number +3 -0
- data/activerdf-sesame/java/build.xml +313 -0
- data/activerdf-sesame/java/javadoc/allclasses-frame.html +31 -0
- data/activerdf-sesame/java/javadoc/allclasses-noframe.html +31 -0
- data/activerdf-sesame/java/javadoc/constant-values.html +146 -0
- data/activerdf-sesame/java/javadoc/deprecated-list.html +146 -0
- data/activerdf-sesame/java/javadoc/help-doc.html +223 -0
- data/activerdf-sesame/java/javadoc/index-files/index-1.html +150 -0
- data/activerdf-sesame/java/javadoc/index-files/index-10.html +145 -0
- data/activerdf-sesame/java/javadoc/index-files/index-2.html +157 -0
- data/activerdf-sesame/java/javadoc/index-files/index-3.html +146 -0
- data/activerdf-sesame/java/javadoc/index-files/index-4.html +145 -0
- data/activerdf-sesame/java/javadoc/index-files/index-5.html +145 -0
- data/activerdf-sesame/java/javadoc/index-files/index-6.html +142 -0
- data/activerdf-sesame/java/javadoc/index-files/index-7.html +145 -0
- data/activerdf-sesame/java/javadoc/index-files/index-8.html +152 -0
- data/activerdf-sesame/java/javadoc/index-files/index-9.html +146 -0
- data/activerdf-sesame/java/javadoc/index.html +36 -0
- data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/WrapperForSesame2.html +665 -0
- data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/class-use/WrapperForSesame2.html +144 -0
- data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-frame.html +32 -0
- data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-summary.html +157 -0
- data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-tree.html +150 -0
- data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-use.html +144 -0
- data/activerdf-sesame/java/javadoc/overview-summary.html +156 -0
- data/activerdf-sesame/java/javadoc/overview-tree.html +152 -0
- data/activerdf-sesame/java/javadoc/package-list +1 -0
- data/activerdf-sesame/java/javadoc/resources/inherit.gif +0 -0
- data/activerdf-sesame/java/javadoc/stylesheet.css +29 -0
- data/activerdf-sesame/java/lib/commons-codec-1.3.jar +0 -0
- data/activerdf-sesame/java/lib/commons-dbcp-1.2.2.jar +0 -0
- data/activerdf-sesame/java/lib/commons-httpclient-3.1.jar +0 -0
- data/activerdf-sesame/java/lib/commons-logging-1.1.1.jar +0 -0
- data/activerdf-sesame/java/lib/commons-pool-1.3.jar +0 -0
- data/activerdf-sesame/java/lib/commons-pool-1.5.2.jar +0 -0
- data/activerdf-sesame/java/lib/junit-3.8.2.jar +0 -0
- data/activerdf-sesame/java/lib/openrdf-sesame-2.0-onejar.jar +0 -0
- data/activerdf-sesame/java/lib/openrdf-sesame-2.3-pr1-onejar.jar +0 -0
- data/activerdf-sesame/java/lib/slf4j-api-1.4.3.jar +0 -0
- data/activerdf-sesame/java/lib/slf4j-nop-1.4.3.jar +0 -0
- data/activerdf-sesame/java/manifest.mf +3 -0
- data/activerdf-sesame/java/settings.xml +135 -0
- data/activerdf-sesame/java/src/org/activerdf/wrapper/sesame2/WrapperForSesame2.java +145 -0
- data/activerdf-sesame/java/test-src/org/activerdf/wrapper/sesame2/TestWrapperForSesame2.java +41 -0
- data/activerdf-sesame/lib/activerdf_sesame/init.rb +11 -0
- data/activerdf-sesame/lib/activerdf_sesame/sesame.rb +400 -0
- data/activerdf-sesame/test/eyal-foaf.nt +39 -0
- data/activerdf-sesame/test/eyal-foaf.rdf +65 -0
- data/activerdf-sesame/test/test_sesame_adapter.rb +341 -0
- data/activerdf-sparql/CHANGELOG +35 -0
- data/activerdf-sparql/LICENSE +504 -0
- data/activerdf-sparql/README +10 -0
- data/activerdf-sparql/Rakefile +78 -0
- data/activerdf-sparql/VERSION +1 -0
- data/activerdf-sparql/lib/activerdf_sparql/init.rb +10 -0
- data/activerdf-sparql/lib/activerdf_sparql/sparql.rb +212 -0
- data/activerdf-sparql/lib/activerdf_sparql/sparql_result_parser.rb +55 -0
- data/activerdf-sparql/test/test_sparql_adapter.rb +108 -0
- data/activerdf-yars/LICENSE +504 -0
- data/activerdf-yars/README +10 -0
- data/activerdf-yars/Rakefile +38 -0
- data/activerdf-yars/lib/activerdf_yars/init.rb +10 -0
- data/activerdf-yars/lib/activerdf_yars/jars2.rb +119 -0
- data/lib/active_rdf.rb +85 -0
- data/lib/active_rdf/directaccess/direct_access.rb +49 -0
- data/lib/active_rdf/federation/active_rdf_adapter.rb +47 -0
- data/lib/active_rdf/federation/connection_pool.rb +156 -0
- data/lib/active_rdf/federation/federation_manager.rb +112 -0
- data/lib/active_rdf/instance_exec.rb +13 -0
- data/lib/active_rdf/objectmanager/bnode.rb +7 -0
- data/lib/active_rdf/objectmanager/literal.rb +71 -0
- data/lib/active_rdf/objectmanager/namespace.rb +106 -0
- data/lib/active_rdf/objectmanager/object_manager.rb +119 -0
- data/lib/active_rdf/objectmanager/ordered_set.rb +116 -0
- data/lib/active_rdf/objectmanager/property_list.rb +76 -0
- data/lib/active_rdf/objectmanager/resource.rb +609 -0
- data/lib/active_rdf/objectmanager/resource_like.rb +28 -0
- data/lib/active_rdf/queryengine/ntriples_parser.rb +90 -0
- data/lib/active_rdf/queryengine/query.rb +245 -0
- data/lib/active_rdf/queryengine/query2jars2.rb +22 -0
- data/lib/active_rdf/queryengine/query2sparql.rb +139 -0
- data/lib/active_rdf_helpers.rb +30 -0
- data/lib/active_rdf_log.rb +100 -0
- data/test/common.rb +119 -0
- data/test/directaccess/test_direct_access.rb +64 -0
- data/test/federation/test_connection_pool.rb +86 -0
- data/test/federation/test_federation_manager.rb +145 -0
- data/test/objectmanager/test_literal.rb +52 -0
- data/test/objectmanager/test_namespace.rb +83 -0
- data/test/objectmanager/test_object_manager.rb +96 -0
- data/test/objectmanager/test_ordered_set.rb +110 -0
- data/test/objectmanager/test_resource_reading.rb +150 -0
- data/test/objectmanager/test_resource_writing.rb +39 -0
- data/test/objectmanager/test_talia_syntax.rb +68 -0
- data/test/queryengine/my_external_resource.rb +24 -0
- data/test/queryengine/test_external_resource_class.rb +49 -0
- data/test/queryengine/test_ntriples_parser.rb +71 -0
- data/test/queryengine/test_query.rb +55 -0
- data/test/queryengine/test_query2jars2.rb +51 -0
- data/test/queryengine/test_query2sparql.rb +76 -0
- data/test/queryengine/test_query_engine.rb +52 -0
- data/test/test_adapters.rb +58 -0
- metadata +266 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
# Default ActiveRDF error
|
2
|
+
class ActiveRdfError < StandardError
|
3
|
+
end
|
4
|
+
|
5
|
+
class Module
|
6
|
+
# Adds boolean accessor to a class (e.g. person.male?)
|
7
|
+
def bool_accessor *syms
|
8
|
+
attr_accessor(*syms)
|
9
|
+
syms.each { |sym| alias_method "#{sym}?", sym }
|
10
|
+
remove_method(*syms)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module ActiveRdfBenchmark
|
15
|
+
# Benchmarking for ActiveRecord. You may pass a message with additional
|
16
|
+
# information - there's a little hack that the "real" benchmark will pass
|
17
|
+
# the message to the block, while the "non-benchmark" call will pass nil.
|
18
|
+
# This allows you to build the message in the block only if you need it.
|
19
|
+
def benchmark(title, log_level = Logger::DEBUG, message = '')
|
20
|
+
if(ActiveRdfLogger.logger.level <= log_level)
|
21
|
+
result = nil
|
22
|
+
seconds = Benchmark.realtime { result = yield(message) }
|
23
|
+
ActiveRdfLogger.log_add("\033[31m\033[1m#{title}\033[0m (#{'%.5f' % seconds}) -- \033[34m#{message}\033[0m", log_level, self)
|
24
|
+
result
|
25
|
+
else
|
26
|
+
yield(nil)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
3
|
+
|
4
|
+
class ActiveRdfLogger
|
5
|
+
|
6
|
+
# Create log methods for each level
|
7
|
+
%w(debug info warn error fatal).each do |level|
|
8
|
+
module_eval <<-"end_eval"
|
9
|
+
def self.log_#{level}(message_or_context, context = nil)
|
10
|
+
message_or_context, context = nil, message_or_context if(block_given?)
|
11
|
+
log_add(message_or_context, Logger::#{level.upcase}, context) do
|
12
|
+
yield if(block_given?)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end_eval
|
16
|
+
end
|
17
|
+
|
18
|
+
class << self
|
19
|
+
|
20
|
+
# Get the logger for the ActiveRDF library. This will default to the Rails
|
21
|
+
# logger if that is active. Otherwise it will use the configured logger
|
22
|
+
# for ActiveRDF. (Note that some messages may go to the configured logger
|
23
|
+
# if ActiveRDF is initialized before Rails).
|
24
|
+
def logger
|
25
|
+
@logger ||= get_active_rdf_logger
|
26
|
+
end
|
27
|
+
|
28
|
+
# Assign a new logger
|
29
|
+
def logger=(logger)
|
30
|
+
@logger = logger
|
31
|
+
@native_logger = false
|
32
|
+
end
|
33
|
+
|
34
|
+
# Logs a message of the given severity. The context may identify the class/
|
35
|
+
# object that logged the message
|
36
|
+
def log_add(message = nil, severity = Logger::DEBUG, context = nil)
|
37
|
+
logger.add(severity, nil, "ActiveRDF") do
|
38
|
+
message = yield if(!message && block_given?)
|
39
|
+
log_message(message, context)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def log_message(message, context = nil)
|
46
|
+
message = ("\033[32m\033[4m\033[1m#{context_string(context)}\033[0m ") << message if(context)
|
47
|
+
return message if(@native_logger)
|
48
|
+
"\033[35m\033[4m\033[1mActiveRDF\033[0m " << message
|
49
|
+
end
|
50
|
+
|
51
|
+
def context_string(context)
|
52
|
+
return context if(context.is_a?(String))
|
53
|
+
context = context.class unless(context.is_a?(Class))
|
54
|
+
context.name
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_active_rdf_logger
|
58
|
+
if(defined?(RAILS_DEFAULT_LOGGER) && RAILS_DEFAULT_LOGGER)
|
59
|
+
RAILS_DEFAULT_LOGGER
|
60
|
+
else
|
61
|
+
@native_logger = true
|
62
|
+
|
63
|
+
# use either $ACTIVE_RDF_LOG for logging or current directory
|
64
|
+
location = ENV['ACTIVE_RDF_LOG'] || $stdout # "#{Dir.pwd}/activerdf.log"
|
65
|
+
location = $stdout if(location == "STDOUT")
|
66
|
+
logger = Logger.new(location, 1, 100*1024)
|
67
|
+
|
68
|
+
# if user has specified loglevel we use that, otherwise we use default level
|
69
|
+
# in the environment variable ACTIVE_RDF_LOG_LEVEL we expect numbers, which we
|
70
|
+
# have to convert
|
71
|
+
if ENV['ACTIVE_RDF_LOG_LEVEL'].nil?
|
72
|
+
logger.level = Logger::WARN
|
73
|
+
else
|
74
|
+
logger.level = ENV['ACTIVE_RDF_LOG_LEVEL'].to_i
|
75
|
+
end
|
76
|
+
|
77
|
+
logger
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
class Logger
|
85
|
+
def debug_pp(message, variable)
|
86
|
+
if variable.respond_to?(:join)
|
87
|
+
if variable.empty?
|
88
|
+
debug(sprintf(message, "empty"))
|
89
|
+
else
|
90
|
+
debug(sprintf(message, variable.join(', ')))
|
91
|
+
end
|
92
|
+
else
|
93
|
+
if variable.nil?
|
94
|
+
debug(sprintf(message, 'empty'))
|
95
|
+
else
|
96
|
+
debug(sprintf(message, variable))
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
data/test/common.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
def get_adapter
|
2
|
+
types = ConnectionPool.adapter_types
|
3
|
+
if types.include?(:rdflite)
|
4
|
+
get_rdflite
|
5
|
+
elsif types.include?(:redland)
|
6
|
+
get_redland
|
7
|
+
elsif types.include?(:sparql)
|
8
|
+
get_sparql
|
9
|
+
elsif types.include?(:yars)
|
10
|
+
get_yars
|
11
|
+
elsif types.include?(:jars2)
|
12
|
+
get_jars2
|
13
|
+
else
|
14
|
+
raise ActiveRdfError, "no suitable adapter found for test"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_read_only_adapter
|
19
|
+
if ConnectionPool.adapter_types.include?(:sparql)
|
20
|
+
get_sparql
|
21
|
+
else
|
22
|
+
raise ActiveRdfError, "no suitable read-only adapter found for test"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# TODO make this work with a list of existing adapters, not only one
|
27
|
+
def get_different_adapter(existing_adapter)
|
28
|
+
types = ConnectionPool.adapter_types
|
29
|
+
if types.include?(:rdflite)
|
30
|
+
if existing_adapter.class == RDFLite
|
31
|
+
ConnectionPool.add :type => :rdflite, :unique => true
|
32
|
+
else
|
33
|
+
get_rdflite
|
34
|
+
end
|
35
|
+
elsif types.include?(:redland) and existing_adapter.class != RedlandAdapter
|
36
|
+
get_rdflite
|
37
|
+
elsif types.include?(:sparql) and existing_adapter.class != SparqlAdapter
|
38
|
+
get_sparql
|
39
|
+
elsif types.include?(:yars) and existing_adapter.class != YarsAdapter
|
40
|
+
get_yars
|
41
|
+
elsif types.include?(:jars2) and existing_adapter.class != Jars2Adapter
|
42
|
+
get_jars2
|
43
|
+
else
|
44
|
+
raise ActiveRdfError, "only one adapter on this system, or no suitable adapter found for test"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def get_all_read_adapters
|
49
|
+
types = ConnectionPool.adapter_types
|
50
|
+
adapters = types.collect {|type| self.send("get_#{type}") }
|
51
|
+
adapters.select {|adapter| adapter.reads?}
|
52
|
+
end
|
53
|
+
|
54
|
+
def get_all_write_adapters
|
55
|
+
types = ConnectionPool.adapter_types
|
56
|
+
adapters = types.collect {|type| self.send("get_#{type}") }
|
57
|
+
adapters.select {|adapter| adapter.writes?}
|
58
|
+
end
|
59
|
+
|
60
|
+
def get_write_adapter
|
61
|
+
types = ConnectionPool.adapter_types
|
62
|
+
if types.include?(:rdflite)
|
63
|
+
get_rdflite
|
64
|
+
elsif types.include?(:redland)
|
65
|
+
get_redland
|
66
|
+
elsif types.include?(:yars)
|
67
|
+
get_yars
|
68
|
+
elsif types.include?(:jars2)
|
69
|
+
get_jars2
|
70
|
+
else
|
71
|
+
raise ActiveRdfError, "no suitable adapter found for test"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# TODO use a list of exisiting adapters not only one
|
76
|
+
def get_different_write_adapter(existing_adapter)
|
77
|
+
types = ConnectionPool.adapter_types
|
78
|
+
if types.include?(:rdflite)
|
79
|
+
if existing_adapter.class == RDFLite
|
80
|
+
ConnectionPool.add :type => :rdflite, :unique => true
|
81
|
+
else
|
82
|
+
get_rdflite
|
83
|
+
end
|
84
|
+
elsif types.include?(:redland) and existing_adapter.class != RedlandAdapter
|
85
|
+
get_redland
|
86
|
+
elsif types.include?(:yars) and existing_adapter.class != YarsAdapter
|
87
|
+
get_yars
|
88
|
+
else
|
89
|
+
raise ActiveRdfError, "only one write adapter on this system, or no suitable write adapter found for test"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# get all adapters used in Talia
|
94
|
+
def get_talia_adapters
|
95
|
+
types = ConnectionPool.adapter_types
|
96
|
+
ConnectionPool.add :type => :rdflite if types.include?(:rdflite)
|
97
|
+
ConnectionPool.add :type => :fetching if types.include?(:fetching)
|
98
|
+
ConnectionPool.add :type => :suggesting if types.include?(:suggesting)
|
99
|
+
ConnectionPool.add :type => :redland if types.include?(:redland)
|
100
|
+
ConnectionPool.add :type => :sesame if types.include?(:sesame)
|
101
|
+
if ConnectionPool.adapters.size > 0
|
102
|
+
return ConnectionPool.adapters
|
103
|
+
else
|
104
|
+
raise ActiveRdfError, "No adapter for Talia found on this system, or no suitable write adapter found for Talia test"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
def get_sparql
|
110
|
+
ConnectionPool.add(:type => :sparql, :url => "http://sparql.org/books",
|
111
|
+
:engine => :joseki, :results => :sparql_xml)
|
112
|
+
end
|
113
|
+
|
114
|
+
def get_fetching; ConnectionPool.add(:type => :fetching); end
|
115
|
+
def get_suggesting; ConnectionPool.add(:type => :suggesting); end
|
116
|
+
def get_rdflite; ConnectionPool.add(:type => :rdflite); end
|
117
|
+
def get_redland; ConnectionPool.add(:type => :redland); end
|
118
|
+
def get_yars; ConnectionPool.add(:type => :yars); end
|
119
|
+
def get_jars2; ConnectionPool.add(:type => :jars2); end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),'..', '..','lib', 'active_rdf')
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'directaccess/direct_access'
|
5
|
+
|
6
|
+
class TestDirectAccess < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
# load Redland Adapter
|
10
|
+
#ConnectionPool.clear
|
11
|
+
#adapter = load_adapter(:redland)
|
12
|
+
#adapter.load("#{File.dirname(__FILE__)}/../test_person_data.nt") if !adapter.nil?
|
13
|
+
end
|
14
|
+
|
15
|
+
@@eyal = "<http://activerdf.org/test/eyal>"
|
16
|
+
@@age = "<http://activerdf.org/test/age>"
|
17
|
+
@@age_number = "18"
|
18
|
+
|
19
|
+
|
20
|
+
def test_query
|
21
|
+
ConnectionPool.clear
|
22
|
+
adapter = load_adapter(:redland)
|
23
|
+
if !adapter.nil?
|
24
|
+
adapter.load("#{File.dirname(__FILE__)}/../test_person_data.nt")
|
25
|
+
# test SELECT query
|
26
|
+
assert_not_equal nil, DirectAccess.sparql_query("SELECT ?p ?o WHERE {#{@@eyal} ?p ?o}")
|
27
|
+
assert_not_equal nil, DirectAccess.sparql_query("SELECT ?o WHERE {#{@@eyal} #{@@age} ?o}")
|
28
|
+
assert_raise(ActiveRdfError) {DirectAccess.sparql_query(nil)}
|
29
|
+
assert_raise(ActiveRdfError) {DirectAccess.sparql_query(123)}
|
30
|
+
|
31
|
+
# test return value
|
32
|
+
assert_equal Array, DirectAccess.sparql_query("SELECT ?o WHERE {#{@@eyal} #{@@age} ?o}",:array).class
|
33
|
+
assert_equal String, DirectAccess.sparql_query("SELECT ?p WHERE {#{@@eyal} ?p '27'}")[0].class
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_propertylist
|
38
|
+
ConnectionPool.clear
|
39
|
+
adapter = load_adapter(:redland)
|
40
|
+
if !adapter.nil?
|
41
|
+
# test creation
|
42
|
+
assert_equal PropertyList, DirectAccess.find_all_by_subject_and_predicate(@@eyal, @@age).class
|
43
|
+
assert_raise(ActiveRdfError) {DirectAccess.find_all_by_subject_and_predicate(nil, nil)}
|
44
|
+
|
45
|
+
# test add
|
46
|
+
pl = DirectAccess.find_all_by_subject_and_predicate(@@eyal, @@age)
|
47
|
+
assert_kind_of(PropertyList, pl)
|
48
|
+
assert_equal false, pl.include?(@@age_number)
|
49
|
+
assert_equal true, (pl << @@age_number)
|
50
|
+
assert_equal true, pl.include?(@@age_number)
|
51
|
+
|
52
|
+
# test remove
|
53
|
+
assert_equal true, (pl.remove(@@age_number))
|
54
|
+
assert_equal false, pl.include?(@@age_number)
|
55
|
+
assert_equal true, (pl.remove)
|
56
|
+
assert_equal 0, pl.size
|
57
|
+
assert_equal 0, DirectAccess.find_all_by_subject_and_predicate(@@eyal, @@age).size
|
58
|
+
|
59
|
+
# test replace
|
60
|
+
pl << "123"
|
61
|
+
assert_equal true, pl.replace("123", @@age_number)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# Author:: Benjamin Heitmann
|
2
|
+
# Copyright:: (c) 2005-2006
|
3
|
+
# License:: LGPL
|
4
|
+
|
5
|
+
require 'test/unit'
|
6
|
+
require 'active_rdf'
|
7
|
+
require 'federation/connection_pool'
|
8
|
+
require "#{File.dirname(__FILE__)}/../common"
|
9
|
+
|
10
|
+
class TestConnectionPool < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
ConnectionPool.clear
|
13
|
+
end
|
14
|
+
|
15
|
+
def teardown
|
16
|
+
ConnectionPool.clear
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_class_add_data_source
|
20
|
+
# test for successfull adding of an adapter
|
21
|
+
adapter = get_adapter
|
22
|
+
assert_kind_of ActiveRdfAdapter, adapter
|
23
|
+
assert ConnectionPool.adapter_pool.include?(adapter)
|
24
|
+
|
25
|
+
# now check that we get the same adapter if we supply the same parameters
|
26
|
+
adapter2 = get_adapter
|
27
|
+
assert_equal adapter, adapter2
|
28
|
+
# test same object_id
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_class_adapter_pool
|
32
|
+
#ConnectionPool.clear
|
33
|
+
assert_equal 0, ConnectionPool.adapter_pool.size
|
34
|
+
adapter = get_adapter
|
35
|
+
assert_equal 1, ConnectionPool.adapter_pool.size
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_class_register_adapter
|
39
|
+
ConnectionPool.register_adapter(:funkytype, ActiveRdfAdapter)
|
40
|
+
assert ConnectionPool.adapter_types.include?(:funkytype)
|
41
|
+
# unregister test adapter
|
42
|
+
ConnectionPool.unregister_adapter(:funkytype)
|
43
|
+
assert !ConnectionPool.adapter_types.include?(:funkytype)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_class_auto_flush_equals
|
47
|
+
# assert auto flushing by default
|
48
|
+
assert ConnectionPool.auto_flush?
|
49
|
+
ConnectionPool.auto_flush = false
|
50
|
+
assert !ConnectionPool.auto_flush?
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_class_clear
|
54
|
+
ConnectionPool.clear
|
55
|
+
assert ConnectionPool.adapter_pool.empty?
|
56
|
+
assert_nil ConnectionPool.write_adapter
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_class_write_adapter
|
60
|
+
adapter = get_write_adapter
|
61
|
+
assert_kind_of ActiveRdfAdapter, adapter
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_class_write_adapter_equals
|
65
|
+
# get 2 adapter
|
66
|
+
adapter1 = get_write_adapter
|
67
|
+
|
68
|
+
# if another write adapter is present
|
69
|
+
adapter2 = get_different_write_adapter(adapter1)
|
70
|
+
# check if the selected write adapter is the second
|
71
|
+
assert_equal adapter2, ConnectionPool.write_adapter if !adapter2.nil?
|
72
|
+
|
73
|
+
# change write adatper
|
74
|
+
ConnectionPool.write_adapter = adapter1
|
75
|
+
#check if the selected write adapter is the first
|
76
|
+
assert_equal adapter1, ConnectionPool.write_adapter
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# need access to connectionpool.adapter_pool in tests
|
81
|
+
class ConnectionPool
|
82
|
+
def self.adapter_pool
|
83
|
+
@@adapter_pool
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
@@ -0,0 +1,145 @@
|
|
1
|
+
# Author:: Eyal Oren
|
2
|
+
# Copyright:: (c) 2005-2006
|
3
|
+
# License:: LGPL
|
4
|
+
|
5
|
+
require 'test/unit'
|
6
|
+
require 'active_rdf'
|
7
|
+
require 'federation/federation_manager'
|
8
|
+
require "#{File.dirname(__FILE__)}/../common"
|
9
|
+
|
10
|
+
class TestFederationManager < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
ConnectionPool.clear
|
13
|
+
end
|
14
|
+
|
15
|
+
def teardown
|
16
|
+
end
|
17
|
+
|
18
|
+
@@eyal = RDFS::Resource.new("http://activerdf.org/test/eyal")
|
19
|
+
@@age = RDFS::Resource.new("http://activerdf.org/test/age")
|
20
|
+
@@age_number = RDFS::Resource.new("27")
|
21
|
+
@@eye = RDFS::Resource.new("http://activerdf.org/test/eye")
|
22
|
+
@@eye_value = RDFS::Resource.new("blue")
|
23
|
+
@@type = RDFS::Resource.new("http://www.w3.org/1999/02/22-rdf-syntax-ns#type")
|
24
|
+
@@person = RDFS::Resource.new("http://www.w3.org/2000/01/rdf-schema#Resource")
|
25
|
+
@@resource = RDFS::Resource.new("http://activerdf.org/test/Person")
|
26
|
+
|
27
|
+
|
28
|
+
def test_single_pool
|
29
|
+
a1 = get_adapter
|
30
|
+
a2 = get_adapter
|
31
|
+
assert_equal a1, a2
|
32
|
+
assert_equal a1.object_id, a2.object_id
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_class_add
|
36
|
+
write1 = get_write_adapter
|
37
|
+
FederationManager.add(@@eyal, @@age, @@age_number)
|
38
|
+
|
39
|
+
age_result = Query.new.select(:o).where(@@eyal, @@age, :o).execute
|
40
|
+
assert "27", age_result
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_class_add_no_write_adapter
|
44
|
+
# zero write, one read -> must raise error
|
45
|
+
adapter = get_read_only_adapter
|
46
|
+
assert (not adapter.writes?)
|
47
|
+
assert_raises(ActiveRdfError) { FederationManager.add(@@eyal, @@age, @@age_number) }
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_class_add_one_write_one_read
|
51
|
+
# one write, one read
|
52
|
+
|
53
|
+
write1 = get_write_adapter
|
54
|
+
read1 = get_read_only_adapter
|
55
|
+
assert_not_equal write1,read1
|
56
|
+
assert_not_equal write1.object_id, read1.object_id
|
57
|
+
|
58
|
+
FederationManager.add(@@eyal, @@age, @@age_number)
|
59
|
+
|
60
|
+
age_result = Query.new.select(:o).where(@@eyal, @@age, :o).execute
|
61
|
+
assert "27", age_result
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_get_different_read_and_write_adapters
|
65
|
+
r1 = get_adapter
|
66
|
+
r2 = get_different_adapter(r1)
|
67
|
+
assert_not_equal r1,r2
|
68
|
+
assert_not_equal r1.object_id, r2.object_id
|
69
|
+
|
70
|
+
w1 = get_write_adapter
|
71
|
+
w2 = get_different_write_adapter(w1)
|
72
|
+
assert_not_equal w1,w2
|
73
|
+
assert_not_equal w1.object_id, w2.object_id
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_class_add_two_write
|
77
|
+
# two write, one read, no switching
|
78
|
+
# we need to different write adapters for this
|
79
|
+
#
|
80
|
+
|
81
|
+
write1 = get_write_adapter
|
82
|
+
write2 = get_different_write_adapter(write1)
|
83
|
+
|
84
|
+
read1 = get_read_only_adapter
|
85
|
+
|
86
|
+
FederationManager.add(@@eyal, @@age, @@age_number)
|
87
|
+
|
88
|
+
age_result = Query.new.select(:o).where(@@eyal, @@age, :o).execute
|
89
|
+
assert "27", age_result
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_class_add_two_write_switching
|
93
|
+
# two write, one read, with switching
|
94
|
+
|
95
|
+
write1 = get_write_adapter
|
96
|
+
write2 = get_different_write_adapter(write1)
|
97
|
+
|
98
|
+
read1 = get_read_only_adapter
|
99
|
+
|
100
|
+
FederationManager.add(@@eyal, @@age, @@age_number)
|
101
|
+
age_result = Query.new.select(:o).where(@@eyal, @@age, :o).execute
|
102
|
+
assert "27", age_result
|
103
|
+
|
104
|
+
ConnectionPool.write_adapter = write2
|
105
|
+
|
106
|
+
FederationManager.add(@@eyal, @@eye, @@eye_value)
|
107
|
+
age_result = Query.new.select(:o).where(@@eyal, @@eye, :o).execute
|
108
|
+
assert "blue", age_result
|
109
|
+
|
110
|
+
second_result = write2.query(Query.new.select(:o).where(@@eyal, @@eye, :o))
|
111
|
+
assert "blue", second_result
|
112
|
+
end
|
113
|
+
|
114
|
+
# this test makes no sense without two different data sources
|
115
|
+
def test_federated_query
|
116
|
+
first_adapter = get_write_adapter
|
117
|
+
first_adapter.load("#{File.dirname(__FILE__)}/../test_person_data.nt")
|
118
|
+
first = Query.new.select(:s,:p,:o).where(:s,:p,:o).execute
|
119
|
+
|
120
|
+
# results should not be empty, because then the test succeeds trivially
|
121
|
+
assert_not_nil first
|
122
|
+
assert first != []
|
123
|
+
|
124
|
+
ConnectionPool.clear
|
125
|
+
second_adapter = get_different_write_adapter(first_adapter)
|
126
|
+
second_adapter.load("#{File.dirname(__FILE__)}/../test_person_data.nt")
|
127
|
+
second = Query.new.select(:s,:p,:o).where(:s,:p,:o).execute
|
128
|
+
|
129
|
+
# now we query both adapters in parallel
|
130
|
+
ConnectionPool.clear
|
131
|
+
first_adapter = get_write_adapter
|
132
|
+
first_adapter.load("#{File.dirname(__FILE__)}/../test_person_data.nt")
|
133
|
+
second_adapter = get_different_write_adapter(first_adapter)
|
134
|
+
second_adapter.load("#{File.dirname(__FILE__)}/../test_person_data.nt")
|
135
|
+
both = Query.new.select(:s,:p,:o).where(:s,:p,:o).execute
|
136
|
+
# assert both together contain twice the sum of the separate sources
|
137
|
+
assert_equal first + second, both
|
138
|
+
|
139
|
+
# since both sources contain the same data, we check that querying (both!)
|
140
|
+
# in parallel for distinct data, actually gives same results as querying
|
141
|
+
# only the one set
|
142
|
+
uniq = Query.new.distinct(:s,:p,:o).where(:s,:p,:o).execute
|
143
|
+
assert_equal first.sort, uniq.sort
|
144
|
+
end
|
145
|
+
end
|