diff options
author | mr <mr@mrautenberg.de> | 2010-02-01 14:50:10 +0100 |
---|---|---|
committer | mr <mr@mrautenberg.de> | 2010-02-01 14:50:10 +0100 |
commit | e0b1279e10451294662bdd19b11568c39128bdc3 (patch) | |
tree | 96ca071bdb64cf338a9b23eb962497093be5d7c7 /lib/dataset.rb | |
parent | 492f73257e6c87d84e4b25c49e4a392859d59b1c (diff) | |
parent | 3925785d70b541345bdbbbad7a8fce18eeaa01db (diff) |
delete lib/templates/config.ru
Diffstat (limited to 'lib/dataset.rb')
-rw-r--r-- | lib/dataset.rb | 71 |
1 files changed, 28 insertions, 43 deletions
diff --git a/lib/dataset.rb b/lib/dataset.rb index 1aa3469..09616f8 100644 --- a/lib/dataset.rb +++ b/lib/dataset.rb @@ -86,14 +86,11 @@ module OpenTox end def self.find(uri) - begin - dataset = Dataset.new - data = RestClient.get uri, :accept => 'application/rdf+xml' # check if the resource is available - dataset.rdf = data - dataset - rescue - nil - end + dataset = Dataset.new + data = `curl "#{uri}"` + #data = RestClient.get uri, :accept => 'application/rdf+xml' # unclear why this does not work for complex uris, Dataset.find works from irb + dataset.rdf = data + dataset end def features @@ -108,57 +105,44 @@ module OpenTox data = {} @model.subjects(RDF['type'], OT['DataEntry']).each do |data_entry| compound_node = @model.object(data_entry, OT['compound']) - @model.find(compound_node, OT['identifier'],nil) {|s,p,o| puts o.to_s} compound_uri = @model.object(compound_node, DC['identifier']).to_s - data[compound_uri] = [] unless data[compound_uri] @model.find(data_entry, OT['values'], nil) do |s,p,values| - entry = {} feature_node = @model.object values, OT['feature'] - feature_uri = @model.object(feature_node, DC['identifier']).to_s - # TODO simple features + feature_uri = @model.object(feature_node, DC['identifier']).to_s.sub(/\^\^.*$/,'') # remove XML datatype type = @model.object(values, RDF['type']) if type == OT['FeatureValue'] - #entry[feature_uri] = [] unless entry[feature_uri] - entry[feature_uri] = @model.object(values, OT['value']).to_s + value = @model.object(values, OT['value']).to_s + case value.to_s + when TRUE_REGEXP # defined in environment.rb + value = true + when FALSE_REGEXP # defined in environment.rb + value = false + else + LOGGER.warn compound_uri + " has value '" + value.to_s + "' for feature " + feature_uri + value = nil + end + data[compound_uri] = {} unless data[compound_uri] + data[compound_uri][feature_uri] = [] unless data[compound_uri][feature_uri] + data[compound_uri][feature_uri] << value unless value.nil? elsif type == OT['Tuple'] - entry[feature_uri] = {} unless entry[feature_uri] + entry = {} + data[compound_uri] = {} unless data[compound_uri] + data[compound_uri][feature_uri] = [] unless data[compound_uri][feature_uri] @model.find(values, OT['complexValue'],nil) do |s,p,complex_value| name_node = @model.object complex_value, OT['feature'] name = @model.object(name_node, DC['title']).to_s value = @model.object(complex_value, OT['value']).to_s - entry[feature_uri][name] = value + v = value.sub(/\^\^.*$/,'') # remove XML datatype + v = v.to_f if v.match(/^[\.|\d]+$/) # guess numeric datatype + entry[name] = v end + data[compound_uri][feature_uri] << entry end - data[compound_uri] << entry end end data end - def feature_values(feature_uri) - features = {} - 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] - data_entry = @model.subject(OT['compound'], compound_node) - @model.find( data_entry, OT['values'], nil ) do |s,p,values| - if feature == @model.object(values, OT['feature']) - value = @model.object(values, OT['value']) - case value.to_s - when "true" - features[compound] << true - when "false" - features[compound] << false - else - features[compound] << value.to_s - end - end - end - end - features - end - def compounds compounds = [] @model.subjects(RDF['type'], OT["Compound"]).each do |compound_node| @@ -185,7 +169,8 @@ module OpenTox :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 } + :features => self.features.collect{|f| f.to_s }, + :data => self.data }.to_yaml end |