diff options
author | Christoph Helma <helma@in-silico.de> | 2009-12-17 13:58:03 +0100 |
---|---|---|
committer | Christoph Helma <helma@in-silico.de> | 2009-12-17 13:58:03 +0100 |
commit | a5789305534c2a622a658e7ef14b016a1bac4bd6 (patch) | |
tree | 76ff10ff5efc9fa278312fbdf7cabfb0dd55a345 /lib | |
parent | 887a921e25c3d7778e9e5ce998f52fde41d517f8 (diff) |
YAML output for datasets added
Diffstat (limited to 'lib')
-rw-r--r-- | lib/dataset.rb | 72 | ||||
-rw-r--r-- | lib/owl.rb | 60 |
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 @@ -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) |