Sha256: eaa34eb0ca91a06b383057aaf650637fe99997265afc463643bb2464ff01ce79

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 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
    
    $activerdflog.debug "Query2SPARQL: translated the query to #{str}"
    return str
  end

  private
  # 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 |triple|
			triple.collect {|term| construct_clause(term)}.join(' ')
		end
    "#{where_clauses.join('. ')} ."
  end

	def self.construct_clause(term)
		case term
		when Symbol
			'?' + term.to_s
		when RDFS::Resource
			'<' + term.uri + '>'
		else
			term.to_s
		end
	end
	
  #declare the class level methods as private with these directives
  private_class_method :where_clauses
  private_class_method :construct_clause
	
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
activerdf-1.1 lib/active_rdf/queryengine/query2sparql.rb