summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Helma <helma@in-silico.ch>2013-06-10 12:48:29 +0200
committerChristoph Helma <helma@in-silico.ch>2013-06-10 12:48:29 +0200
commitec62c3de8d49f2b80d22fd0e6edfffecebaf0d2d (patch)
treeefa5282b14c406b0e2edefb6671d4540d5f8ac10
parent818d8cfcae1e6136dacb232c5678d2b0de29af66 (diff)
parentd8359c77fffda757f7c7fce525ad576ea97f5695 (diff)
Merge branch 'development' of github.com:opentox/opentox-server into development
Conflicts: lib/4store.rb
-rw-r--r--lib/4store.rb40
1 files changed, 22 insertions, 18 deletions
diff --git a/lib/4store.rb b/lib/4store.rb
index 2e2444b..bb8abc8 100644
--- a/lib/4store.rb
+++ b/lib/4store.rb
@@ -10,6 +10,7 @@ module OpenTox
if mime_type =~ /(uri-list|html)/
sparql = "SELECT DISTINCT ?g WHERE {GRAPH ?g {?g ?p ?o} }"
=begin
+ sparql = "SELECT DISTINCT ?g WHERE {GRAPH ?g {?s <#{RDF.type}> <#{klass}>; <#{RDF::DC.date}> ?o.} } ORDER BY ?o"
#sparql = "SELECT DISTINCT ?g WHERE {GRAPH ?g {?s <#{RDF.type}> <#{klass}>; <#{RDF::DC.modified}> ?o.} } ORDER BY ?o"
# not working for multiple DC.modified
sparql = "SELECT DISTINCT ?g WHERE {
@@ -54,14 +55,8 @@ module OpenTox
bad_request_error "'#{mime_type}' is not a supported content type. Please use one of #{@@content_type_formats.join(", ")}." unless @@content_type_formats.include? mime_type
bad_request_error "Reqest body empty." unless rdf
mime_type = "application/x-turtle" if mime_type == "text/plain"
- RestClientWrapper.put File.join(four_store_uri,"data",uri), rdf, :content_type => mime_type
-# update moved to opentox-client to improve performance
+ RestClientWrapper.put File.join(four_store_uri,"data",uri), rdf, :content_type => mime_type
update "INSERT DATA { GRAPH <#{uri}> { <#{uri}> <#{RDF::DC.modified}> \"#{DateTime.now}\" } }"
-# RestClientWrapper.put File.join(four_store_uri,"data",uri), rdf, :content_type => mime_type
-# update "WITH <#{uri}>
-# DELETE {<#{uri}> <{RDF::DC.modified}> ?o}
-# WHERE {<#{uri}> <{RDF::DC.modified}> ?o};
-# INSERT DATA { GRAPH <#{uri}> { <#{uri}> <#{RDF::DC.modified}> \"#{DateTime.now}\" } }"
end
def self.delete uri
@@ -102,24 +97,33 @@ module OpenTox
case mime_type
when "text/plain", "application/rdf+xml"
RestClient.get(sparql_uri, :params => { :query => sparql }, :accept => mime_type).body
- when /html|turtle/
- nt = RestClient.get(sparql_uri, :params => { :query => sparql }, :accept => "text/plain").body # 4store returns ntriples for turtle
- rdf = RDF::Graph.new
- RDF::Reader.for(:ntriples).new(nt) do |reader|
- reader.each_statement { |statement| rdf << statement }
- end
- if !rdf.empty?
+ when /turtle/
+ nt = RestClient.get(sparql_uri, :params => { :query => sparql }, :accept => "text/tab-separated-values").body # 4store returns ntriples for turtle
+ if !nt.empty?
+ rdf = RDF::Graph.new
+ RDF::Reader.for(:ntriples).new(nt) do |reader|
+ reader.each_statement { |statement| rdf << statement }
+ end
prefixes = {:rdf => "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"}
['OT', 'DC', 'XSD', 'OLO'].each{|p| prefixes[p.downcase.to_sym] = eval("RDF::#{p}.to_s") }
# TODO: fails for large datasets?? multi_cell_call
- turtle = RDF::Writer.for(:turtle).buffer(:prefixes => prefixes) do |writer|
+ turtle = RDF::Turtle::Writer.for(:turtle).buffer(:prefixes => prefixes) do |writer|
writer << rdf
end
+ else
+ nt
+ end
+ when /html/
+ # modified ntriples output, delivers large datasets
+ #TODO optimize representation
+ nt = RestClient.get(sparql_uri, :params => { :query => sparql }, :accept => "text/plain").body
+ if !nt.empty?
regex = Regexp.new '(https?:\/\/[\S]+)([>"])'
- turtle = "<html><body>" + turtle.gsub( regex, '<a href="\1">\1</a>\2' ).gsub(/\n/,'<br/>') + "</body></html>" if mime_type =~ /html/ and !turtle.empty?
- turtle
+ bnode = Regexp.new '_:[a-z0-9]*'
+ html = "<html><body>" + nt.gsub(regex, '<a href="\1">\1</a>\2').gsub(/\n/,'<br/>').gsub(bnode, '<>') + "</body></html>"
+ html
else
- rdf
+ nt
end
end
else