Module TripleManager
In: lib/semantic_record/triple_manager.rb

Methods

Public Class methods

[Source]

     # 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

[Source]

    # File lib/semantic_record/triple_manager.rb, line 58
58:   def self.attribute(uri)
59:     @@transit_model.get_resource(uri)    
60:   end

[Source]

     # File lib/semantic_record/triple_manager.rb, line 140
140:   def self.count
141:     @@transit_model.size
142:   end

[Source]

    # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

     # 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

Protected Class methods

[Source]

     # 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

[Validate]