Class: Query2SPARQL
- Inherits:
-
Object
- Object
- Query2SPARQL
- Defined in:
- lib/active_rdf/queryengine/query2sparql.rb
Overview
Translates abstract query into SPARQL that can be executed on SPARQL-compliant data source.
Constant Summary collapse
- Engines_With_Keyword =
[:yars2, :virtuoso]
Class Method Summary collapse
-
.filter_clauses(query) ⇒ Object
concatenate filters in query.
-
.from_clauses(query) ⇒ Object
concatenate each from clause using space.
- .reverse_sort_clauses(query) ⇒ Object
- .sort_clauses(query) ⇒ Object
- .translate(query, engine = nil) ⇒ Object
Class Method Details
.filter_clauses(query) ⇒ Object
concatenate filters in query
48 49 50 |
# File 'lib/active_rdf/queryengine/query2sparql.rb', line 48 def self.filter_clauses(query) "FILTER (#{query.filter_clauses.join(" && ")})" unless query.filter_clauses.empty? end |
.from_clauses(query) ⇒ Object
concatenate each from clause using space
32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/active_rdf/queryengine/query2sparql.rb', line 32 def self.from_clauses(query) params = [] # construct single context clauses if context is present query.where_clauses.each {|s,p,o,c| params << "FROM #{construct_clause(c)}" unless c.nil? } # return FROM sintax or "" if no context is speficied if (params.empty?) "" else "#{params.join(' ')} " end end |
.reverse_sort_clauses(query) ⇒ Object
60 61 62 63 64 65 66 |
# File 'lib/active_rdf/queryengine/query2sparql.rb', line 60 def self.reverse_sort_clauses(query) reverse_sort_clauses = query.reverse_sort_clauses.collect do |term| "DESC(#{construct_clause(term)})" end "#{reverse_sort_clauses.join(' ')}" end |
.sort_clauses(query) ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/active_rdf/queryengine/query2sparql.rb', line 52 def self.sort_clauses(query) sort_clauses = query.sort_clauses.collect do |term| "ASC(#{construct_clause(term)})" end sort_clauses.join(' ') end |
.translate(query, engine = nil) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/active_rdf/queryengine/query2sparql.rb', line 9 def self.translate(query, engine=nil) str = "" if query.select? distinct = query.distinct? ? "DISTINCT " : "" select_clauses = query.select_clauses.collect{|s| construct_clause(s)} str << "SELECT #{distinct}#{select_clauses.join(' ')} " str << "WHERE { #{where_clauses(query)} #{filter_clauses(query)}} " str << "LIMIT #{query.limits} " if query.limits str << "OFFSET #{query.offsets} " if query.offsets if (!query.sort_clauses.empty? || !query.reverse_sort_clauses.empty?) str << "ORDER BY " str << "#{sort_clauses(query)} " if !query.sort_clauses.empty? str << "#{reverse_sort_clauses(query)} " if !query.reverse_sort_clauses.empty? end elsif query.ask? str << "ASK { #{where_clauses(query)} } " end return str end |