diff options
author | Christoph Helma <helma@in-silico.ch> | 2013-06-10 12:48:29 +0200 |
---|---|---|
committer | Christoph Helma <helma@in-silico.ch> | 2013-06-10 12:48:29 +0200 |
commit | ec62c3de8d49f2b80d22fd0e6edfffecebaf0d2d (patch) | |
tree | efa5282b14c406b0e2edefb6671d4540d5f8ac10 | |
parent | 818d8cfcae1e6136dacb232c5678d2b0de29af66 (diff) | |
parent | d8359c77fffda757f7c7fce525ad576ea97f5695 (diff) |
Merge branch 'development' of github.com:opentox/opentox-server into development
Conflicts:
lib/4store.rb
-rw-r--r-- | lib/4store.rb | 40 |
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 |