opentox-ruby 0.0.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +41 -0
- data/Rakefile +4 -0
- data/VERSION +1 -1
- data/lib/algorithm.rb +15 -2
- data/lib/authorization.rb +381 -0
- data/lib/compound.rb +6 -0
- data/lib/config/config_ru.rb +1 -0
- data/lib/dataset.rb +98 -43
- data/lib/environment.rb +9 -18
- data/lib/error.rb +99 -0
- data/lib/feature.rb +30 -2
- data/lib/helper.rb +90 -17
- data/lib/model.rb +81 -34
- data/lib/ontology_service.rb +43 -0
- data/lib/opentox-ruby.rb +3 -2
- data/lib/opentox.rb +9 -4
- data/lib/overwrite.rb +87 -28
- data/lib/parser.rb +117 -22
- data/lib/policy.rb +261 -0
- data/lib/rest_client_wrapper.rb +110 -99
- data/lib/serializer.rb +130 -1
- data/lib/task.rb +179 -42
- data/lib/templates/config.yaml +45 -0
- data/lib/templates/default_guest_policy.xml +53 -0
- data/lib/templates/default_policy.xml +53 -0
- data/lib/to-html.rb +112 -0
- data/lib/validation.rb +183 -57
- metadata +31 -94
- data/README.rdoc +0 -23
data/lib/compound.rb
CHANGED
data/lib/config/config_ru.rb
CHANGED
data/lib/dataset.rb
CHANGED
@@ -14,7 +14,7 @@ module OpenTox
|
|
14
14
|
# dataset = OpenTox::Dataset.new("http:://webservices.in-silico/ch/dataset/1")
|
15
15
|
# @param [optional, String] uri Dataset URI
|
16
16
|
# @return [OpenTox::Dataset] Dataset object
|
17
|
-
def initialize(uri=nil)
|
17
|
+
def initialize(uri=nil,subjectid=nil)
|
18
18
|
super uri
|
19
19
|
@features = {}
|
20
20
|
@compounds = []
|
@@ -26,9 +26,9 @@ module OpenTox
|
|
26
26
|
# dataset = OpenTox::Dataset.create
|
27
27
|
# @param [optional, String] uri Dataset URI
|
28
28
|
# @return [OpenTox::Dataset] Dataset object
|
29
|
-
def self.create(uri=CONFIG[:services]["opentox-dataset"])
|
30
|
-
dataset = Dataset.new
|
31
|
-
dataset.save
|
29
|
+
def self.create(uri=CONFIG[:services]["opentox-dataset"], subjectid=nil)
|
30
|
+
dataset = Dataset.new(nil,subjectid)
|
31
|
+
dataset.save(subjectid)
|
32
32
|
dataset
|
33
33
|
end
|
34
34
|
|
@@ -38,29 +38,43 @@ module OpenTox
|
|
38
38
|
# - you will have to set remaining metadata manually
|
39
39
|
# @param [String] file CSV file path
|
40
40
|
# @return [OpenTox::Dataset] Dataset object with CSV data
|
41
|
-
def self.create_from_csv_file(file)
|
42
|
-
dataset = Dataset.create
|
41
|
+
def self.create_from_csv_file(file, subjectid=nil)
|
42
|
+
dataset = Dataset.create(CONFIG[:services]["opentox-dataset"], subjectid)
|
43
43
|
parser = Parser::Spreadsheets.new
|
44
44
|
parser.dataset = dataset
|
45
45
|
parser.load_csv(File.open(file).read)
|
46
|
-
dataset.save
|
46
|
+
dataset.save(subjectid)
|
47
47
|
dataset
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
# Find a dataset and load all data. This can be time consuming, use Dataset.new together with one of the load_* methods for a fine grained control over data loading.
|
51
51
|
# @param [String] uri Dataset URI
|
52
52
|
# @return [OpenTox::Dataset] Dataset object with all data
|
53
|
-
def self.find(uri)
|
54
|
-
|
55
|
-
dataset.
|
53
|
+
def self.find(uri, subjectid=nil)
|
54
|
+
return nil unless uri
|
55
|
+
dataset = Dataset.new(uri, subjectid)
|
56
|
+
dataset.load_all(subjectid)
|
56
57
|
dataset
|
57
58
|
end
|
59
|
+
|
60
|
+
# replaces find as exist check, takes not as long, does NOT raise an un-authorized exception
|
61
|
+
# @param [String] uri Dataset URI
|
62
|
+
# @return [Boolean] true if dataset exists and user has get rights, false else
|
63
|
+
def self.exist?(uri, subjectid=nil)
|
64
|
+
return false unless uri
|
65
|
+
dataset = Dataset.new(uri, subjectid)
|
66
|
+
begin
|
67
|
+
dataset.load_metadata( subjectid ).size > 0
|
68
|
+
rescue
|
69
|
+
false
|
70
|
+
end
|
71
|
+
end
|
58
72
|
|
59
73
|
# Get all datasets from a service
|
60
74
|
# @param [optional,String] uri URI of the dataset service, defaults to service specified in configuration
|
61
75
|
# @return [Array] Array of dataset object without data (use one of the load_* methods to pull data from the server)
|
62
|
-
def self.all(uri=CONFIG[:services]["opentox-dataset"])
|
63
|
-
RestClientWrapper.get(uri
|
76
|
+
def self.all(uri=CONFIG[:services]["opentox-dataset"], subjectid=nil)
|
77
|
+
RestClientWrapper.get(uri,{:accept => "text/uri-list",:subjectid => subjectid}).to_s.each_line.collect{|u| Dataset.new(u, subjectid)}
|
64
78
|
end
|
65
79
|
|
66
80
|
# Load YAML representation into the dataset
|
@@ -71,16 +85,21 @@ module OpenTox
|
|
71
85
|
end
|
72
86
|
|
73
87
|
def load_rdfxml(rdfxml)
|
74
|
-
|
88
|
+
raise "rdfxml data is empty" if rdfxml.to_s.size==0
|
89
|
+
file = Tempfile.new("ot-rdfxml")
|
90
|
+
file.puts rdfxml
|
91
|
+
file.close
|
92
|
+
load_rdfxml_file file
|
93
|
+
file.delete
|
75
94
|
end
|
76
95
|
|
77
96
|
# Load RDF/XML representation from a file
|
78
97
|
# @param [String] file File with RDF/XML representation of the dataset
|
79
98
|
# @return [OpenTox::Dataset] Dataset object with RDF/XML data
|
80
|
-
def load_rdfxml_file(file)
|
81
|
-
parser = Parser::Owl::Dataset.new @uri
|
99
|
+
def load_rdfxml_file(file, subjectid=nil)
|
100
|
+
parser = Parser::Owl::Dataset.new @uri, subjectid
|
82
101
|
parser.uri = file.path
|
83
|
-
copy parser.load_uri
|
102
|
+
copy parser.load_uri(subjectid)
|
84
103
|
end
|
85
104
|
|
86
105
|
# Load CSV string (format specification: http://toxcreate.org/help)
|
@@ -89,8 +108,8 @@ module OpenTox
|
|
89
108
|
# - you will have to set remaining metadata manually
|
90
109
|
# @param [String] csv CSV representation of the dataset
|
91
110
|
# @return [OpenTox::Dataset] Dataset object with CSV data
|
92
|
-
def load_csv(csv)
|
93
|
-
save unless @uri # get a uri for creating features
|
111
|
+
def load_csv(csv, subjectid=nil)
|
112
|
+
save(subjectid) unless @uri # get a uri for creating features
|
94
113
|
parser = Parser::Spreadsheets.new
|
95
114
|
parser.dataset = self
|
96
115
|
parser.load_csv(csv)
|
@@ -102,8 +121,8 @@ module OpenTox
|
|
102
121
|
# - you will have to set remaining metadata manually
|
103
122
|
# @param [Excel] book Excel workbook object (created with roo gem)
|
104
123
|
# @return [OpenTox::Dataset] Dataset object with Excel data
|
105
|
-
def load_spreadsheet(book)
|
106
|
-
save unless @uri # get a uri for creating features
|
124
|
+
def load_spreadsheet(book, subjectid=nil)
|
125
|
+
save(subjectid) unless @uri # get a uri for creating features
|
107
126
|
parser = Parser::Spreadsheets.new
|
108
127
|
parser.dataset = self
|
109
128
|
parser.load_spreadsheet(book)
|
@@ -111,26 +130,26 @@ module OpenTox
|
|
111
130
|
|
112
131
|
# Load and return only metadata of a Dataset object
|
113
132
|
# @return [Hash] Metadata of the dataset
|
114
|
-
def load_metadata
|
115
|
-
add_metadata Parser::Owl::Dataset.new(@uri).load_metadata
|
133
|
+
def load_metadata(subjectid=nil)
|
134
|
+
add_metadata Parser::Owl::Dataset.new(@uri, subjectid).load_metadata(subjectid)
|
116
135
|
self.uri = @uri if @uri # keep uri
|
117
136
|
@metadata
|
118
137
|
end
|
119
138
|
|
120
139
|
# Load all data (metadata, data_entries, compounds and features) from URI
|
121
|
-
def load_all
|
140
|
+
def load_all(subjectid=nil)
|
122
141
|
if (CONFIG[:yaml_hosts].include?(URI.parse(@uri).host))
|
123
|
-
copy YAML.load(RestClientWrapper.get(@uri, :accept => "application/x-yaml"))
|
142
|
+
copy YAML.load(RestClientWrapper.get(@uri, {:accept => "application/x-yaml", :subjectid => subjectid}))
|
124
143
|
else
|
125
|
-
parser = Parser::Owl::Dataset.new(@uri)
|
126
|
-
copy parser.load_uri
|
144
|
+
parser = Parser::Owl::Dataset.new(@uri, subjectid)
|
145
|
+
copy parser.load_uri(subjectid)
|
127
146
|
end
|
128
147
|
end
|
129
148
|
|
130
149
|
# Load and return only compound URIs from the dataset service
|
131
150
|
# @return [Array] Compound URIs in the dataset
|
132
|
-
def load_compounds
|
133
|
-
RestClientWrapper.get(File.join(uri,"compounds")
|
151
|
+
def load_compounds(subjectid=nil)
|
152
|
+
RestClientWrapper.get(File.join(uri,"compounds"),{:accept=> "text/uri-list", :subjectid => subjectid}).to_s.each_line do |compound_uri|
|
134
153
|
@compounds << compound_uri.chomp
|
135
154
|
end
|
136
155
|
@compounds.uniq!
|
@@ -138,9 +157,9 @@ module OpenTox
|
|
138
157
|
|
139
158
|
# Load and return only features from the dataset service
|
140
159
|
# @return [Hash] Features of the dataset
|
141
|
-
def load_features
|
142
|
-
parser = Parser::Owl::Dataset.new(@uri)
|
143
|
-
@features = parser.load_features
|
160
|
+
def load_features(subjectid=nil)
|
161
|
+
parser = Parser::Owl::Dataset.new(@uri, subjectid)
|
162
|
+
@features = parser.load_features(subjectid)
|
144
163
|
@features
|
145
164
|
end
|
146
165
|
|
@@ -218,7 +237,7 @@ module OpenTox
|
|
218
237
|
@features[feature] = {} unless @features[feature]
|
219
238
|
@data_entries[compound] = {} unless @data_entries[compound]
|
220
239
|
@data_entries[compound][feature] = [] unless @data_entries[compound][feature]
|
221
|
-
@data_entries[compound][feature] << value
|
240
|
+
@data_entries[compound][feature] << value if value!=nil
|
222
241
|
end
|
223
242
|
|
224
243
|
# Add/modify metadata, existing entries will be overwritten
|
@@ -242,34 +261,70 @@ module OpenTox
|
|
242
261
|
def add_feature_metadata(feature,metadata)
|
243
262
|
metadata.each { |k,v| @features[feature][k] = v }
|
244
263
|
end
|
264
|
+
|
265
|
+
# Add a new compound
|
266
|
+
# @param [String] compound Compound URI
|
267
|
+
def add_compound (compound)
|
268
|
+
@compounds << compound unless @compounds.include? compound
|
269
|
+
end
|
270
|
+
|
271
|
+
# Creates a new dataset, by splitting the current dataset, i.e. using only a subset of compounds and features
|
272
|
+
# @param [Array] compounds List of compound URIs
|
273
|
+
# @param [Array] features List of feature URIs
|
274
|
+
# @param [Hash] metadata Hash containing the metadata for the new dataset
|
275
|
+
# @param [String] subjectid
|
276
|
+
# @return [OpenTox::Dataset] newly created dataset, already saved
|
277
|
+
def split( compounds, features, metadata, subjectid=nil)
|
278
|
+
LOGGER.debug "split dataset using "+compounds.size.to_s+"/"+@compounds.size.to_s+" compounds"
|
279
|
+
raise "no new compounds selected" unless compounds and compounds.size>0
|
280
|
+
dataset = OpenTox::Dataset.create(CONFIG[:services]["opentox-dataset"],subjectid)
|
281
|
+
if features.size==0
|
282
|
+
compounds.each{ |c| dataset.add_compound(c) }
|
283
|
+
else
|
284
|
+
compounds.each do |c|
|
285
|
+
features.each do |f|
|
286
|
+
unless @data_entries[c][f]
|
287
|
+
dataset.add(c,f,nil)
|
288
|
+
else
|
289
|
+
@data_entries[c][f].each do |v|
|
290
|
+
dataset.add(c,f,v)
|
291
|
+
end
|
292
|
+
end
|
293
|
+
end
|
294
|
+
end
|
295
|
+
end
|
296
|
+
dataset.add_metadata(metadata)
|
297
|
+
dataset.save(subjectid)
|
298
|
+
dataset
|
299
|
+
end
|
245
300
|
|
246
301
|
# Save dataset at the dataset service
|
247
302
|
# - creates a new dataset if uri is not set
|
248
303
|
# - overwrites dataset if uri exists
|
249
304
|
# @return [String] Dataset URI
|
250
|
-
def save
|
305
|
+
def save(subjectid=nil)
|
251
306
|
# TODO: rewrite feature URI's ??
|
252
307
|
@compounds.uniq!
|
253
308
|
if @uri
|
254
309
|
if (CONFIG[:yaml_hosts].include?(URI.parse(@uri).host))
|
255
|
-
RestClientWrapper.post(@uri,{:content_type => "application/x-yaml"}
|
310
|
+
RestClientWrapper.post(@uri,self.to_yaml,{:content_type => "application/x-yaml", :subjectid => subjectid})
|
256
311
|
else
|
257
312
|
File.open("ot-post-file.rdf","w+") { |f| f.write(self.to_rdfxml); @path = f.path }
|
258
|
-
task_uri = RestClient.post(@uri, {:file => File.new(@path)},{:accept => "text/uri-list"}).to_s.chomp
|
313
|
+
task_uri = RestClient.post(@uri, {:file => File.new(@path)},{:accept => "text/uri-list" , :subjectid => subjectid}).to_s.chomp
|
259
314
|
#task_uri = `curl -X POST -H "Accept:text/uri-list" -F "file=@#{@path};type=application/rdf+xml" http://apps.ideaconsult.net:8080/ambit2/dataset`
|
260
315
|
Task.find(task_uri).wait_for_completion
|
261
|
-
self.uri = RestClientWrapper.get(task_uri
|
316
|
+
self.uri = RestClientWrapper.get(task_uri,{:accept => 'text/uri-list', :subjectid => subjectid})
|
262
317
|
end
|
263
318
|
else
|
264
319
|
# create dataset if uri is empty
|
265
|
-
self.uri = RestClientWrapper.post(CONFIG[:services]["opentox-dataset"],{}).to_s.chomp
|
320
|
+
self.uri = RestClientWrapper.post(CONFIG[:services]["opentox-dataset"],{:subjectid => subjectid}).to_s.chomp
|
266
321
|
end
|
267
322
|
@uri
|
268
323
|
end
|
269
324
|
|
270
325
|
# Delete dataset at the dataset service
|
271
|
-
def delete
|
272
|
-
RestClientWrapper.delete
|
326
|
+
def delete(subjectid=nil)
|
327
|
+
RestClientWrapper.delete(@uri, :subjectid => subjectid)
|
273
328
|
end
|
274
329
|
|
275
330
|
private
|
@@ -293,9 +348,9 @@ module OpenTox
|
|
293
348
|
# Find a prediction dataset and load all data.
|
294
349
|
# @param [String] uri Prediction dataset URI
|
295
350
|
# @return [OpenTox::Dataset] Prediction dataset object with all data
|
296
|
-
def self.find(uri)
|
297
|
-
prediction = LazarPrediction.new(uri)
|
298
|
-
prediction.load_all
|
351
|
+
def self.find(uri, subjectid=nil)
|
352
|
+
prediction = LazarPrediction.new(uri, subjectid)
|
353
|
+
prediction.load_all(subjectid)
|
299
354
|
prediction
|
300
355
|
end
|
301
356
|
|
data/lib/environment.rb
CHANGED
@@ -23,22 +23,8 @@ else
|
|
23
23
|
end
|
24
24
|
|
25
25
|
# database
|
26
|
-
|
27
|
-
|
28
|
-
case CONFIG[:database][:adapter]
|
29
|
-
when /sqlite/i
|
30
|
-
db_dir = File.join(basedir, "db")
|
31
|
-
FileUtils.mkdir_p db_dir
|
32
|
-
DataMapper::setup(:default, "sqlite3://#{db_dir}/opentox.sqlite3")
|
33
|
-
else
|
34
|
-
DataMapper.setup(:default, {
|
35
|
-
:adapter => CONFIG[:database][:adapter],
|
36
|
-
:database => CONFIG[:database][:database],
|
37
|
-
:username => CONFIG[:database][:username],
|
38
|
-
:password => CONFIG[:database][:password],
|
39
|
-
:host => CONFIG[:database][:host]})
|
40
|
-
end
|
41
|
-
end
|
26
|
+
`redis-server /opt/redis/redis.conf` unless File.exists? "/var/run/redis.pid"
|
27
|
+
Ohm.connect :thread_safe => true
|
42
28
|
|
43
29
|
# load mail settings for error messages
|
44
30
|
load File.join config_dir,"mail.rb" if File.exists?(File.join config_dir,"mail.rb")
|
@@ -54,8 +40,8 @@ else
|
|
54
40
|
end
|
55
41
|
|
56
42
|
# Regular expressions for parsing classification data
|
57
|
-
TRUE_REGEXP = /^(true|active|1|1.0)$/i
|
58
|
-
FALSE_REGEXP = /^(false|inactive|0|0.0)$/i
|
43
|
+
TRUE_REGEXP = /^(true|active|1|1.0|tox)$/i
|
44
|
+
FALSE_REGEXP = /^(false|inactive|0|0.0|low tox)$/i
|
59
45
|
|
60
46
|
# Task durations
|
61
47
|
DEFAULT_TASK_MAX_DURATION = 36000
|
@@ -83,6 +69,11 @@ class OwlNamespace
|
|
83
69
|
|
84
70
|
end
|
85
71
|
|
72
|
+
AA_SERVER = CONFIG[:authorization] ? (CONFIG[:authorization][:server] ? CONFIG[:authorization][:server] : nil) : nil
|
73
|
+
CONFIG[:authorization][:authenticate_request] = [""] unless CONFIG[:authorization][:authenticate_request]
|
74
|
+
CONFIG[:authorization][:authorize_request] = [""] unless CONFIG[:authorization][:authorize_request]
|
75
|
+
CONFIG[:authorization][:free_request] = [""] unless CONFIG[:authorization][:free_request]
|
76
|
+
|
86
77
|
RDF = OwlNamespace.new 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
|
87
78
|
OWL = OwlNamespace.new 'http://www.w3.org/2002/07/owl#'
|
88
79
|
DC = OwlNamespace.new 'http://purl.org/dc/elements/1.1/'
|
data/lib/error.rb
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
|
2
|
+
# adding additional fields to Exception class to format errors according to OT-API
|
3
|
+
class Exception
|
4
|
+
attr_accessor :errorCause
|
5
|
+
def http_code; 500; end
|
6
|
+
end
|
7
|
+
|
8
|
+
module OpenTox
|
9
|
+
|
10
|
+
class BadRequestError < RuntimeError
|
11
|
+
def http_code; 400; end
|
12
|
+
end
|
13
|
+
|
14
|
+
class NotAuthorizedError < RuntimeError
|
15
|
+
def http_code; 401; end
|
16
|
+
end
|
17
|
+
|
18
|
+
class NotFoundError < RuntimeError
|
19
|
+
def http_code; 404; end
|
20
|
+
end
|
21
|
+
|
22
|
+
class ServiceUnavailableError < RuntimeError
|
23
|
+
def http_code; 503; end
|
24
|
+
end
|
25
|
+
|
26
|
+
class RestCallError < RuntimeError
|
27
|
+
attr_accessor :rest_params
|
28
|
+
def http_code; 502; end
|
29
|
+
end
|
30
|
+
|
31
|
+
class ErrorReport
|
32
|
+
|
33
|
+
# TODO replace params with URIs (errorCause -> OT.errorCause)
|
34
|
+
attr_reader :message, :actor, :errorCause, :http_code, :errorDetails, :errorType
|
35
|
+
|
36
|
+
private
|
37
|
+
def initialize( http_code, erroType, message, actor, errorCause, rest_params=nil, backtrace=nil )
|
38
|
+
@http_code = http_code
|
39
|
+
@errorType = erroType
|
40
|
+
@message = message
|
41
|
+
@actor = actor
|
42
|
+
@errorCause = errorCause
|
43
|
+
@rest_params = rest_params
|
44
|
+
@backtrace = backtrace
|
45
|
+
end
|
46
|
+
|
47
|
+
public
|
48
|
+
# creates a error report object, from an ruby-exception object
|
49
|
+
# @param [Exception] error
|
50
|
+
# @param [String] actor, URI of the call that cause the error
|
51
|
+
def self.create( error, actor )
|
52
|
+
rest_params = error.rest_params if error.is_a?(OpenTox::RestCallError) and error.rest_params
|
53
|
+
backtrace = error.backtrace.short_backtrace if CONFIG[:backtrace]
|
54
|
+
ErrorReport.new( error.http_code, error.class.to_s, error.message, actor, error.errorCause, rest_params, backtrace )
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.from_rdf(rdf)
|
58
|
+
metadata = OpenTox::Parser::Owl.from_rdf( rdf, OT.ErrorReport ).metadata
|
59
|
+
ErrorReport.new(metadata[OT.statusCode], metadata[OT.errorCode], metadata[OT.message], metadata[OT.actor], metadata[OT.errorCause])
|
60
|
+
end
|
61
|
+
|
62
|
+
# overwrite sorting to make easier readable
|
63
|
+
def to_yaml_properties
|
64
|
+
p = super
|
65
|
+
p = ( p - ["@backtrace"]) + ["@backtrace"] if @backtrace
|
66
|
+
p = ( p - ["@errorCause"]) + ["@errorCause"] if @errorCause
|
67
|
+
p
|
68
|
+
end
|
69
|
+
|
70
|
+
def rdf_content()
|
71
|
+
c = {
|
72
|
+
RDF.type => OT.ErrorReport,
|
73
|
+
OT.statusCode => @http_code,
|
74
|
+
OT.message => @message,
|
75
|
+
OT.actor => @actor,
|
76
|
+
OT.errorCode => @errorType,
|
77
|
+
}
|
78
|
+
c[OT.errorCause] = @errorCause.rdf_content if @errorCause
|
79
|
+
c
|
80
|
+
end
|
81
|
+
|
82
|
+
def to_rdfxml
|
83
|
+
s = Serializer::Owl.new
|
84
|
+
s.add_resource(CONFIG[:services]["opentox-task"]+"/tmpId/ErrorReport/tmpId", OT.errorReport, rdf_content)
|
85
|
+
s.to_rdfxml
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
class Array
|
91
|
+
def short_backtrace
|
92
|
+
short = []
|
93
|
+
each do |c|
|
94
|
+
break if c =~ /sinatra\/base/
|
95
|
+
short << c
|
96
|
+
end
|
97
|
+
short.join("\n")
|
98
|
+
end
|
99
|
+
end
|
data/lib/feature.rb
CHANGED
@@ -2,14 +2,42 @@ module OpenTox
|
|
2
2
|
class Feature
|
3
3
|
include OpenTox
|
4
4
|
|
5
|
-
def self.find(uri)
|
5
|
+
def self.find(uri, subjectid=nil)
|
6
|
+
return nil unless uri
|
6
7
|
feature = Feature.new uri
|
7
8
|
if (CONFIG[:yaml_hosts].include?(URI.parse(uri).host))
|
8
|
-
feature.add_metadata YAML.load(RestClientWrapper.get(uri
|
9
|
+
feature.add_metadata YAML.load(RestClientWrapper.get(uri,{:accept => "application/x-yaml", :subjectid => subjectid}))
|
9
10
|
else
|
10
11
|
feature.add_metadata Parser::Owl::Dataset.new(uri).load_metadata
|
11
12
|
end
|
12
13
|
feature
|
13
14
|
end
|
15
|
+
|
16
|
+
# provides domain (possible target values) of classification feature
|
17
|
+
# @return [Array] list with possible target values
|
18
|
+
def domain
|
19
|
+
if metadata[OT.acceptValue]
|
20
|
+
raise "accept value found, remove hack and implement correctly"
|
21
|
+
else
|
22
|
+
if @uri=~/feature\/26221/ || @uri=~/feature\/221726/
|
23
|
+
return ["mutagen" , "nonmutagen"]
|
24
|
+
end
|
25
|
+
return [true, false]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# provides feature type, possible types are "regression" or "classification"
|
30
|
+
# @return [String] feature type, unknown if OT.isA property is unknown/ not set
|
31
|
+
def feature_type
|
32
|
+
case metadata[OT.isA]
|
33
|
+
when /NominalFeature/
|
34
|
+
"classification"
|
35
|
+
when /NumericFeature/
|
36
|
+
"regression"
|
37
|
+
else
|
38
|
+
"unknown"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
14
42
|
end
|
15
43
|
end
|