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,38 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/gempackagetask'
|
5
|
+
require 'rake/rdoctask'
|
6
|
+
require 'tools/rakehelp'
|
7
|
+
require 'fileutils'
|
8
|
+
include FileUtils
|
9
|
+
|
10
|
+
setup_tests
|
11
|
+
setup_clean ["pkg", "lib/*.bundle", "*.gem", ".config"]
|
12
|
+
|
13
|
+
setup_rdoc ['README', 'LICENSE', 'lib/**/*.rb', 'doc/**/*.rdoc']
|
14
|
+
|
15
|
+
desc "Does a full compile, test run"
|
16
|
+
task :default => [:test, :package]
|
17
|
+
|
18
|
+
version="xx"
|
19
|
+
name="activerdf_yars"
|
20
|
+
|
21
|
+
setup_gem(name, version) do |spec|
|
22
|
+
spec.summary = "ActiveRDF adapter to YARS RDF store"
|
23
|
+
spec.description = spec.summary
|
24
|
+
spec.author="Eyal Oren <eyal.oren@deri.org"
|
25
|
+
spec.add_dependency('gem_plugin', '>= 0.2.1')
|
26
|
+
spec.add_dependency('activerdf', '>= 0.9.2')
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
task :install => [:test, :package] do
|
31
|
+
sh %{sudo gem install pkg/#{name}-#{version}.gem}
|
32
|
+
end
|
33
|
+
|
34
|
+
task :uninstall => [:clean] do
|
35
|
+
sh %{sudo gem uninstall #{name}}
|
36
|
+
end
|
37
|
+
|
38
|
+
task :reinstall => [:uninstall, :install]
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# Author:: Eyal Oren
|
2
|
+
# Copyright:: (c) 2005-2006
|
3
|
+
# License:: LGPL
|
4
|
+
|
5
|
+
# require 'active_rdf'
|
6
|
+
require 'queryengine/query2jars2'
|
7
|
+
require 'net/http'
|
8
|
+
require 'cgi'
|
9
|
+
|
10
|
+
# Read-only adapter to jars2
|
11
|
+
# (experimental YARS branch for SWSE engine)
|
12
|
+
class Jars2Adapter < ActiveRdfAdapter
|
13
|
+
ActiveRdfLogger::log_info "Loading Jars2 adapter", self
|
14
|
+
ConnectionPool.register_adapter(:jars2, self)
|
15
|
+
|
16
|
+
# initialises connection to jars2 datastore
|
17
|
+
# available parameters are:
|
18
|
+
# * :host (default 'm3pe.org')
|
19
|
+
# * :port (default 2020)
|
20
|
+
def initialize(params = {})
|
21
|
+
super()
|
22
|
+
@reads = true
|
23
|
+
@writes = false
|
24
|
+
|
25
|
+
@host = params[:host] || 'm3pe.org'
|
26
|
+
@port = params[:port] || 2020
|
27
|
+
ActiveRdfLogger::log_info(self) { "Initializing new instance with host: #{@host} port: #{@port}" }
|
28
|
+
@yars = Net::HTTP.new(@host, @port)
|
29
|
+
end
|
30
|
+
|
31
|
+
def translate query
|
32
|
+
Query2Jars2.translate(query)
|
33
|
+
end
|
34
|
+
|
35
|
+
# executes query on jars2 datastore
|
36
|
+
def query(query)
|
37
|
+
qs = Query2Jars2.translate(query)
|
38
|
+
header = { 'Accept' => 'application/rdf+n3' }
|
39
|
+
|
40
|
+
# querying Jars2, adding 'eyal' parameter to get all variable bindings in
|
41
|
+
# the result
|
42
|
+
response = @yars.get("/?q=#{CGI.escape(qs)}&eyal", header)
|
43
|
+
|
44
|
+
ActiveRdfLogger::log_debug(self) { "Jars2Adapter: query executed: #{qs}" }
|
45
|
+
|
46
|
+
# return empty array if no content
|
47
|
+
return [] if response.is_a?(Net::HTTPNoContent)
|
48
|
+
|
49
|
+
# return false unless HTTP OK returned
|
50
|
+
return false unless response.is_a?(Net::HTTPOK)
|
51
|
+
|
52
|
+
# parse the result
|
53
|
+
results = parse_result(response.body, query)
|
54
|
+
|
55
|
+
# remove duplicates if asked for distinct results
|
56
|
+
if query.distinct?
|
57
|
+
final_results = results.uniq
|
58
|
+
else
|
59
|
+
final_results = results
|
60
|
+
end
|
61
|
+
|
62
|
+
ActiveRdfLogger::log_debug_pp "Query returned %s", final_results if ActiveRdfLogger::log_level == Logger::DEBUG
|
63
|
+
final_results
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
Resource = /<[^>]*>/
|
68
|
+
Literal = /"[^"]*"/
|
69
|
+
Node = Regexp.union(Resource,Literal)
|
70
|
+
|
71
|
+
# parses Jars2 results into array of ActiveRDF objects
|
72
|
+
def parse_result(response, query)
|
73
|
+
# Jars2 responses contain one result per line
|
74
|
+
results = response.split("\n")
|
75
|
+
|
76
|
+
# the first line of the response contains the variable bindings of the
|
77
|
+
# results: we look at that line to figure out which column contains the
|
78
|
+
# data we are looking for (which is the variables mentioned in the select
|
79
|
+
# clauses of the query
|
80
|
+
bindings = results[0].split(' ')
|
81
|
+
|
82
|
+
# array of found answers, will be filled by iterating over the results and
|
83
|
+
# only including the requested (i.e. selected) clauses
|
84
|
+
answers = []
|
85
|
+
|
86
|
+
# we iterate over the real results, and extract the clauses that we're
|
87
|
+
# looking for (i.e. the select clauses from the query)
|
88
|
+
results[1..-1].each do |result|
|
89
|
+
|
90
|
+
# scan row for occurence of nodes (either resources or literals)
|
91
|
+
row = result.scan(Node)
|
92
|
+
|
93
|
+
# for each select clause, we find its index, and add the value at that
|
94
|
+
# location in the result row to our answer
|
95
|
+
row = query.select_clauses.collect do |clause|
|
96
|
+
clause_index = bindings.index(clause)
|
97
|
+
convert_into_activerdf(row[clause_index], query.resource_class)
|
98
|
+
end
|
99
|
+
answers << row
|
100
|
+
end
|
101
|
+
|
102
|
+
answers
|
103
|
+
end
|
104
|
+
|
105
|
+
# converts ntriples serialisation of resource or literal into ActiveRDF object.
|
106
|
+
#
|
107
|
+
# resource_type is the class to be used for "resource" objects.
|
108
|
+
def convert_into_activerdf(string, resource_type)
|
109
|
+
case string
|
110
|
+
when /<(.*)>/
|
111
|
+
# <http://foaf/Person> is a resource
|
112
|
+
resource_type.new($1)
|
113
|
+
when /"(.*)"/
|
114
|
+
# "30" is a literal
|
115
|
+
# TODO: handle datatypes
|
116
|
+
String.new($1)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
data/lib/active_rdf.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
|
2
|
+
require 'rubygems'
|
3
|
+
|
4
|
+
# ActiveRDF loader
|
5
|
+
|
6
|
+
file = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__
|
7
|
+
this_dir = File.dirname(File.expand_path(file))
|
8
|
+
|
9
|
+
$: << this_dir + '/'
|
10
|
+
$: << this_dir + '/active_rdf/'
|
11
|
+
|
12
|
+
require 'active_rdf_helpers'
|
13
|
+
require 'active_rdf_log'
|
14
|
+
|
15
|
+
|
16
|
+
# load standard classes that need to be loaded at startup
|
17
|
+
require 'objectmanager/resource_like'
|
18
|
+
require 'objectmanager/resource'
|
19
|
+
require 'objectmanager/bnode'
|
20
|
+
require 'objectmanager/literal'
|
21
|
+
require 'objectmanager/namespace'
|
22
|
+
require 'federation/connection_pool'
|
23
|
+
require 'queryengine/query'
|
24
|
+
require 'federation/active_rdf_adapter'
|
25
|
+
|
26
|
+
ActiveRdfLogger::log_info "ActiveRDF loaded, logging level: #{ActiveRdfLogger::logger.level}"
|
27
|
+
|
28
|
+
def load_adapter s
|
29
|
+
begin
|
30
|
+
require s
|
31
|
+
rescue Exception => e
|
32
|
+
ActiveRdfLogger::log_info "Could not load adapter #{s}: #{e}"
|
33
|
+
#raise exception if the environment variable is specified
|
34
|
+
raise ActiveRdfError, "Could not load adapter #{s}: #{e}" unless ENV['ACTIVE_RDF_ADAPTERS'].nil?
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
# determine whether activerdf is installed as a gem:
|
40
|
+
if Gem::cache.search(/^activerdf$/).empty?
|
41
|
+
# we are not running as a gem
|
42
|
+
ActiveRdfLogger::log_info 'ActiveRDF is NOT installed as a Gem', self
|
43
|
+
if ENV['ACTIVE_RDF_ADAPTERS'].nil?
|
44
|
+
if RUBY_PLATFORM =~ /java/
|
45
|
+
load_adapter this_dir + '/activerdf/activerdf-jena/lib/activerdf_jena/init'
|
46
|
+
load_adapter this_dir + '/activerdf/activerdf-sparql/lib/activerdf_sparql/sparql'
|
47
|
+
load_adapter this_dir + '/../activerdf-sesame/lib/activerdf_sesame/sesame'
|
48
|
+
else
|
49
|
+
load_adapter this_dir + '/../activerdf-rdflite/lib/activerdf_rdflite/rdflite'
|
50
|
+
load_adapter this_dir + '/../activerdf-rdflite/lib/activerdf_rdflite/fetching'
|
51
|
+
load_adapter this_dir + '/../activerdf-rdflite/lib/activerdf_rdflite/suggesting'
|
52
|
+
load_adapter this_dir + '/../activerdf-redland/lib/activerdf_redland/redland'
|
53
|
+
load_adapter this_dir + '/../activerdf-sparql/lib/activerdf_sparql/sparql'
|
54
|
+
#load_adapter this_dir + '/../activerdf-yars/lib/activerdf_yars/jars2'
|
55
|
+
end
|
56
|
+
else
|
57
|
+
#load specified adapters
|
58
|
+
#for example: ENV['ACTIVE_RDF_ADAPTERS'] = "redland,sparql"
|
59
|
+
ENV['ACTIVE_RDF_ADAPTERS'].split(",").uniq.each { |adapterItem|
|
60
|
+
case adapterItem.strip.downcase
|
61
|
+
when "rdflite"
|
62
|
+
load_adapter this_dir + '/../activerdf-rdflite/lib/activerdf_rdflite/rdflite'
|
63
|
+
load_adapter this_dir + '/../activerdf-rdflite/lib/activerdf_rdflite/fetching'
|
64
|
+
load_adapter this_dir + '/../activerdf-rdflite/lib/activerdf_rdflite/suggesting'
|
65
|
+
when "redland"
|
66
|
+
load_adapter this_dir + '/../activerdf-redland/lib/activerdf_redland/redland'
|
67
|
+
when "sparql"
|
68
|
+
load_adapter this_dir + '/../activerdf-sparql/lib/activerdf_sparql/sparql'
|
69
|
+
when "jars"
|
70
|
+
load_adapter this_dir + '/../activerdf-yars/lib/activerdf_yars/jars2'
|
71
|
+
when "sesame"
|
72
|
+
load_adapter this_dir + '/../activerdf-sesame/lib/activerdf_sesame/sesame'
|
73
|
+
else
|
74
|
+
ActiveRdfLogger::log_error "Unknown adapter #{name}"
|
75
|
+
raise ActiveRdfError, "Unknown adapter #{name}"
|
76
|
+
end
|
77
|
+
}
|
78
|
+
end
|
79
|
+
else
|
80
|
+
# we are running as a gem
|
81
|
+
require 'gem_plugin'
|
82
|
+
ActiveRdfLogger::log_info 'ActiveRDF is installed as a Gem'
|
83
|
+
GemPlugin::Manager.instance.load "activerdf" => GemPlugin::INCLUDE
|
84
|
+
end
|
85
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'active_rdf_helpers'
|
2
|
+
|
3
|
+
|
4
|
+
# Direct access for Redland adapter
|
5
|
+
#
|
6
|
+
# Syntax
|
7
|
+
# "<http://......>" = Resource
|
8
|
+
# "abc" = Literal
|
9
|
+
# "_:" = Blank Node
|
10
|
+
# "_:123" = Blank Node with id
|
11
|
+
class DirectAccess
|
12
|
+
|
13
|
+
# Execute a SPARQL query. The second parameter specify the result format (:json, :xml, :array) (optional)
|
14
|
+
#
|
15
|
+
# The return default value is an Array.
|
16
|
+
# If you specify :xml or :json in result_format, the return value is a String that contain the request format.
|
17
|
+
#
|
18
|
+
# Example: query("SELECT ?p ?o WHERE {<http://activerdf.org/test/eyal> ?p ?o}", :json)
|
19
|
+
def self.sparql_query(query, result_format=:array)
|
20
|
+
# verify input
|
21
|
+
if query.nil?
|
22
|
+
raise ActiveRdfError, "cannot execute empty query"
|
23
|
+
end
|
24
|
+
|
25
|
+
# verify class type
|
26
|
+
if query.class != String
|
27
|
+
raise ActiveRdfError, "query must be String."
|
28
|
+
end
|
29
|
+
|
30
|
+
# execute query
|
31
|
+
FederationManager.query(query, {:result_format => result_format})
|
32
|
+
end
|
33
|
+
|
34
|
+
# Find all triple by subject and predicate
|
35
|
+
# The return value is a PropertyList
|
36
|
+
def self.find_all_by_subject_and_predicate(s,p)
|
37
|
+
# verify input
|
38
|
+
if s.nil? || p.nil?
|
39
|
+
raise ActiveRdfError, "subject and predicate can't be nil"
|
40
|
+
end
|
41
|
+
|
42
|
+
# execute query
|
43
|
+
query_result = self.sparql_query("SELECT ?o WHERE {#{s} #{p} ?o}")
|
44
|
+
|
45
|
+
# return propertyList
|
46
|
+
return PropertyList.new(p, query_result, s)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# require 'active_rdf'
|
2
|
+
require 'queryengine/query2sparql'
|
3
|
+
|
4
|
+
# Generic superclass of all adapters
|
5
|
+
|
6
|
+
class ActiveRdfAdapter
|
7
|
+
# indicate if adapter can read and write
|
8
|
+
bool_accessor :reads, :writes, :enabled
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@enabled = true
|
12
|
+
end
|
13
|
+
|
14
|
+
# Indicate if the adapter supports contexts
|
15
|
+
def supports_context?
|
16
|
+
self.class.supports_context?
|
17
|
+
end
|
18
|
+
|
19
|
+
# translate a query to its string representation
|
20
|
+
def translate(query)
|
21
|
+
Query2SPARQL.translate(query)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Clear the adapter. Crude default implementation, which can be overwritten
|
25
|
+
# in subclasses. TODO: This queries all adapters, this may lead to problems...
|
26
|
+
def clear
|
27
|
+
raise(ActiveRdfError, "Can only delete from writing adapters") unless(writes?)
|
28
|
+
to_delete = Query.new.select(:s, :p, :o).where(:s, :p, :o).execute
|
29
|
+
to_delete.each do |s, p, o|
|
30
|
+
delete(s, p, o)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Indicates if this adapter class supports contexts
|
35
|
+
def self.supports_context?
|
36
|
+
@context_supported = false if(@context_supported == nil)
|
37
|
+
@context_supported
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# Method to set the "context_supported" flag
|
43
|
+
def self.supports_context
|
44
|
+
@context_supported = true
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
# require 'active_rdf'
|
2
|
+
|
3
|
+
# Maintains pool of adapter instances that are connected to datasources. Returns
|
4
|
+
# right adapter for a given datasource, by either reusing an
|
5
|
+
# existing adapter-instance or creating new a adapter-instance.
|
6
|
+
|
7
|
+
class ConnectionPool
|
8
|
+
class << self
|
9
|
+
attr_accessor :write_adapter
|
10
|
+
|
11
|
+
# sets automatic flushing of data from adapters to original datasources
|
12
|
+
# (e.g. redland on-file database). If disabled, changes to an adapter are
|
13
|
+
# not written back into the original source: you need to invoke
|
14
|
+
# ConnectionPool.flush manually
|
15
|
+
bool_accessor :auto_flush
|
16
|
+
end
|
17
|
+
# pool of all adapters
|
18
|
+
@@adapter_pool = Array.new
|
19
|
+
|
20
|
+
# pool of connection parameters to all adapter
|
21
|
+
@@adapter_parameters = Array.new
|
22
|
+
|
23
|
+
# currently active write-adapter (we can only write to one at a time)
|
24
|
+
self.write_adapter = nil
|
25
|
+
|
26
|
+
# default setting for auto_flush
|
27
|
+
self.auto_flush = true
|
28
|
+
|
29
|
+
# adapters-classes known to the pool, registered by the adapter-class
|
30
|
+
# itself using register_adapter method, used to select new
|
31
|
+
# adapter-instance for requested connection type
|
32
|
+
@@registered_adapter_types = Hash.new
|
33
|
+
|
34
|
+
# clears the pool: removes all registered data sources
|
35
|
+
def ConnectionPool.clear
|
36
|
+
ActiveRdfLogger::log_info "Clear called", self
|
37
|
+
@@adapter_pool.clear
|
38
|
+
@@adapter_parameters.clear
|
39
|
+
self.write_adapter = nil
|
40
|
+
end
|
41
|
+
|
42
|
+
def ConnectionPool.adapters
|
43
|
+
@@adapter_pool.dup
|
44
|
+
end
|
45
|
+
|
46
|
+
# flushes all openstanding changes into the original datasource.
|
47
|
+
def ConnectionPool.flush
|
48
|
+
write_adapter.flush
|
49
|
+
end
|
50
|
+
|
51
|
+
def ConnectionPool.adapter_types
|
52
|
+
@@registered_adapter_types.keys
|
53
|
+
end
|
54
|
+
|
55
|
+
# returns the set of currently registered read-access datasources
|
56
|
+
def ConnectionPool.read_adapters
|
57
|
+
@@adapter_pool.select {|adapter| adapter.reads? && adapter.enabled?}
|
58
|
+
end
|
59
|
+
|
60
|
+
def ConnectionPool.write_adapters
|
61
|
+
@@adapter_pool.select {|adapter| adapter.writes? && adapter.enabled?}
|
62
|
+
end
|
63
|
+
|
64
|
+
# returns adapter-instance for given parameters (either existing or new)
|
65
|
+
def ConnectionPool.add_data_source(connection_params)
|
66
|
+
ActiveRdfLogger::log_info(self) { "add_data_source with params: #{connection_params.inspect}" }
|
67
|
+
|
68
|
+
# either get the adapter-instance from the pool
|
69
|
+
# or create new one (and add it to the pool)
|
70
|
+
index = @@adapter_parameters.index(connection_params)
|
71
|
+
if index.nil?
|
72
|
+
# adapter not in the pool yet: create it,
|
73
|
+
# register its connection parameters in parameters-array
|
74
|
+
# and add it to the pool (at same index-position as parameters)
|
75
|
+
ActiveRdfLogger::log_debug(self) { "Create a new adapter for parameters #{connection_params.inspect}" }
|
76
|
+
adapter = create_adapter(connection_params)
|
77
|
+
@@adapter_parameters << connection_params
|
78
|
+
@@adapter_pool << adapter
|
79
|
+
else
|
80
|
+
# if adapter parametrs registered already,
|
81
|
+
# then adapter must be in the pool, at the same index-position as its parameters
|
82
|
+
ActiveRdfLogger::log_debug("Reusing existing adapter")
|
83
|
+
adapter = @@adapter_pool[index]
|
84
|
+
end
|
85
|
+
|
86
|
+
# sets the adapter as current write-source if it can write
|
87
|
+
self.write_adapter = adapter if adapter.writes?
|
88
|
+
|
89
|
+
return adapter
|
90
|
+
end
|
91
|
+
|
92
|
+
# remove one adapter from activerdf
|
93
|
+
def ConnectionPool.remove_data_source(adapter)
|
94
|
+
ActiveRdfLogger.log_info(self) { "ConnectionPool: remove_data_source with params: #{adapter.to_s}" }
|
95
|
+
|
96
|
+
index = @@adapter_pool.index(adapter)
|
97
|
+
|
98
|
+
# remove_data_source mit be called repeatedly, e.g because the adapter object is stale
|
99
|
+
unless index.nil?
|
100
|
+
@@adapter_parameters.delete_at(index)
|
101
|
+
@@adapter_pool.delete_at(index)
|
102
|
+
if self.write_adapters.empty?
|
103
|
+
self.write_adapter = nil
|
104
|
+
else
|
105
|
+
self.write_adapter = self.write_adapters.first
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
# sets adapter-instance for connection parameters (if you want to re-enable an existing adapter)
|
112
|
+
def ConnectionPool.set_data_source(adapter, connection_params = {})
|
113
|
+
index = @@adapter_parameters.index(connection_params)
|
114
|
+
if index.nil?
|
115
|
+
@@adapter_parameters << connection_params
|
116
|
+
@@adapter_pool << adapter
|
117
|
+
else
|
118
|
+
@@adapter_pool[index] = adapter
|
119
|
+
end
|
120
|
+
self.write_adapter = adapter if adapter.writes?
|
121
|
+
adapter
|
122
|
+
end
|
123
|
+
|
124
|
+
# aliasing add_data_source as add
|
125
|
+
# (code bit more complicad since they are class methods)
|
126
|
+
class << self
|
127
|
+
alias add add_data_source
|
128
|
+
end
|
129
|
+
|
130
|
+
# adapter-types can register themselves with connection pool by
|
131
|
+
# indicating which adapter-type they are
|
132
|
+
def ConnectionPool.register_adapter(type, klass)
|
133
|
+
ActiveRdfLogger::log_info(self) { "Registering adapter of type #{type} for class #{klass}" }
|
134
|
+
@@registered_adapter_types[type] = klass
|
135
|
+
end
|
136
|
+
|
137
|
+
# unregister adapter-type
|
138
|
+
def ConnectionPool.unregister_adapter(type)
|
139
|
+
ActiveRdfLogger::log_info(self) { "ConnectionPool: deregistering adapter of type #{type}" }
|
140
|
+
@@registered_adapter_types.delete type
|
141
|
+
end
|
142
|
+
|
143
|
+
# create new adapter from connection parameters
|
144
|
+
def ConnectionPool.create_adapter connection_params
|
145
|
+
# lookup registered adapter klass
|
146
|
+
klass = @@registered_adapter_types[connection_params[:type].to_sym]
|
147
|
+
|
148
|
+
# raise error if adapter type unknown
|
149
|
+
raise(ActiveRdfError, "unknown adapter type #{connection_params[:type]}") if klass.nil?
|
150
|
+
|
151
|
+
# create new adapter-instance
|
152
|
+
klass.send(:new, connection_params)
|
153
|
+
end
|
154
|
+
|
155
|
+
private_class_method :create_adapter
|
156
|
+
end
|