summaryrefslogtreecommitdiff
path: root/lib/parser.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/parser.rb')
-rw-r--r--lib/parser.rb41
1 files changed, 27 insertions, 14 deletions
diff --git a/lib/parser.rb b/lib/parser.rb
index 27dfeee..2f59d15 100644
--- a/lib/parser.rb
+++ b/lib/parser.rb
@@ -41,17 +41,17 @@ module OpenTox
##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"}
+ file.puts OpenTox::RestClientWrapper.get @uri,{:subjectid => subjectid,:accept => "application/rdf+xml"},nil,false
file.close
- file = "file://"+file.path
statements = []
parameter_ids = []
- `rapper -i rdfxml -o ntriples #{file} 2>/dev/null`.each_line do |line|
+ `rapper -i rdfxml -o ntriples file://#{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)
unless parameter_ids.empty?
@metadata[OT.parameters] = []
parameter_ids.each do |p|
@@ -63,18 +63,17 @@ module OpenTox
@metadata
end
- # loads metadata from rdf-data
+ # creates owl object from rdf-data
# @param [String] rdf
# @param [String] type of the info (e.g. OT.Task, OT.ErrorReport) needed to get the subject-uri
- # @return [Hash] metadata
- def self.metadata_from_rdf( rdf, type )
+ # @return [Owl] with uri and metadata set
+ def self.from_rdf( rdf, type )
# write to file and read convert with rapper into tripples
file = Tempfile.new("ot-rdfxml")
file.puts rdf
file.close
- file = "file://"+file.path
#puts "cmd: rapper -i rdfxml -o ntriples #{file} 2>/dev/null"
- triples = `rapper -i rdfxml -o ntriples #{file} 2>/dev/null`
+ triples = `rapper -i rdfxml -o ntriples file://#{file.path} 2>/dev/null`
# load uri via type
uri = nil
@@ -85,19 +84,23 @@ module OpenTox
uri = triple[0]
end
end
-
+ File.delete(file)
# load metadata
metadata = {}
triples.each_line do |line|
triple = line.to_triple
metadata[triple[1]] = triple[2].split('^^').first if triple[0] == uri and triple[1] != RDF['type']
end
- metadata
+ owl = Owl::Generic.new(uri)
+ owl.metadata = metadata
+ owl
end
-
+
# Generic parser for all OpenTox classes
class Generic
include Owl
+
+ attr_accessor :uri, :metadata
end
# OWL-DL parser for datasets
@@ -128,12 +131,21 @@ module OpenTox
# @return [Hash] Internal dataset representation
def load_uri(subjectid=nil)
uri = @uri
- uri += "?subjectid=#{CGI.escape(subjectid)}" if subjectid
+
+ # 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
+
data = {}
feature_values = {}
feature = {}
other_statements = {}
- `rapper -i rdfxml -o ntriples #{uri} 2>/dev/null`.each_line do |line|
+ `rapper -i rdfxml -o ntriples file://#{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]
@@ -150,6 +162,7 @@ module OpenTox
else
end
end
+ File.delete(file.path)
data.each do |id,entry|
entry[:values].each do |value_id|
value = feature_values[value_id].split(/\^\^/).first # remove XSD.type
@@ -157,7 +170,7 @@ module OpenTox
end
end
load_features
- @dataset.metadata = load_metadata
+ @dataset.metadata = load_metadata(subjectid)
@dataset
end