diff options
author | mguetlein <martin.guetlein@gmail.com> | 2011-02-11 10:51:01 +0100 |
---|---|---|
committer | mguetlein <martin.guetlein@gmail.com> | 2011-02-11 10:51:01 +0100 |
commit | 3c7e4de0e3f4c9bbf8df55c88f155b40f575b3ab (patch) | |
tree | 25aef35bb00130205c698976fca498e7bfe623b5 /lib | |
parent | 1e2d28baa88f3a021604787c1356d6be1077be7e (diff) |
fix read from rdf file
Diffstat (limited to 'lib')
-rw-r--r-- | lib/dataset.rb | 7 | ||||
-rw-r--r-- | lib/parser.rb | 39 |
2 files changed, 28 insertions, 18 deletions
diff --git a/lib/dataset.rb b/lib/dataset.rb index 02b89cb..a843cea 100644 --- a/lib/dataset.rb +++ b/lib/dataset.rb @@ -85,7 +85,12 @@ module OpenTox end def load_rdfxml(rdfxml) - load_rdfxml_file Tempfile.open("ot-rdfxml"){|f| f.write(rdfxml)}.path + raise "rdfxml data is empty" if rdfxml.to_s.size==0 + file = Tempfile.new("ot-rdfxml") + file.puts rdfxml + file.close + load_rdfxml_file file + file.delete end # Load RDF/XML representation from a file diff --git a/lib/parser.rb b/lib/parser.rb index c8a573f..f79b5e2 100644 --- a/lib/parser.rb +++ b/lib/parser.rb @@ -30,28 +30,29 @@ module OpenTox # Read metadata from opentox service # @return [Hash] Object metadata def load_metadata(subjectid=nil) - if @dataset - uri = File.join(@uri,"metadata") - else - uri = @uri - end # avoid using rapper directly because of 2 reasons: # * http errors wont be noticed # * subjectid cannot be sent as header ##uri += "?subjectid=#{CGI.escape(subjectid)}" if subjectid ## `rapper -i rdfxml -o ntriples #{uri} 2>/dev/null`.each_line do |line| - file = Tempfile.new("ot-rdfxml") - file.puts OpenTox::RestClientWrapper.get @uri,{:subjectid => subjectid,:accept => "application/rdf+xml"},nil,false - file.close + if File.exist?(@uri) + file = File.new(@uri) + else + file = Tempfile.new("ot-rdfxml") + uri = @dataset ? File.join(@uri,"metadata") : @uri + file.puts OpenTox::RestClientWrapper.get uri,{:subjectid => subjectid,:accept => "application/rdf+xml"},nil,false + file.close + to_delete = file.path + end statements = [] parameter_ids = [] - `rapper -i rdfxml -o ntriples file://#{file.path} 2>/dev/null`.each_line do |line| + `rapper -i rdfxml -o ntriples #{file.path} 2>/dev/null`.each_line do |line| triple = line.to_triple @metadata[triple[1]] = triple[2].split('^^').first if triple[0] == @uri and triple[1] != RDF['type'] statements << triple parameter_ids << triple[2] if triple[1] == OT.parameters end - File.delete(file.path) + File.delete(to_delete) if to_delete unless parameter_ids.empty? @metadata[OT.parameters] = [] parameter_ids.each do |p| @@ -73,7 +74,7 @@ module OpenTox file.puts rdf file.close #puts "cmd: rapper -i rdfxml -o ntriples #{file} 2>/dev/null" - triples = `rapper -i rdfxml -o ntriples file://#{file.path} 2>/dev/null` + triples = `rapper -i rdfxml -o ntriples #{file.path} 2>/dev/null` # load uri via type uri = nil @@ -130,22 +131,26 @@ module OpenTox # dataset.save # @return [Hash] Internal dataset representation def load_uri(subjectid=nil) - uri = @uri # avoid using rapper directly because of 2 reasons: # * http errors wont be noticed # * subjectid cannot be sent as header ##uri += "?subjectid=#{CGI.escape(subjectid)}" if subjectid ##`rapper -i rdfxml -o ntriples #{file} 2>/dev/null`.each_line do |line| - file = Tempfile.new("ot-rdfxml") - file.puts OpenTox::RestClientWrapper.get @uri,{:subjectid => subjectid,:accept => "application/rdf+xml"},nil,false - file.close + if File.exist?(@uri) + file = File.new(@uri) + else + file = Tempfile.new("ot-rdfxml") + file.puts OpenTox::RestClientWrapper.get @uri,{:subjectid => subjectid,:accept => "application/rdf+xml"},nil,false + file.close + to_delete = file.path + end data = {} feature_values = {} feature = {} other_statements = {} - `rapper -i rdfxml -o ntriples file://#{file.path} 2>/dev/null`.each_line do |line| + `rapper -i rdfxml -o ntriples #{file.path} 2>/dev/null`.each_line do |line| triple = line.chomp.split(' ',3) triple = triple[0..2].collect{|i| i.sub(/\s+.$/,'').gsub(/[<>"]/,'')} case triple[1] @@ -162,7 +167,7 @@ module OpenTox else end end - File.delete(file.path) + File.delete(to_delete) if to_delete data.each do |id,entry| entry[:values].each do |value_id| split = feature_values[value_id].split(/\^\^/) |