Sha256: aa4bb48dcb9aa6cbf1385fd5bb3deca685892187e8e47b1171496c44bd44f745

Contents?: true

Size: 1.26 KB

Versions: 7

Compression:

Stored size: 1.26 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 |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)
		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

7 entries across 7 versions & 1 rubygems

Version Path
activerdf-1.2.3 lib/active_rdf/queryengine/query2sparql.rb
activerdf-1.2.1 lib/active_rdf/queryengine/query2sparql.rb
activerdf-1.2.2 lib/active_rdf/queryengine/query2sparql.rb
activerdf-1.2 lib/active_rdf/queryengine/query2sparql.rb
activerdf-1.3.1 lib/active_rdf/queryengine/query2sparql.rb
activerdf-1.4 lib/active_rdf/queryengine/query2sparql.rb
activerdf-1.3 lib/active_rdf/queryengine/query2sparql.rb