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