summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChristoph Helma <helma@in-silico.de>2010-03-16 17:35:34 +0100
committerChristoph Helma <helma@in-silico.de>2010-03-16 17:35:34 +0100
commit537aea2020a7b75d5b669642c7c3d9a715316a31 (patch)
tree49ca384c98616a62ded932c70a9231c825a3c190 /lib
parent1c9b874b8db1a2ae27fd97137d7a014188531bc1 (diff)
OWL-DL export added
Diffstat (limited to 'lib')
-rw-r--r--lib/algorithm.rb28
-rw-r--r--lib/dataset.rb16
-rw-r--r--lib/owl.rb200
3 files changed, 137 insertions, 107 deletions
diff --git a/lib/algorithm.rb b/lib/algorithm.rb
index 11c619d..8083db2 100644
--- a/lib/algorithm.rb
+++ b/lib/algorithm.rb
@@ -4,18 +4,6 @@ module OpenTox
module Algorithm
class Fminer
- include Owl
-
- def initialize
- super
- self.uri = File.join(@@config[:services]["opentox-algorithm"],'fminer')
- self.title = "fminer"
- self.source = "http://github.com/amaunz/libfminer"
- self.parameters = {
- "Dataset URI" => { :scope => "mandatory", :value => "dataset_uri" },
- "Feature URI for dependent variable" => { :scope => "mandatory", :value => "feature_uri" }
- }
- end
def self.create_feature_dataset(params)
LOGGER.debug File.basename(__FILE__) + ": creating feature dataset"
@@ -29,22 +17,6 @@ module OpenTox
end
class Lazar
- include Owl
-
- def initialize
- super
- self.uri = File.join(@@config[:services]["opentox-algorithm"],'lazar')
- self.title = "lazar"
- self.source = "http://github.com/helma/opentox-algorithm"
- self.parameters = {
- "Dataset URI" =>
- { :scope => "mandatory", :value => "dataset_uri" },
- "Feature URI for dependent variable" =>
- { :scope => "mandatory", :value => "feature_uri" },
- "Feature generation URI" =>
- { :scope => "mandatory", :value => "feature_generation_uri" }
- }
- end
def self.create_model(params)
LOGGER.debug params
diff --git a/lib/dataset.rb b/lib/dataset.rb
index 468af04..ab363a9 100644
--- a/lib/dataset.rb
+++ b/lib/dataset.rb
@@ -3,7 +3,6 @@ LOGGER.progname = File.expand_path(__FILE__)
module OpenTox
class Dataset
- #include Owl
attr_accessor :uri, :title, :source, :identifier, :data, :features, :compounds
@@ -14,7 +13,6 @@ module OpenTox
end
def self.find(uri)
- #LOGGER.debug "Getting data from #{uri}"
YAML.load RestClient.get(uri, :accept => 'application/x-yaml').to_s
end
@@ -23,19 +21,7 @@ module OpenTox
LOGGER.debug "Saving dataset"
@features.uniq!
@compounds.uniq!
- #task_uri = RestClient::Resource.new(@@config[:services]["opentox-dataset"], :user => @@users[:users].keys[0], :password => @@users[:users].values[0]).post(self.to_yaml, :content_type => "application/x-yaml").chomp.to_s
- uri = RestClient::Resource.new(@@config[:services]["opentox-dataset"], :user => @@users[:users].keys[0], :password => @@users[:users].values[0]).post(self.to_yaml, :content_type => "application/x-yaml").chomp.to_s
- #task = OpenTox::Task.find(task_uri)
- #LOGGER.debug "Waiting for task #{task_uri}"
- #task.wait_for_completion
- #LOGGER.debug "Dataset task #{task_uri} completed"
- #if task.failed?
- #LOGGER.error "Saving dataset failed"
- #task.failed
- #exit
- #end
- #task.resource
- uri
+ RestClient::Resource.new(@@config[:services]["opentox-dataset"], :user => @@users[:users].keys[0], :password => @@users[:users].values[0]).post(self.to_yaml, :content_type => "application/x-yaml").chomp.to_s
end
=begin
diff --git a/lib/owl.rb b/lib/owl.rb
index 146bce7..05152a3 100644
--- a/lib/owl.rb
+++ b/lib/owl.rb
@@ -1,31 +1,132 @@
module OpenTox
- module Owl
+ class Owl
- attr_reader :uri
+ attr_reader :uri, :ot_class
- def initialize
-
- @model = Redland::Model.new Redland::MemoryStore.new
- @parser = Redland::Parser.new
- #@serializer = Redland::Serializer.ntriples
+ def initialize(ot_class,uri)
# read OT Ontology
#@parser.parse_into_model(@model,"http://opentox.org/data/documents/development/RDF%20files/OpenToxOntology/at_download/file")
#@parser.parse_string_into_model(@model,File.read(File.join(File.dirname(__FILE__),"opentox.owl")),'/')
- # reate an anonymous resource for metadata
- # this has to be rewritten with an URI as soon as the resource has been saved at an definitive location
- tmp = @model.create_resource
- @model.add tmp, RDF['type'], OT[self.owl_class]
+
+ @model = Redland::Model.new Redland::MemoryStore.new
+ @parser = Redland::Parser.new
+ @ot_class = ot_class
+ @uri = Redland::Uri.new(uri.chomp)
+ @model.add @uri, RDF['type'], OT[@ot_class]
+
+ end
+
+ def method_missing(name, *args)
+ methods = ['title', 'source', 'identifier', 'algorithm', 'independentVariables', 'dependentVariable']
+ if methods.include? name.to_s.sub(/=/,'')
+ if /=/ =~ name.to_s # setter
+ name = name.to_s.sub(/=/,'')
+ begin # delete existing entry
+ t = @model.object(@uri, DC[name])
+ @model.delete @uri, DC[name], t
+ rescue
+ end
+ @model.add @uri, DC[name], args.first
+ else # getter
+ @model.object(@uri, DC['title']).to_s
+ end
+ else
+ raise "Method '#{name.to_s}' not found."
+ end
+ end
+
+ def parameters=(params)
+ params.each do |name, settings|
+ parameter = @model.create_resource
+ @model.add parameter, RDF['type'], OT['Parameter']
+ @model.add parameter, DC['title'], name
+ @model.add parameter, OT['paramScope'], settings[:scope]
+ @model.add parameter, OT['paramValue'], settings[:value]
+ end
+ end
+
+ def add_data_entries(compound_uri,features)
+ # add compound
+ compound = @model.subject(DC["identifier"], compound_uri)
+ if compound.nil?
+ compound = @model.create_resource(compound_uri)
+ @model.add compound, RDF['type'], OT["Compound"]
+ @model.add compound, DC["identifier"], compound_uri
+ end
+ features.each do |f|
+ f.each do |feature_uri,value|
+ # add feature
+ feature = find_or_create_feature feature_uri
+ if value.class.to_s == 'Hash'
+ # create tuple
+ tuple = @model.create_resource
+ @model.add tuple, RDF['type'], OT["Tuple"]
+ @model.add tuple, OT['feature'], feature
+ value.each do |uri,v|
+ f = find_or_create_feature uri
+ complex_value = @model.create_resource
+ @model.add tuple, OT['complexValue'], complex_value
+ @model.add complex_value, RDF['type'], OT["FeatureValue"]
+ @model.add complex_value, OT['feature'], f
+ @model.add complex_value, OT['value'], v.to_s
+ end
+ # add data entry
+ data_entry = @model.subject OT['compound'], compound
+ if data_entry.nil?
+ data_entry = @model.create_resource
+ @model.add @uri, OT['dataEntry'], data_entry
+ @model.add data_entry, RDF['type'], OT["DataEntry"]
+ @model.add data_entry, OT['compound'], compound
+ end
+ @model.add data_entry, OT['values'], tuple
+ else
+ data_entry = @model.subject OT['compound'], compound
+ if data_entry.nil?
+ data_entry = @model.create_resource
+ @model.add @uri, OT['dataEntry'], data_entry
+ @model.add data_entry, RDF['type'], OT["DataEntry"]
+ @model.add data_entry, OT['compound'], compound
+ end
+ values = @model.create_resource
+ @model.add data_entry, OT['values'], values
+ @model.add values, RDF['type'], OT['FeatureValue']
+ @model.add values, OT['feature'], feature
+ @model.add values, OT['value'], value.to_s
+ end
+ end
+ end
+ end
+
+ def find_or_create_feature(feature_uri)
+ feature = @model.subject(DC["identifier"], feature_uri)
+ if feature.nil?
+ feature = @model.create_resource(feature_uri)
+ @model.add feature, RDF['type'], OT["Feature"]
+ @model.add feature, DC["identifier"], feature_uri
+ @model.add feature, DC["title"], File.basename(feature_uri).split(/#/)[1]
+ @model.add feature, DC['source'], feature_uri
+ end
+ feature
+ end
+
+ def rdf
+ @model.to_string
+ end
+
+=begin
+
+ def to_ntriples
+ @serializer.model_to_string(Redland::Uri.new(@uri), @model)
end
def uri=(uri)
@uri = uri.chomp
- uri = Redland::Uri.new(uri)
# rewrite uri
- @model.subjects(RDF['type'],OT[self.owl_class]).each do |me|
- @model.delete(me,RDF['type'],OT[self.owl_class])
- @model.add(uri,RDF['type'],OT[self.owl_class])
+ @model.subjects(RDF['type'],OT[@ot_class]).each do |me|
+ @model.delete(me,RDF['type'],OT[@ot_class])
+ @model.add(uri,RDF['type'],OT[@ot_class])
id = @model.object(me, DC['identifier'])
@model.delete me, DC['identifier'], id
# find/replace metadata
@@ -37,17 +138,18 @@ module OpenTox
end
end
- def title
- # I have no idea, why 2 subjects are returned
- # iterating over all subjects leads to memory allocation problems
- # SPARQL queries also do not work
- #me = @model.subjects(RDF['type'],OT[self.owl_class])[1]
- me = @model.subject(RDF['type'],OT[self.owl_class])
- @model.object(me, DC['title']).to_s
+ def read(uri)
+ @parser.parse_into_model(@model,uri)
+ @uri = uri
+ end
+
+ def identifier
+ me = @model.subject(RDF['type'],OT[@ot_class])
+ @model.object(me, DC['identifier']).to_s unless me.nil?
end
def title=(title)
- me = @model.subject(RDF['type'],OT[self.owl_class])
+ me = @model.subject(RDF['type'],OT[@ot_class])
begin
t = @model.object(me, DC['title'])
@model.delete me, DC['title'], t
@@ -56,13 +158,8 @@ module OpenTox
@model.add me, DC['title'], title
end
- def source
- me = @model.subject(RDF['type'],OT[self.owl_class])
- @model.object(me, DC['source']).to_s unless me.nil?
- end
-
def source=(source)
- me = @model.subject(RDF['type'],OT[self.owl_class])
+ me = @model.subject(RDF['type'],OT[@ot_class])
begin
t = @model.object(me, DC['source'])
@model.delete me, DC['source'], t
@@ -71,44 +168,19 @@ module OpenTox
@model.add me, DC['source'], source
end
- def identifier
- me = @model.subject(RDF['type'],OT[self.owl_class])
- @model.object(me, DC['identifier']).to_s unless me.nil?
- end
-
- def owl_class
- self.class.to_s.sub(/^OpenTox::/,'').sub(/::.*$/,'')
- end
-
- def read(uri)
- @parser.parse_into_model(@model,uri)
- @uri = uri
- end
-
- def rdf=(rdf)
- @uri = '/' unless @uri
- @parser.parse_string_into_model(@model,rdf,@uri)
- end
-
- def rdf
- @model.to_string
- end
-
- def to_ntriples
- @serializer.model_to_string(Redland::Uri.new(@uri), @model)
+ def title
+ # I have no idea, why 2 subjects are returned
+ # iterating over all subjects leads to memory allocation problems
+ # SPARQL queries also do not work
+ #me = @model.subjects(RDF['type'],OT[@ot_class])[1]
+ me = @model.subject(RDF['type'],OT[@ot_class])
+ @model.object(me, DC['title']).to_s
end
- def parameters=(params)
- params.each do |name, settings|
- parameter = @model.create_resource
- @model.add parameter, RDF['type'], OT['Parameter']
- @model.add parameter, DC['title'], name
- @model.add parameter, OT['paramScope'], settings[:scope]
- @model.add parameter, OT['paramValue'], settings[:value]
- end
+ def source
+ me = @model.subject(RDF['type'],OT[@ot_class])
+ @model.object(me, DC['source']).to_s unless me.nil?
end
-
-=begin
def create_owl_statement(name,value)
r = @model.create_resource
dc_class = DC[name.gsub(/^[a-z]/) { |a| a.upcase }] # capitalize only the first letter