activerubic 0.8.0 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/active_rubic.rb +63 -34
- data/lib/active_rubic/base.rb +357 -0
- data/lib/active_rubic/cacher.rb +76 -0
- data/lib/active_rubinstein/base.rb +226 -0
- data/lib/active_rubinstein/deprecated/base.rb +208 -0
- data/lib/active_rubinstein/jena_query.rb +175 -0
- data/lib/active_rubinstein/joseki_query.rb +82 -0
- data/lib/active_rubinstein/lucene_searcher.rb +170 -0
- data/lib/active_rubinstein/sparql_formulator.rb +133 -0
- data/lib/objectmanager/namespace.rb +170 -0
- data/lib/objectmanager/owl/class.rb +150 -0
- data/lib/objectmanager/owl/object_property.rb +89 -0
- data/lib/objectmanager/owl/thing.rb +78 -0
- data/lib/objectmanager/rdfs/image.rb +272 -0
- data/lib/objectmanager/rdfs/resource.rb +287 -0
- metadata +35 -23
- data/History.txt +0 -41
- data/Manifest.txt +0 -7
- data/Rakefile +0 -35
- data/bin/active_rubic +0 -0
- data/test/test_active_rubic.rb +0 -305
@@ -0,0 +1,76 @@
|
|
1
|
+
module ActiveRubic
|
2
|
+
class Cacher < MysqlCache::Base # :nodoc:
|
3
|
+
def version
|
4
|
+
MysqlCache::Base.version
|
5
|
+
end
|
6
|
+
def create
|
7
|
+
MysqlCache::Base.create_db_index
|
8
|
+
end
|
9
|
+
def set_options( options={} )
|
10
|
+
if options[ :use_rubic ]
|
11
|
+
MysqlCache::Base.use_rubic options[ :use_rubic ]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class << self
|
16
|
+
|
17
|
+
def read( query, options={} )
|
18
|
+
|
19
|
+
case query
|
20
|
+
when :all
|
21
|
+
|
22
|
+
db_result = @@rails_db.connection.execute("SELECT * FROM #{table}s")
|
23
|
+
|
24
|
+
results = Array.new
|
25
|
+
db_result.each_hash do |h|
|
26
|
+
uri = h[ 'uri' ]
|
27
|
+
results << RDFS::Resource.new( uri ) if uri
|
28
|
+
end
|
29
|
+
|
30
|
+
when RDFS::label
|
31
|
+
|
32
|
+
return [ "my label from mysql" ]
|
33
|
+
|
34
|
+
when :images
|
35
|
+
|
36
|
+
@@rails_db.connection.execute("SELECT i.full, i.preview, i.thumb, i.original, i.license, i.photographer, i.date, l.fi AS label_fi, l.en AS label_en, d.fi AS description_fi, d.en AS description_en, g.lat, g.lon FROM images AS i LEFT JOIN (labels AS l, descriptions AS d, geopoints AS g) ON (i.label=l.id AND i.description=d.id AND i.geopoint=g.id), (SELECT id, uri FROM rdf_resources) AS rdf_r, (SELECT image_id, rdf_resource_id FROM image_rdf_resource) AS i_rdf_r WHERE rdf_r.uri = 'http://testi/uri3' AND i_rdf_r.image_id = i.id AND i_rdf_r.rdf_resource_id = rdf_r.id;")
|
37
|
+
|
38
|
+
return [ "my images from mysql" ]
|
39
|
+
|
40
|
+
when :random_image
|
41
|
+
|
42
|
+
@@rails_db.connection.execute("SELECT i.full, i.preview, i.thumb, i.original, i.license, i.photographer, i.date, l.fi AS label_fi, l.en AS label_en, d.fi AS description_fi, d.en AS description_en, g.lat, g.lon FROM images AS i LEFT JOIN (labels AS l, descriptions AS d, geopoints AS g) ON (i.label=l.id AND i.description=d.id AND i.geopoint=g.id), (SELECT id, uri FROM rdf_resources) AS rdf_r, (SELECT image_id, rdf_resource_id FROM image_rdf_resource) AS i_rdf_r WHERE rdf_r.uri = 'http://testi/uri3' AND i_rdf_r.image_id = i.id AND i_rdf_r.rdf_resource_id = rdf_r.id ORDER BY RAND() LIMIT 1;")
|
43
|
+
|
44
|
+
when :properties
|
45
|
+
|
46
|
+
@@rails_db.connection.execute("p.uri, l.fi AS label_fi, l.en AS label_en FROM property AS p LEFT JOIN (labels AS l) ON (p.label=l.id) WHERE p.uri = 'http://testi/property';");
|
47
|
+
|
48
|
+
return [ "my properties from mysql" ]
|
49
|
+
|
50
|
+
when :parents
|
51
|
+
|
52
|
+
@@rails_db.connection.execute("SELECT sc.uri FROM rdf_resources AS sc, (SELECT id, uri FROM rdf_resources) as rdf_r, (SELECT * FROM rdf_resource_superclass_rdf_resource) AS schelp WHERE rdf_r.uri = 'http://testi/uri2' AND rdf_r.id = schelp.rdf_resource_id AND sc.id = schelp.superclass_rdf_resource_id")
|
53
|
+
|
54
|
+
when :instances_of
|
55
|
+
|
56
|
+
@@rails_db.connection.execute("SELECT inst.uri FROM rdf_resources AS inst, (SELECT id, uri FROM rdf_resources) as rdf_r, (SELECT * FROM rdf_resource_instance_rdf_resource) AS insthelp WHERE rdf_r.uri = 'http://testi/uri2' AND rdf_r.id = insthelp.rdf_resource_id AND inst.id = insthelp.instance_rdf_resource_id;")
|
57
|
+
|
58
|
+
when :range
|
59
|
+
|
60
|
+
@@rails_db.connection.execute("SELECT rdf_r.uri FROM rdf_resources AS rdf_r, (SELECT id, uri FROM property) as p, (SELECT * FROM rdf_resource_range) AS rangehelp WHERE p.uri = 'http://testi/property' AND rdf_r.id = rangehelp.rdf_resource_id AND p.id = rangehelp.property_id;")
|
61
|
+
|
62
|
+
when :domain
|
63
|
+
|
64
|
+
@@rails_db.connection.execute("SELECT rdf_r.uri FROM rdf_resources AS rdf_r, (SELECT id, uri FROM property) as p, (SELECT * FROM rdf_resource_domain) AS domainhelp WHERE p.uri = 'http://testi/property' AND rdf_r.id = domainhelp.rdf_resource_id AND p.id = domainhelp.property_id;")
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
@@ -0,0 +1,226 @@
|
|
1
|
+
# require 'yaml'
|
2
|
+
require 'drb/drb'
|
3
|
+
|
4
|
+
#############################################################################
|
5
|
+
# ActiveRubinstein provides connection to Rubinstein, a DRb server with libraries written in native C Ruby, JRuby and Java. The CRuby backend provides access to SPARQL data stores with the ActiveRDF_sparql adapter whereas the JRuby part uses the JRuby for direct exchange of data via the CombinedJenaLuc JAR with Jena and Lucene.
|
6
|
+
#
|
7
|
+
# Copyright:: Copyright (c) 2007 Savonia University of Applied Sciences
|
8
|
+
# Authors:: Mikael Lammentausta, Lauri Miettinen
|
9
|
+
#
|
10
|
+
# == Rubinstein backend
|
11
|
+
# Copyright:: Copyright (c) 2007 Savonia University of Applied Sciences
|
12
|
+
# Authors:: Mikael Lammentausta, Pasi Tiirikainen
|
13
|
+
#
|
14
|
+
# == CombinedJenaLuc JAR
|
15
|
+
# Copyright:: Copyright (c) 2007 Savonia University of Applied Sciences
|
16
|
+
# Author:: Pasi Tiirikainen
|
17
|
+
#
|
18
|
+
#############################################################################
|
19
|
+
module ActiveRubinstein
|
20
|
+
class ActiveRubinsteinError < StandardError #:nodoc:
|
21
|
+
end
|
22
|
+
class AdapterNotSpecifiedError < ActiveRubinsteinError # :nodoc:
|
23
|
+
end
|
24
|
+
class AdapterNotFoundError < ActiveRubinsteinError # :nodoc:
|
25
|
+
end
|
26
|
+
class ConnectionNotEstablishedError < ActiveRubinsteinError #:nodoc:
|
27
|
+
end
|
28
|
+
class ConnectionFailedError < ActiveRubinsteinError #:nodoc:
|
29
|
+
end
|
30
|
+
class EmptyServerPoolError < ActiveRubinsteinError #:nodoc:
|
31
|
+
end
|
32
|
+
class RubinsteinNotFoundError < ActiveRubinsteinError #:nodoc:
|
33
|
+
end
|
34
|
+
|
35
|
+
# The serverpool is initialized here. The actual query methods are in these classes:
|
36
|
+
# - ActiveRubinstein::JenaQuery
|
37
|
+
# - ActiveRubinstein::LuceneSearcher
|
38
|
+
# - ActiveRubinstein::JosekiQuery
|
39
|
+
#
|
40
|
+
# The SPARQL is created by ActiveRubinstein::SparqlFormulator
|
41
|
+
#
|
42
|
+
class Base
|
43
|
+
# the default language for xml:lang matches
|
44
|
+
@@language = 'fi'
|
45
|
+
|
46
|
+
### load submodules
|
47
|
+
RUBIC_DATASTORES.to_a.each do |engine|
|
48
|
+
case engine
|
49
|
+
when :mysql
|
50
|
+
@@log.rubic " => loading ActiveRecord"
|
51
|
+
require 'active_record'
|
52
|
+
@@log.rubic " => loading MysqlCache"
|
53
|
+
require RUBINSTEIN_HOME + '/lib/mysql_cache'
|
54
|
+
require RUBIC_HOME + '/active_rubic/cacher'
|
55
|
+
|
56
|
+
### adds an accessor RailsDB when working outside of Rails
|
57
|
+
unless defined? RAILS_ROOT
|
58
|
+
require RUBINSTEIN_HOME + '/lib/rails_database'
|
59
|
+
end
|
60
|
+
|
61
|
+
when :jena
|
62
|
+
require RUBIC_HOME + '/active_rubinstein/sparql_formulator'
|
63
|
+
require RUBIC_HOME + '/active_rubinstein/jena_query'
|
64
|
+
|
65
|
+
when :joseki
|
66
|
+
# NOTE!! might be broken, hasn't been tested since 0.70 changes
|
67
|
+
require RUBIC_HOME + '/active_rubinstein/sparql_formulator'
|
68
|
+
require RUBIC_HOME + '/active_rubinstein/joseki_query'
|
69
|
+
|
70
|
+
when :lucene
|
71
|
+
require RUBIC_HOME + '/active_rubinstein/lucene_searcher'
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# creates the server pool and starts the DRb client
|
77
|
+
def initialize
|
78
|
+
self.shuffle #unless defined? $serverPool
|
79
|
+
self.roll
|
80
|
+
|
81
|
+
unless $serverPool.any? then
|
82
|
+
raise EmptyServerPoolError, "No servers in the pool"
|
83
|
+
|
84
|
+
else # pick a server from the pool
|
85
|
+
RUBIC_DATASTORES.to_a.each do |adapter|
|
86
|
+
begin
|
87
|
+
# instantiate the server for the class
|
88
|
+
case adapter
|
89
|
+
when :jena
|
90
|
+
ActiveRubinstein::JenaQuery.new
|
91
|
+
|
92
|
+
when :joseki
|
93
|
+
ActiveRubinstein::JosekiQuery.new
|
94
|
+
|
95
|
+
when :lucene
|
96
|
+
ActiveRubinstein::LuceneSearcher.new
|
97
|
+
|
98
|
+
when :geolucene
|
99
|
+
ActiveRubinstein::LuceneSearcher.new( :geolucene )
|
100
|
+
|
101
|
+
else
|
102
|
+
raise AdapterNotFoundError, adapter
|
103
|
+
end
|
104
|
+
rescue
|
105
|
+
raise ConnectionNotEstablishedError, $!
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
# # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
113
|
+
|
114
|
+
# starts the DRb client
|
115
|
+
def roll
|
116
|
+
|
117
|
+
# # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
118
|
+
|
119
|
+
# the daemon also includes this class, so do not attemp to start
|
120
|
+
# the DRb client then.
|
121
|
+
if @@in_daemon_mode then
|
122
|
+
# TODO: check first if any of the servers are online and continue
|
123
|
+
# pinging for..ever?
|
124
|
+
@@log.rubinstein " * starting the DRb client"
|
125
|
+
DRb.start_service
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
### ##### ###### #### #### ###### ###### ##### # #####
|
130
|
+
|
131
|
+
### ##### ####### ######### ################# ###############
|
132
|
+
|
133
|
+
# initializes the server pool
|
134
|
+
def shuffle
|
135
|
+
|
136
|
+
################ ############################## ###########
|
137
|
+
|
138
|
+
####### ##### ## # ######### #### # ####
|
139
|
+
|
140
|
+
unless RUBIC_DATASTORES.any? then
|
141
|
+
raise AdapterNotSpecifiedError, "No adapters specified"
|
142
|
+
|
143
|
+
else
|
144
|
+
$serverPool = {} unless defined? $serverPool
|
145
|
+
|
146
|
+
RUBIC_DATASTORES.to_a.each do |adapter|
|
147
|
+
begin
|
148
|
+
case adapter
|
149
|
+
when :jena
|
150
|
+
server = JenaEndpoint.new
|
151
|
+
if server.ping
|
152
|
+
$serverPool.update :jena => [ server ]
|
153
|
+
@@log.info " => added #{server.inspect} to pool"
|
154
|
+
end
|
155
|
+
|
156
|
+
when :joseki
|
157
|
+
server = JosekiEndpoint.new
|
158
|
+
if server.ping
|
159
|
+
$serverPool.update :joseki => [ server ]
|
160
|
+
@@log.info " => added #{server.inspect} to pool"
|
161
|
+
end
|
162
|
+
|
163
|
+
when :geolucene
|
164
|
+
server = GeoLuceneEndpoint.new
|
165
|
+
if server.ping
|
166
|
+
$serverPool.update :geolucene => [ server ]
|
167
|
+
@@log.info " => added #{server.inspect} to pool"
|
168
|
+
end
|
169
|
+
end
|
170
|
+
rescue
|
171
|
+
raise ConnectionFailedError, $!.message
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
|
178
|
+
class << self # Class methods
|
179
|
+
|
180
|
+
public
|
181
|
+
|
182
|
+
# propagates the xml:lang preference to all submodules
|
183
|
+
def set_language( lang )
|
184
|
+
@@language = lang
|
185
|
+
ActiveRubinstein::JenaQuery.language = lang
|
186
|
+
end
|
187
|
+
|
188
|
+
private
|
189
|
+
|
190
|
+
protected
|
191
|
+
|
192
|
+
def do_log( results ) # :nodoc:
|
193
|
+
@@log.boulderdash results.inspect
|
194
|
+
results.to_a! unless results.is_a? Array
|
195
|
+
if results.size < 3
|
196
|
+
@@log.rubinstein " => #{results.size} results: #{results}"
|
197
|
+
else
|
198
|
+
@@log.rubinstein " => #{results.size} results"
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
end # class << self
|
203
|
+
|
204
|
+
# gets a greeting message from one or all of the servers in the pool
|
205
|
+
#
|
206
|
+
# parameters:
|
207
|
+
# - 1 server (Symbol) -- by default query all servers in the server pool
|
208
|
+
def hello( server=nil )
|
209
|
+
begin
|
210
|
+
if server.nil? then # try all
|
211
|
+
$serverPool.each_pair do |store, url|
|
212
|
+
@@log.debug "Store: #{store.inspect}, url: #{url.inspect}"
|
213
|
+
|
214
|
+
server = url.first
|
215
|
+
@@log.rubinstein server.hello
|
216
|
+
end
|
217
|
+
else
|
218
|
+
return server.hello
|
219
|
+
end
|
220
|
+
rescue
|
221
|
+
@@log.error $!
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
end # Base
|
226
|
+
end # Module
|
@@ -0,0 +1,208 @@
|
|
1
|
+
# DEPRECATED methods
|
2
|
+
# originally written due to poor understanding of the Ruby language
|
3
|
+
|
4
|
+
# jena_query #
|
5
|
+
# Pass an unadultered query to Rubinstein daemon
|
6
|
+
#
|
7
|
+
# this may be called from several places,
|
8
|
+
# mostly from the models.
|
9
|
+
#
|
10
|
+
# Parameters:
|
11
|
+
# 1 Query
|
12
|
+
def jena_query( query, options={}, &block )
|
13
|
+
begin
|
14
|
+
# @language might be set here
|
15
|
+
unless options[ :lang ]
|
16
|
+
options.update :lang => @language if @language
|
17
|
+
end
|
18
|
+
|
19
|
+
@@log.rubinstein " => Querying Jena, options: #{options.values.join(' ')}"
|
20
|
+
@@log.debug " * Sparql: #{query.to_sp}"
|
21
|
+
@@log.debug "@@jena = #{@@jena.inspect}"
|
22
|
+
results = @@jena.query( query, options )
|
23
|
+
do_log( results )
|
24
|
+
return results
|
25
|
+
rescue
|
26
|
+
@@log.error $!
|
27
|
+
return Array.new
|
28
|
+
end
|
29
|
+
end
|
30
|
+
alias :query_from_jena :jena_query
|
31
|
+
|
32
|
+
|
33
|
+
# constructs a common triplet-query
|
34
|
+
def find_from_jena( s, p, o )
|
35
|
+
begin
|
36
|
+
# STDERR.puts "find: #{s}, #{p}, #{o}"
|
37
|
+
lang = @language || nil
|
38
|
+
# using the lang tag slows the queries down really bad..
|
39
|
+
# so we better use it only when necessary
|
40
|
+
@@jena.find( s, p, o )
|
41
|
+
# @@joseki.find( s, p, o, lang )
|
42
|
+
rescue
|
43
|
+
Array.new
|
44
|
+
end
|
45
|
+
end
|
46
|
+
alias :find :find_from_jena
|
47
|
+
|
48
|
+
|
49
|
+
########################################################
|
50
|
+
### Jena graph handling
|
51
|
+
########################################################
|
52
|
+
|
53
|
+
# Returns the roots of the ontology
|
54
|
+
# parameters:
|
55
|
+
# 1 subject (OwlThing, RDFS::Resource or URI string)
|
56
|
+
def getRoot( ontology=nil )
|
57
|
+
begin
|
58
|
+
@@log.rubinstein "getRoot of #{ontology}"
|
59
|
+
@@jena.getRoot( ontology )
|
60
|
+
rescue
|
61
|
+
@@log.error $!
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Returns the descendants of the subject
|
66
|
+
# parameters:
|
67
|
+
# 1 subject (RdfAbout, OwlThing, RDFS::Resource or URI string)
|
68
|
+
def getDescendants( subject )
|
69
|
+
@@log.rubinstein( "getDescendants: #{subject}" )
|
70
|
+
begin
|
71
|
+
@@jena.getDescendants( subject )
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Returns the children of the subject
|
76
|
+
# parameters:
|
77
|
+
# 1 subject (RdfAbout, OwlClass, RDFS::Resource or URI string)
|
78
|
+
def getChildren( subject )
|
79
|
+
begin
|
80
|
+
@@jena.getChildren( subject, false )
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Returns the parents of the subject
|
85
|
+
# parameters:
|
86
|
+
# 1 subject (RdfAbout, OwlClass, RDFS::Resource or URI string)
|
87
|
+
def getParents( subject )
|
88
|
+
begin
|
89
|
+
@@jena.getParents( subject, false )
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Returns the ancestors of the subject
|
94
|
+
# parameters:
|
95
|
+
# 1 subject (RdfAbout, OwlClass, RDFS::Resource or URI string)
|
96
|
+
def getAncestors( subject )
|
97
|
+
begin
|
98
|
+
x = @@jena.getAncestors( subject )
|
99
|
+
# do not return the RDFS::Resource object
|
100
|
+
x.delete( RDFS::Resource )
|
101
|
+
return x
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# getInstances #
|
106
|
+
# Returns the instances of a specific class
|
107
|
+
# Parameters:
|
108
|
+
# 1 subject (RdfAbout, OwlClass, RDFS::Resource or URI string)
|
109
|
+
# 2 reasoner (boolean)
|
110
|
+
def getInstances( subject, reasoner=true )
|
111
|
+
@@log.rubinstein " * getInstances of #{subject}, reasoner: #{reasoner}"
|
112
|
+
begin
|
113
|
+
x = @@jena.getInstances( subject, reasoner )
|
114
|
+
@@log.deep " => #{x.size} results: #{x}"
|
115
|
+
return x
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
####################
|
120
|
+
# getInstanceClass #
|
121
|
+
# gets the immediate RDF::type of an instance
|
122
|
+
# Parameters:
|
123
|
+
# 1 subject (RdfAbout, OwlClass, RDFS::Resource or URI string)
|
124
|
+
def getInstanceClass( subject )
|
125
|
+
@@log.rubinstein " * getInstanceClass for #{subject}"
|
126
|
+
begin
|
127
|
+
results = @@jena.getInstanceClass( subject )
|
128
|
+
do_log( results )
|
129
|
+
return results
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
|
134
|
+
##############
|
135
|
+
# getInverse #
|
136
|
+
# returns the inverse of the given property
|
137
|
+
# eg. getInverse: KUOPIO::isLocatedIn => KUOPIO::isLocationOf
|
138
|
+
# Parameters:
|
139
|
+
# 1 Property ( Property, RDFS::Resource or URI string )
|
140
|
+
def getInverse( property )
|
141
|
+
@@log.rubinstein " * getInverse of #{property}"
|
142
|
+
begin
|
143
|
+
results = @@jena.getInverse( property )
|
144
|
+
do_log( results ) # crashes
|
145
|
+
return results
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
|
150
|
+
# returns the classes from the semantic circle, around a certain uri, within a certain radius
|
151
|
+
# 1 subject (RdfAbout, OwlClass, RDFS::Resource or URI string)
|
152
|
+
# 2 radius (Float)
|
153
|
+
def getClassesWithin( subject, radius=0.2 )
|
154
|
+
begin
|
155
|
+
@@jena.getClassesWithin( subject, radius )
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
# returns the full graph path in RDFS::Resource Array
|
160
|
+
# 1 subject (RdfAbout, OwlClass, RDFS::Resource or URI string)
|
161
|
+
def getFullPath( subject )
|
162
|
+
begin
|
163
|
+
|
164
|
+
# this uses the Java function
|
165
|
+
@@jena.getFullPath( subject )
|
166
|
+
|
167
|
+
# this uses the Ruby function
|
168
|
+
# @@jena.getFullPath_( subject )
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
|
173
|
+
def getNearbyTargets( lat, long, radius )
|
174
|
+
begin
|
175
|
+
@@jena.getNearbyTargets( lat, long, radius )
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
###########################################################
|
180
|
+
|
181
|
+
|
182
|
+
|
183
|
+
def joseki_query( query, options={}, &block )
|
184
|
+
begin
|
185
|
+
@@log.rubinstein " => Querying Joseki, options: #{options}"
|
186
|
+
@@log.debug " * Sparql: #{query.to_sp}"
|
187
|
+
results = @@joseki.query( query )
|
188
|
+
do_log( results )
|
189
|
+
return results
|
190
|
+
rescue
|
191
|
+
@@log.error $!
|
192
|
+
return Array.new
|
193
|
+
end
|
194
|
+
end
|
195
|
+
alias :query_from_joseki :joseki_query
|
196
|
+
|
197
|
+
def find_from_joseki( s, p, o )
|
198
|
+
begin
|
199
|
+
# STDERR.puts "find: #{s}, #{p}, #{o}"
|
200
|
+
lang = @language || nil
|
201
|
+
# using the lang tag slows the queries down really bad..
|
202
|
+
# so we better use it only when necessary
|
203
|
+
@@joseki.find( s, p, o )
|
204
|
+
# @@joseki.find( s, p, o, lang )
|
205
|
+
rescue
|
206
|
+
Array.new
|
207
|
+
end
|
208
|
+
end
|