Sha256: 607330037d1b7b631d6ec58799a81f4eca79c48b3947ec6f61d7f3888f74b26e

Contents?: true

Size: 1.15 KB

Versions: 3

Compression:

Stored size: 1.15 KB

Contents

require 'active_rdf'

# Translates abstract query into SPARQL that can be executed on SPARQL-compliant
# data source.
class Query2SPARQL
  def self.translate(query)
    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)} }"
    elsif query.ask?
      str << "ASK { #{where_clauses(query)} }"
    end
    
    return str
  end

  # concatenate each where clause using space (e.g. 's p o')
  # and concatenate the clauses using dot, e.g. 's p o . s2 p2 o2 .'
  def self.where_clauses(query)
		where_clauses = query.where_clauses.collect do |s,p,o,c|
			# ignore context parameter
			[s,p,o].collect {|term| construct_clause(term) }.join(' ')
		end
    "#{where_clauses.join('. ')} ."
  end

	def self.construct_clause(term)
    if term.respond_to? :uri
      '<' + term.uri + '>'
    else
      case term
      when Symbol
        '?' + term.to_s
      else
        term.to_s
      end
    end
	end
	
  private_class_method :where_clauses, :construct_clause
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
activerdf-1.5 lib/active_rdf/queryengine/query2sparql.rb
activerdf-1.6.1 lib/active_rdf/queryengine/query2sparql.rb
activerdf-1.6 lib/active_rdf/queryengine/query2sparql.rb