From 8a2b749ccef94b229a32ec716c93388f5c7495d7 Mon Sep 17 00:00:00 2001 From: Andreas Maunz Date: Wed, 31 Oct 2012 15:35:34 +0100 Subject: Fixed get for dataset from RDF --- lib/dataset.rb | 12 ++++++++---- lib/opentox.rb | 4 ++-- lib/utils/rdf/dataset.rb | 14 +++++++++++++- 3 files changed, 23 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/dataset.rb b/lib/dataset.rb index 4351dc5..288e4d3 100644 --- a/lib/dataset.rb +++ b/lib/dataset.rb @@ -29,17 +29,21 @@ module OpenTox def get(force_no_backend_query=false) have_rdf = (force_no_backend_query and @rdf.size>0) - super() unless have_rdf ordered = (have_rdf or OpenTox::Dataset.ordered?(@uri)) + super() if (!have_rdf and !ordered) @features = [] @compounds = [] @data_entries = [] # AM: read ordered dataset from RDF if ordered - @uri = s[0].uri.to_s if have_rdf # AM: must rewrite URI - @compounds = find_compounds_rdf - @features = find_features_rdf + # Read only some data as rdf + unless have_rdf + self.parse_rdfxml( RestClient.get([@uri,"allnde"].join("/"),{:accept => "application/rdf+xml"}), true ) + end + @compounds = self.find_compounds_rdf + @features = self.find_features_rdf + numeric_features = @features.collect{|f| f.get f[RDF.type].include?(RDF::OT.NumericFeature) or f[RDF.type].include?(RDF::OT.Substructure) diff --git a/lib/opentox.rb b/lib/opentox.rb index faa7b58..0f29c30 100644 --- a/lib/opentox.rb +++ b/lib/opentox.rb @@ -130,8 +130,8 @@ module OpenTox RDF_FORMATS.each do |format| # rdf parse methods for all formats e.g. parse_rdfxml - send :define_method, "parse_#{format}".to_sym do |rdf| - @rdf = RDF::Graph.new + send :define_method, "parse_#{format}".to_sym do |rdf,init=true| + @rdf = RDF::Graph.new if init RDF::Reader.for(format).new(rdf) do |reader| reader.each_statement{ |statement| @rdf << statement } end diff --git a/lib/utils/rdf/dataset.rb b/lib/utils/rdf/dataset.rb index e101b67..2cb32a9 100644 --- a/lib/utils/rdf/dataset.rb +++ b/lib/utils/rdf/dataset.rb @@ -47,7 +47,7 @@ module OpenTox # Query a dataset URI for ordered status # by loading its metadata (OpenTox compliant) # @param [String] uri Dataset uri - # @return [TrueClass,FalseClass] status Whether the dataset is ordered + # @return [TrueClass, FalseClass] status Whether the dataset is ordered def self.ordered?(uri) ds = OpenTox::Dataset.new # dummy ds.parse_rdfxml(RestClient.get([uri,"metadata"].join("/"),{:accept => "application/rdf+xml"})) @@ -57,5 +57,17 @@ module OpenTox query.execute(ds.rdf).size>0 end + # Load dataset URI from given RDF (slow) + # @param [String] rdf RDF + # @return [String] uri URI + def self.uri_from_rdf(rdf) + ds = OpenTox::Dataset.new # dummy + ds.parse_rdfxml(rdf) + query = RDF::Query.new do + pattern [:dataset, RDF.type, RDF::OT.Dataset] + end + query.execute(ds.rdf).collect { |s| s.dataset.to_s }[0] + end + end end -- cgit v1.2.3