summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Helma <helma@in-silico.ch>2011-07-28 17:37:23 +0000
committerChristoph Helma <helma@in-silico.ch>2011-07-28 17:37:23 +0000
commita3f519bd945bcb2fce5bf587966ff746a03f0db9 (patch)
tree569a0025f7727437f90724221dbd9f2eac0ad023
parent8e55e3c5fea5e8bc39b18716f3e0c6a01e2f581f (diff)
parentc1666e8ffc49f013074fcec3f87629a3a9ed9797 (diff)
Merge branch 'development' of github.com:opentox/opentox-ruby into development
-rw-r--r--lib/model.rb35
-rw-r--r--lib/parser.rb31
2 files changed, 44 insertions, 22 deletions
diff --git a/lib/model.rb b/lib/model.rb
index 1ff9df1..f1a8dc9 100644
--- a/lib/model.rb
+++ b/lib/model.rb
@@ -50,38 +50,49 @@ module OpenTox
@predicted_variable
end
+ def predicted_variables( subjectid )
+ load_predicted_variables( subjectid, false ) unless @predicted_variables
+ @predicted_variables
+ end
+
def predicted_confidence( subjectid )
load_predicted_variables( subjectid ) unless @predicted_confidence
@predicted_confidence
end
private
- def load_predicted_variables( subjectid=nil )
+ def load_predicted_variables( subjectid=nil, use_confidence=true )
load_metadata(subjectid) if @metadata==nil or @metadata.size==0 or (@metadata.size==1 && @metadata.values[0]==@uri)
if @metadata[OT.predictedVariables]
predictedVariables = @metadata[OT.predictedVariables]
if predictedVariables.is_a?(Array)
if (predictedVariables.size==1)
@predicted_variable = predictedVariables[0]
- elsif (predictedVariables.size==2)
+ elsif (predictedVariables.size>=2)
# PENDING identify confidence
- conf_index = -1
- predictedVariables.size.times do |i|
- f = OpenTox::Feature.find(predictedVariables[i])
- conf_index = i if f.metadata[DC.title]=~/(?i)confidence/
+ if use_confidence
+ conf_index = -1
+ predictedVariables.size.times do |i|
+ f = OpenTox::Feature.find(predictedVariables[i])
+ conf_index = i if f.metadata[DC.title]=~/(?i)confidence/
+ end
+ raise "could not estimate predicted variable from model: '"+uri.to_s+
+ "', number of predicted-variables==2, but no confidence found" if conf_index==-1
+ end
+ if (predictedVariables.size==2) && use_confidence
+ @predicted_variable = predictedVariables[1-conf_index]
+ @predicted_confidence = predictedVariables[conf_index]
+ else
+ @predicted_variables = predictedVariables
end
- raise "could not estimate predicted variable from model: '"+uri.to_s+
- "', number of predicted-variables==2, but no confidence found" if conf_index==-1
- @predicted_variable = predictedVariables[1-conf_index]
- @predicted_confidence = predictedVariables[conf_index]
else
- raise "could not estimate predicted variable from model: '"+uri.to_s+"', number of predicted-variables > 2"
+ raise "could not estimate predicted variable from model: '"+uri.to_s+"', number of predicted-variables == 0"
end
else
raise "could not estimate predicted variable from model: '"+uri.to_s+"', predicted-variables is no array"
end
end
- raise "could not estimate predicted variable from model: '"+uri.to_s+"'" unless @predicted_variable
+ raise "could not estimate predicted variable from model: '"+uri.to_s+"'" unless (@predicted_variable || @predicted_variables)
end
end
diff --git a/lib/parser.rb b/lib/parser.rb
index 8fa5847..4ee4a22 100644
--- a/lib/parser.rb
+++ b/lib/parser.rb
@@ -86,7 +86,11 @@ module OpenTox
# @param [String] rdf
# @param [String] type of the info (e.g. OT.Task, OT.ErrorReport) needed to get the subject-uri
# @return [Owl] with uri and metadata set
- def self.from_rdf( rdf, type )
+ def self.from_rdf( rdf, type, allow_multiple = false )
+
+ uris = Array.new
+ owls = Array.new
+
# write to file and read convert with rapper into tripples
file = Tempfile.new("ot-rdfxml")
file.puts rdf
@@ -99,20 +103,27 @@ module OpenTox
triples.each_line do |line|
triple = line.to_triple
if triple[1] == RDF['type'] and triple[2]==type
- raise "uri already set, two uris found with type: "+type.to_s if uri
+ if !allow_multiple
+ raise "uri already set, two uris found with type: "+type.to_s if uri
+ end
uri = triple[0]
+ uris << uri
end
end
File.delete(file.path)
+
# 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
- owl = Owl::Generic.new(uri)
- owl.metadata = metadata
- owl
+ uris.each { |uri|
+ 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
+ owl = Owl::Generic.new(uri)
+ owl.metadata = metadata
+ owls << owl
+ }
+ allow_multiple ? owls : owls[0]
end
# Generic parser for all OpenTox classes