summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChristoph Helma <helma@in-silico.de>2009-12-17 13:58:03 +0100
committerChristoph Helma <helma@in-silico.de>2009-12-17 13:58:03 +0100
commita5789305534c2a622a658e7ef14b016a1bac4bd6 (patch)
tree76ff10ff5efc9fa278312fbdf7cabfb0dd55a345 /lib
parent887a921e25c3d7778e9e5ce998f52fde41d517f8 (diff)
YAML output for datasets added
Diffstat (limited to 'lib')
-rw-r--r--lib/dataset.rb72
-rw-r--r--lib/owl.rb60
2 files changed, 86 insertions, 46 deletions
diff --git a/lib/dataset.rb b/lib/dataset.rb
index fad6baa..895c9fc 100644
--- a/lib/dataset.rb
+++ b/lib/dataset.rb
@@ -3,8 +3,6 @@ module OpenTox
class Dataset
include Owl
- #attr_accessor :model
-
def initialize
super
end
@@ -28,7 +26,7 @@ module OpenTox
@model.add feature, RDF['type'], OT["Feature"]
@model.add feature, DC["identifier"], File.join("feature",feature.to_s.gsub(/[()]/,'')) # relative uri as we don know the final uri
@model.add feature, DC["title"], f[:name].to_s
- @model.add feature, OT['hasSource'], f[:source].to_s if f[:source]
+ @model.add feature, DC['source'], f[:source].to_s if f[:source]
end
feature
end
@@ -66,9 +64,12 @@ module OpenTox
feature = self.find_or_create_feature(:name => name)
value = self.find_or_create_value(value)
pair = @model.create_resource
- @model.add tuple, OT['tuple'], pair
+ @model.add pair, RDF['type'], OT['FeatureValue']
+ @model.add tuple, OT['complexValue'], pair
@model.add pair, OT['feature'], feature
- @model.add pair, OT['value'], value
+ @model.add pair, OT['value'], value #FIX
+ #@model.add tuple, OT['feature'], feature
+ #@model.add tuple, OT['values'], value
end
tuple
end
@@ -98,7 +99,7 @@ module OpenTox
def self.find(uri)
begin
- RestClient.get uri # check if the resource is available
+ RestClient.get uri, :accept => 'application/rdf+xml' # check if the resource is available
dataset = Dataset.new
dataset.read uri.to_s
dataset
@@ -108,11 +109,42 @@ module OpenTox
end
def features
+ features = []
+ @model.subjects(RDF['type'], OT["Feature"]).each do |feature_node|
+ features << @model.object(feature_node, DC["identifier"])#
+ end
+ features
end
- def feature_values(uri)
+ def data_entries
+ data_entries = {}
+ self.compounds.each do |compound|
+ compound_node = @model.subject(DC["identifier"],compound)
+ compound = compound.to_s.sub(/^\[(.*)\]$/,'\1')
+ data_entries[compound] = {} unless data_entries[compound]
+ @model.subjects(OT['compound'], compound_node).each do |data_entry|
+ feature_node = @model.object(data_entry, OT['feature'])
+ feature = @model.object(feature_node,DC['identifier']).to_s
+ values_node = @model.object(data_entry, OT['values'])
+ data_entries[compound][feature] = [] unless data_entries[compound][feature]
+ @model.find(values_node, OT['value'], nil) do |s,p,value|
+ case value.to_s
+ when "true"
+ data_entries[compound][feature] << true
+ when "false"
+ data_entries[compound][feature] << false
+ else
+ data_entries[compound][feature] << value.to_s
+ end
+ end
+ end
+ end
+ data_entries
+ end
+
+ def feature_values(feature_uri)
features = {}
- feature = @model.subject(DC["identifier"],uri)
+ feature = @model.subject(DC["identifier"],feature_uri)
@model.subjects(RDF['type'], OT["Compound"]).each do |compound_node|
compound = @model.object(compound_node, DC["identifier"]).to_s.sub(/^\[(.*)\]$/,'\1')
features[compound] = [] unless features[compound]
@@ -176,7 +208,7 @@ module OpenTox
def compounds
compounds = []
@model.subjects(RDF['type'], OT["Compound"]).each do |compound_node|
- compounds << @model.object(compound_node, DC["identifier"])#.to_s.sub(/^\[(.*)\]$/,'\1')
+ compounds << @model.object(compound_node, DC["identifier"])#
end
compounds
end
@@ -190,6 +222,28 @@ module OpenTox
RestClient.post(@@config[:services]["opentox-dataset"], self.rdf, :content_type => "application/rdf+xml").to_s
end
+ def to_yaml
+ #compounds.each do |c|
+ #end
+ {
+ :uri => self.uri,
+ :opentox_class => self.owl_class,
+ :title => self.title,
+ :source => self.source,
+ :identifier => self.identifier,
+ :compounds => self.compounds.collect{|c| c.to_s.to_s.sub(/^\[(.*)\]$/,'\1')},
+ :features => self.features.collect{|f| f.to_s },
+ :data_entries => self.data_entries,
+=begin
+ :tuples => self.compounds.collect{|c|
+ compound_uri = c.to_s.to_s.sub(/^\[(.*)\]$/,'\1')
+ {compound_uri => self.tuple(compound_uri)}
+ },
+=end
+ #:feature_values => self.features.collect{|f| { f.to_s => self.feature_values(f.to_s)} }
+ }.to_yaml
+ end
+
end
end
diff --git a/lib/owl.rb b/lib/owl.rb
index 81f2e57..d0d3ee0 100644
--- a/lib/owl.rb
+++ b/lib/owl.rb
@@ -2,7 +2,7 @@ module OpenTox
module Owl
- attr_reader :uri, :model
+ attr_reader :uri#, :model
def initialize
@@ -10,36 +10,10 @@ module OpenTox
@parser = Redland::Parser.new
@serializer = Redland::Serializer.ntriples
- # explicit typing
- # this should come from http://opentox.org/data/documents/development/RDF%20files/OpenToxOntology/at_download/file (does not pass OWL-DL validation)
- @parser.parse_into_model(@model,"http://opentox.org/data/documents/development/RDF%20files/OpenToxOntology/at_download/file")
-=begin
- @model.add @uri, RDF['type'], OWL['Ontology']
- # annotation properties
- @model.add DC['source'], RDF['type'], OWL["AnnotationProperty"]
- @model.add DC['identifier'], RDF['type'], OWL["AnnotationProperty"]
- @model.add DC['title'], RDF['type'], OWL["AnnotationProperty"]
- # object properties
- @model.add OT['feature'], RDF['type'], OWL["ObjectProperty"]
- @model.add OT['compound'], RDF['type'], OWL["ObjectProperty"]
- @model.add OT['values'], RDF['type'], OWL["ObjectProperty"]
- @model.add OT['tuple'], RDF['type'], OWL["ObjectProperty"] # added by ch
- @model.add OT['parameters'], RDF['type'], OWL["ObjectProperty"]
- # datatype properties
- @model.add OT['value'], RDF['type'], OWL["DatatypeProperty"]
- @model.add OT['paramValue'], RDF['type'], OWL["DatatypeProperty"]
- @model.add OT['paramScope'], RDF['type'], OWL["DatatypeProperty"]
- @model.add OT['hasSource'], RDF['type'], OWL["DatatypeProperty"]
- # classes
- @model.add OT['Dataset'], RDF['type'], OWL["Class"]
- @model.add OT['FeatureValue'], RDF['type'], OWL["Class"]
- @model.add OT['Tuple'], RDF['type'], OWL["Class"] # added by ch
- @model.add OT['Feature'], RDF['type'], OWL["Class"]
- @model.add OT['Compound'], RDF['type'], OWL["Class"]
- @model.add OT['DataEntry'], RDF['type'], OWL["Class"]
- @model.add OT['Parameter'], RDF['type'], OWL["Class"]
- @model.add OT['Algorithm'], RDF['type'], OWL["Class"]
-=end
+ # 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")),'/')
+ #@model.add OT['ComplexValue'], RDF['type'], OWL["Class"] # added by ch
end
def owl_class
@@ -62,7 +36,11 @@ module OpenTox
end
def uri=(uri)
- identifier = uri
+ @uri = uri
+ me = @model.subject(RDF['type'],OT[self.owl_class])
+ identifier = @model.object(me, DC['identifier'])
+ @model.delete me, DC['identifier'], identifier
+ @model.add me, DC['identifier'], uri
end
def to_ntriples
@@ -70,8 +48,18 @@ module OpenTox
end
def title
- #puts OT[self.owl_class]
- @model.object(OT[self.owl_class], DC['title']).to_s
+ me = @model.subject(RDF['type'],OT[self.owl_class])
+ @model.object(me, DC['title']).to_s unless me.nil?
+ end
+
+ def source
+ me = @model.subject(RDF['type'],OT[self.owl_class])
+ @model.object(me, DC['source']).to_s unless me.nil?
+ end
+
+ def identifier
+ me = @model.subject(RDF['type'],OT[self.owl_class])
+ @model.object(me, DC['identifier']).to_s unless me.nil?
end
def parameters=(params)
@@ -87,12 +75,10 @@ module OpenTox
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
+ #puts "DC:" + name.gsub(/^[a-z]/) { |a| a.upcase }
@model.add dc_class, RDF['type'], OWL["Class"]
@model.add r, RDF['type'], dc_class
@model.add r, DC[name], value
- #puts r
- #puts DC[name.gsub(/^[a-z]/) { |a| a.upcase }] # capitalize only the first letter
- #puts DC[name] # capitalize only the first letter
end
def method_missing(name, *args)