Module | TripleManager |
In: |
lib/semantic_record/triple_manager.rb
|
# File lib/semantic_record/triple_manager.rb, line 122 122: def self.add(subject,predicate,object,context=nil) 123: s,p,o = build(subject,predicate,object) 124: @@transit_model.add(s,p,o,context) 125: end
# File lib/semantic_record/triple_manager.rb, line 58 58: def self.attribute(uri) 59: @@transit_model.get_resource(uri) 60: end
# File lib/semantic_record/triple_manager.rb, line 140 140: def self.count 141: @@transit_model.size 142: end
# File lib/semantic_record/triple_manager.rb, line 8 8: def self.describe(uri) 9: unless exists_as_subject?(uri) 10: count = @@transit_model.size 11: populate_model_with_result( "CONSTRUCT {<#{uri}> ?p ?o} WHERE {<#{uri}> ?p ?o}" ) 12: populate_model_with_result_from_http(uri) 13: # if count == @@transit_model.size 14: # puts "pop for #{uri}" 15: 16: # end 17: end 18: end
# File lib/semantic_record/triple_manager.rb, line 144 144: def self.exists_as_subject?(uri) 145: query = Redland::Query.new("SELECT ?result WHERE {<#{uri}> ?property ?result} LIMIT 1") 146: result = @@transit_model.query_execute(query).size 147: result > 0 ? true : false 148: end
# File lib/semantic_record/triple_manager.rb, line 71 71: def self.get_by_sparql(query_string,with_population=false) 72: query = Redland::Query.new(query_string) 73: result = @@transit_model.query_execute(query) 74: 75: if result.size == 0 76: parser = SparqlParser.new 77: query_object = parser.parse(query_string) 78: bindings = "#{query_object.query_part.bindings} ?p ?o" 79: where_clause = query_object.query_part.where.group_graph_pattern.text_value.insert(1,"#{bindings}.") 80: 81: construct_query = "CONSTRUCT {#{bindings}} WHERE #{where_clause} " 82: 83: populate_model_with_result(construct_query) 84: end 85: query = Redland::Query.new(query_string) 86: result = @@transit_model.query_execute(query) 87: 88: 89: returning [] do |res| 90: while !result.finished? 91: value = result.binding_value_by_name("result") 92: if value.resource? 93: res << SemanticRecord::Base.new(value.uri.to_s) 94: else 95: res << value.to_s 96: end 97: result.next 98: end 99: end 100: end
# File lib/semantic_record/triple_manager.rb, line 107 107: def self.get_objects(subject,predicate,*args) 108: 109: unless args.empty? 110: filter = "FILTER ( lang(?result) = '#{args[0][:lang]}' )" 111: else 112: filter = nil 113: end 114: 115: query_string = "SELECT ?result WHERE {<#{subject}> <#{predicate}> ?result #{filter} }" 116: 117: puts query_string 118: 119: get_by_sparql(query_string) 120: end
# File lib/semantic_record/triple_manager.rb, line 102 102: def self.get_subjects(s) 103: query_string = "SELECT ?result WHERE {?result <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> #{s}}" 104: get_by_sparql(query_string,false) 105: end
# File lib/semantic_record/triple_manager.rb, line 62 62: def self.populate_model_with_result(query) 63: q = query 64: parser = Redland::Parser.new 65: SemanticRecord::Pool.connections.each do |connection| 66: content = connection.socket.query(q,:result_type => RubySesame::DATA_TYPES[:RDFXML],:infer => true ) 67: parser.parse_string_into_model(@@transit_model,content,Redland::Uri.new( "http://example.org/" )) 68: end 69: end
# File lib/semantic_record/triple_manager.rb, line 40 40: def self.populate_model_with_result_from_http(uri) 41: curl = Curl::Easy.new(uri) 42: curl.headers["Accept"] = "application/rdf+xml" 43: curl.follow_location = true 44: curl.connect_timeout = 2 45: curl.max_redirects = 5 46: begin 47: body = curl.perform 48: # only process responce if content-type matches 49: if !!(curl.content_type =~ /application\/rdf\+xml/) 50: parser = Redland::Parser.new 51: parser.parse_string_into_model(@@transit_model,curl.body_str,Redland::Uri.new( uri )) 52: end 53: rescue 54: 55: end 56: end
# File lib/semantic_record/triple_manager.rb, line 34 34: def self.properties_for(s) 35: query_string = "SELECT ?result WHERE {<#{s}> ?result ?object}" 36: 37: get_by_sparql(query_string) 38: end
# File lib/semantic_record/triple_manager.rb, line 20 20: def self.property_for(s,p) 21: unless exists_as_subject?( p ) 22: populate_model_with_result_from_http( p ) 23: end 24: 25: resource = @@transit_model.get_resource( Redland::Uri.new(p) ) 26: value = get_objects(s,p) 27: 28: return {:value => value, 29: :range => resource.try(:get_property, Redland::Uri.new("http://www.w3.org/2000/01/rdf-schema#range") ), 30: :domain => resource.try(:get_property, Redland::Uri.new("http://www.w3.org/2000/01/rdf-schema#domain") ) 31: } 32: end
# File lib/semantic_record/triple_manager.rb, line 127 127: def self.update(subject,attributes) 128: attributes.each do |predicate,objects| 129: sub,pre = build(subject,predicate,nil) 130: @@transit_model.find(sub,pre).each do |removable_statement| 131: @@transit_model.delete_statement(removable_statement) 132: end 133: objects.each do |object| 134: s,p,o = build(subject,predicate,object) 135: @@transit_model.add(s,p,o) 136: end 137: end 138: end
# File lib/semantic_record/triple_manager.rb, line 152 152: def self.build(subject,predicate,object) 153: s = Redland::Resource.new( subject ) 154: p = Redland::Resource.new( predicate ) 155: 156: if object.kind_of?(SemanticRecord) || (object.kind_of?(Class) && object.respond_to?(:uri) ) 157: o = Redland::Resource.new( object.uri ) 158: else 159: o = object.to_s 160: end 161: 162: return s,p,o 163: end