activerdf_net7 1.6.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|