summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormguetlein <martin.guetlein@gmail.com>2011-02-11 10:51:01 +0100
committermguetlein <martin.guetlein@gmail.com>2011-02-11 10:51:01 +0100
commit3c7e4de0e3f4c9bbf8df55c88f155b40f575b3ab (patch)
tree25aef35bb00130205c698976fca498e7bfe623b5 /lib
parent1e2d28baa88f3a021604787c1356d6be1077be7e (diff)
fix read from rdf file
Diffstat (limited to 'lib')
-rw-r--r--lib/dataset.rb7
-rw-r--r--lib/parser.rb39
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(/\^\^/)