Class: Query2SPARQL

Inherits:
Object
  • Object
show all
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

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