Changeset 440

Show
Ignore:
Timestamp:
05/28/09 15:40:27 (9 years ago)
Author:
samuraraujo
Message:
 
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • Explorator/trunk/lib/query_builder.rb

    r432 r440  
    123123      q.distinct(:p)      if p.instance_of? Symbol 
    124124      q.distinct(:x,:y) 
    125       q.distinct(:label,:type) if Thread.current[:query_retrieve_label_and_type] 
     125      q.distinct(:label_s,:type_s ) if Thread.current[:query_retrieve_label_and_type] 
    126126      q.where(to_resource(s,:s),to_resource(p,:p),to_resource(o,:o)).where(to_resource(p,:p),:x,:y) 
    127       q.optional(to_resource(p,:p),RDFS::label,:label).optional(to_resource(p,:p),RDF::type,:type) if Thread.current[:query_retrieve_label_and_type] 
     127      q.optional(to_resource(p,:p),RDFS::label,:label_s).optional(to_resource(p,:p),RDF::type,:type_s) if Thread.current[:query_retrieve_label_and_type] 
     128   #   q.optional(to_resource(x,:x),RDFS::label,:label_p).optional(to_resource(x,:x),RDF::type,:type_p) if Thread.current[:query_retrieve_label_and_type] 
     129#      q.optional(to_resource(y,:y),RDFS::label,:label_o).optional(to_resource(y,:y),RDF::type,:type_o) if Thread.current[:query_retrieve_label_and_type]       
    128130    elsif r.to_s == :o.to_s       
    129131      variables << :o if o.instance_of? Symbol 
     
    132134      q.distinct(:o) if o.instance_of? Symbol 
    133135      q.distinct(:x,:y) 
    134       q.distinct(:label,:type) if Thread.current[:query_retrieve_label_and_type] 
     136      q.distinct(:label_s,:type_s  )if Thread.current[:query_retrieve_label_and_type] 
    135137      q.where(to_resource(s,:s),to_resource(p,:p),to_resource(o,:o)).where(to_resource(o,:o),:x,:y) 
    136       q.optional(to_resource(o,:o),RDFS::label,:label).optional(to_resource(o,:o),RDF::type,:type) if Thread.current[:query_retrieve_label_and_type] 
     138      q.optional(to_resource(o,:o),RDFS::label,:label_s).optional(to_resource(o,:o),RDF::type,:type_s) if Thread.current[:query_retrieve_label_and_type] 
     139    #  q.optional(to_resource(x,:x),RDFS::label,:label_p).optional(to_resource(x,:x),RDF::type,:type_p) if Thread.current[:query_retrieve_label_and_type] 
     140#      q.optional(to_resource(y,:y),RDFS::label,:label_o).optional(to_resource(y,:y),RDF::type,:type_o) if Thread.current[:query_retrieve_label_and_type]       
    137141    else      
    138142      variables << :s if s.instance_of? Symbol 
     
    146150        q.distinct(:p)  if p.instance_of? Symbol 
    147151        q.distinct(:o)  if o.instance_of? Symbol         
    148         q.distinct(:label,:type) if Thread.current[:query_retrieve_label_and_type] 
     152        q.distinct(:label_s,:type_s  ) if Thread.current[:query_retrieve_label_and_type] 
    149153      end 
    150154      q.where(to_resource(s,:s),to_resource(p,:p),to_resource(o,:o)) 
    151       q.optional(to_resource(s,:s),RDFS::label,:label).optional(to_resource(s,:s),RDF::type,:type) if Thread.current[:query_retrieve_label_and_type] 
     155      q.optional(to_resource(s,:s),RDFS::label,:label_s).optional(to_resource(s,:s),RDF::type,:type_s) if Thread.current[:query_retrieve_label_and_type] 
     156    #  q.optional(to_resource(p,:p),RDFS::label,:label_p).optional(to_resource(p,:p),RDF::type,:type_p) if Thread.current[:query_retrieve_label_and_type] 
     157#      q.optional(to_resource(o,:o),RDFS::label,:label_o).optional(to_resource(o,:o),RDF::type,:type_o) if Thread.current[:query_retrieve_label_and_type]       
    152158    end 
    153159    if Thread.current[:query_retrieve_label_and_type] 
    154       variables << :label 
    155       variables << :type 
     160      variables |= [:label_s,:type_s  ] 
     161       
    156162    end 
    157163    values = q.execute   
     
    163169     
    164170    if Thread.current[:query_retrieve_label_and_type] 
    165       idxlabel=variables.index(:label) 
    166       idxtype=variables.index(:type) 
     171      idxs_label = [variables.index(:label_s) ] 
     172      idxs_type = [variables.index(:type_s)  ] 
     173       
    167174    end 
    168175     
     
    190197       
    191198      if Thread.current[:query_retrieve_label_and_type] 
    192         c_uri = triple[0].uri 
    193         cache[c_uri]= Hash.new  if cache[c_uri] == nil 
    194199         
    195         if x[idxlabel] != nil 
    196           cache[c_uri][c_label]= Array.new if cache[c_uri][c_label] == nil 
    197           cache[c_uri][c_label] << x[idxlabel] 
     200        uris =   [triple[0].uri]  
     201        uris.each {|t| cache[t]= Hash.new  if cache[t] == nil}         
     202          
     203        uris.each_index{|idx|  
     204         if x[idxs_label[idx]] != nil 
     205          cache[uris[idx]][c_label]= Array.new if cache[uris[idx]][c_label] == nil 
     206          cache[uris[idx]][c_label] << x[idxs_label[idx]] 
    198207           
    199208        end 
    200         if x[idxtype] != nil 
    201           cache[c_uri][c_type]= Array.new if cache[c_uri][c_type] == nil 
    202           cache[c_uri][c_type] << x[idxtype] 
     209        if x[idxs_type[idx]] != nil 
     210          cache[uris[idx]][c_type]= Array.new if cache[uris[idx]][c_type] == nil 
     211          cache[uris[idx]][c_type] << x[idxs_type[idx]] 
    203212        end 
     213        } 
     214        
    204215      end 
    205216