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 |