Object
You shouldn't use this. Used internally for cleanup.
# File rdf/redland/model.rb, line 27 def Model.create_finalizer(model) proc {|id| # "Finalizer on #{id}" #$log_final.info "closing model" Redland::librdf_free_model(model) } end
Constructor - takes an optional argument store, which should be one of the storage classes (all derived from TripleStore)
# File rdf/redland/model.rb, line 17 def initialize(store=nil) @statements = [] store = MemoryStore.new() if not store @model = Redland.librdf_new_model($world.world,store.store,"") raise RedlandError.new("Creating new Model failed") if not @model @store = store ObjectSpace.define_finalizer(self,Model.create_finalizer(@model)) end
Add the triples (s,p,o) to the model with the optional context
# File rdf/redland/model.rb, line 71 def add(subject,predicate,object,context=nil) my_statement = Statement.new(subject,predicate,object) self.add_statement(my_statement,context) end
Add the Statement to the Model with optional context Node
# File rdf/redland/model.rb, line 60 def add_statement(statement,context=nil) if context context = Node.ensure(context) raise RedlandError.new("Cannot make a Node from an object of #{context.class}") if not context return Redland.librdf_model_context_add_statement(self.model,context,statement.statement) else return Redland.librdf_model_add_statement(self.model,statement.statement) end end
Add the Stream of Statements to the Model with optional context Node
# File rdf/redland/model.rb, line 78 def add_statements(statement_stream,context=nil) if context context = Node.ensure(context) raise RedlandError.new("Cannot make a Node from an object of #{context.class}") if not context Redland.librdf_model_context_add_statements(self.model,context,statement_stream.stream) else return Redland.librdf_model_add_statements(self.model,statement_stream.stream) end end
list the model contents as a stream of statements
# File rdf/redland/model.rb, line 188 def as_stream(context=nil) if context context = Node.ensure(context) raise RedlandError.new("Cannot make a Node from an object of #{context.class}") if not context my_stream = Redland.librdf_model_context_as_stream(self.model,context) else my_stream = Redland.librdf_model_as_stream(self.model) end return Stream.new(my_stream,self) end
yield the contexts defined in the model. If the store wasn't set up for contexts raises a RedlandError. If no block_given returns an array of the contexts
# File rdf/redland/model.rb, line 352 def contexts() my_iterator = Redland.librdf_model_get_contexts(@model) raise RedlandError.new("Unable to create iterator for contexts") if !my_iterator iterator= NodeIterator.new(my_iterator,self) if block_given? while not iterator.end? yield iterator.current iterator.next end else context_array = [] while not iterator.end? context_array << iterator.current iterator.next end return context_array end end
create a resource for this model. The str can be a String, or a Redland::Uri
# File rdf/redland/model.rb, line 36 def create_resource(str=nil,context=nil) resource = Resource.new(str,self,context) if context resource.set_context(Resource.new(context)) end return resource end
Remove the statement made of the triples (s,p,o) with the optional context Node
# File rdf/redland/model.rb, line 156 def delete(s,p,o,context=nil) if [s,p,o].all? { |e| e } statement = Statement.new(s,p,o) self.delete_statement(statement,context) else self.find(s,p,o,context) do |ds, dp, d_o| st = Statement.new(ds, dp, d_o) Kernel.p st self.delete_statement(st, context) end end end
Remove the Statements from the Model with the given context Node
# File rdf/redland/model.rb, line 170 def delete_context(context) context = Node.ensure(context) raise RedlandError.new("Cannot make a Node from an object of #{context.class}") if not context return Redland.librdf_model_context_remove_statements(self.model,context) end
Remove the Statement from the Model with the optional context Node
# File rdf/redland/model.rb, line 145 def delete_statement(statement,context=nil) if context context = Node.ensure(context) RedlandError.new("Cannot make a Node from an object of #{context.class}") if not context return Redland.librdf_model_context_remove_statement(self.model,context,statement.statement) else return Redland.librdf_model_remove_statement(self.model,statement.statement) end end
a screen dump of the triples, if context is included a screen dump of the triples for the given context
# File rdf/redland/model.rb, line 380 def dump_model(context=nil) self.triples(context){|s,p,o| puts "#{s}:#{p}:#{o}"} end
find the statements matching the given triple. The triples can be nil
Find all triples with FOAF of Dominic
model.find(nil,FOAF['firstName'],'Dominic Sisneros'){|s,p,o ...}
# File rdf/redland/model.rb, line 238 def find(s=nil,p=nil,o=nil,context=nil) statement = Statement.new(s,p,o,self) if context context = Node.ensure(context) raise RedlandError.new("Cannot make a Node from an object of #{context.class}") if not context my_stream = Redland.librdf_model_find_statements_in_context(self.model,statement.statement,context) else my_stream = Redland.librdf_model_find_statements(self.model,statement.statement) end return nil if not my_stream stream = Stream.new(my_stream,self) if block_given? while not stream.end? my_statement = stream.current yield my_statement.subject,my_statement.predicate,my_statement.object stream.next end else #block not given return get_statement_array(stream) end end
get a resource given by str. If arg is a string it will create a Resource from it.
# File rdf/redland/model.rb, line 46 def get_resource(arg) res = self.find(Resource.new(arg),nil,nil) return (res.nil? || res[0].nil?) ? nil : res[0].subject end
Returns true if the given Triple is in the model
# File rdf/redland/model.rb, line 182 def include?(s,p,o) statement = Statement.new(s,p,o) self.include_statement?(statement) end
# File rdf/redland/model.rb, line 433 def load(uri, name="", mime_type="", type_uri=nil) ruri = uri.uri rtype_uri = type_uri.nil? ? nil : type_uri.uri return Redland.librdf_model_load(@model, ruri, name, mime_type, rtype_uri) end
Return one Node in the Model matching (source, predicate,?) The source and predicate can be a Node or Uri
# File rdf/redland/model.rb, line 266 def object(source,predicate) if source.class == Uri then source = Node.new(source) end if predicate.class == Uri then predicate = Node.new(predicate) end my_node = Redland.librdf_model_get_target(self.model,source.node,predicate.node) return nil if not my_node return Literal.from_node(my_node) if is_literal?(my_node) return Resource.new(my_node,self,false) end
parser the file with the given parser and uri and smushes the file with the model on the statements with the given predlist
# File rdf/redland/model.rb, line 387 def parse_and_merge(parser,uri,predlist,context=uri,st=nil) context = Uri.new(context) if context == uri temp_model = MergedModel.new(self) if st temp_model.add_statement(st) else parser.parse_as_stream(uri){|s|temp_model.add_statement(s)} end temp_model.find_canonical(predlist) temp_model.rewrite(context) if temp_model.global_rewrites.size > 0 print "***** GLOBAL REWRITES UNDERWAY ***" #self.rewrite(temp_model.global_rewrites) end end
Return an array of Predicate Nodes in the Model matching (subject,?,target) The subject and target can be a Node or Uri If block_given? yields the Subject Node
# File rdf/redland/model.rb, line 317 def predicates(source,target) if source.class == Uri source = Node.new(source) end if target.class == Uri or target.class == String target =Node.new(target) end my_iterator = Redland.librdf_model_get_arcs(self.model,source.node,target.node) raise RedlandError.new("unable to create iterator") if !my_iterator iterator = NodeIterator.new(my_iterator,self,source,target) if block_given? while not iterator.end? yield iterator.current iterator.next end else return get_node_array(iterator) end end
execute a query
# File rdf/redland/model.rb, line 416 def query_execute(query) results=Redland.librdf_model_query_execute(@model, query.query) if not results return nil else return QueryResults.new(results) end end
clears the transactions (?? confirm)
# File rdf/redland/model.rb, line 404 def rewrite(change_hash) transactions = [] end
saves this model to the specified filename
# File rdf/redland/model.rb, line 373 def save(filename) serializer = Serializer.new() serializer.to_file(filename,self) end
Return the size of the Storage Model. Raises a redland error if the model has non countable storage
# File rdf/redland/model.rb, line 53 def size() s = get_size() raise RedlandError.new("Attempt to get size when using non-countable storage") if s < 0 return s end
Effectively removes a Predicate from the Model by replacing all occurrences with a blank node (?? confirm)
# File rdf/redland/model.rb, line 90 def smush(pred) identifying_hash = {} canonical = {} mapme = [] transactions = [] self.find(nil,pred,nil){|sub,pred,obj| if not identifying_hash.has_key?(obj.to_s) identifying_hash[obj.to_s] = sub elsif identifying_hash[obj.to_s] != sub subject_string = sub.to_s if not canonical.has_key?(subject_string) # print "amodule Rdf dding mapping: ",subject_string,"--->",identifying_hash[obj.to_s] canonical[subject_string] = identifying_hash[obj.to_s] mapme << Node.new(sub) end end } self.triples(){ |sub,pred,obj| ss = sub.to_s os = obj.to_s new_statement = nil replace = false if canonical.has_key?(ss) if not replace new_statement = Statement.new(sub,pred,obj) replace = 1 end new_statement.subject = canonical[ss] end if canonical.has_key?(os) if not replace new_statement = Statement.new(sub,pred,obj) replace = 1 new_statement.object = canonical[os] end end if replace transactions << [Statement.new(sub,pred,obj),new_statement] end } transactions.each{ |pair| self.delete_statement(pair[0]) self.add_statement(pair[1]) } end
# File rdf/redland/model.rb, line 260 def statement_array_or_yield(stream) end
Yield the statements if a block is given.
# File rdf/redland/model.rb, line 216 def statements(context = nil) stream = self.as_stream(context) while not stream.end? yield stream.current stream.next end end
Return one Node in the Model matching (?,predicate,target) The source and predicate can be a Node or Uri
# File rdf/redland/model.rb, line 301 def subject(predicate,target) if predicate.class == Uri predicate = Node.new(predicate) end if target.class == Uri or target.class == String target = Node.new(target) end my_node = Redland.librdf_model_get_source(self.model,predicate.node,target.node) return nil if !my_node return Literal.from_node(my_node) if is_literal?(my_node) return Resource.new(my_node,self,false) end
Return an array of Subject Nodes in the Model matching (?,predicate,target) The predicate and target can be a Node or Uri If block_given? yields the Subject Node
# File rdf/redland/model.rb, line 278 def subjects(predicate,target) if predicate.class == Uri predicate = Node.new(predicate) end if target.class == Uri or target.class == String target = Node.new(target) end my_iterator = Redland.librdf_model_get_sources(self.model,predicate.node,target.node) raise RedlandError.new("Unable to create iterator") if !my_iterator iterator = NodeIterator.new(my_iterator,self,predicate,target) if block_given? while not iterator.end? yield iterator.current iterator.next end else return get_node_array(iterator) end end
Serialize the Model to a syntax
# File rdf/redland/model.rb, line 426 def to_string(name="", base_uri=nil, mime_type="", type_uri=nil) rbase_uri = base_uri.nil? ? nil : base_uri.uri rtype_uri = type_uri.nil? ? nil : type_uri.uri return Redland.librdf_model_to_string(@model, rbase_uri, name, mime_type, rtype_uri) end
Yield the triples subject, predicate, and object if a block is given. Otherwise return an array of the statements
# File rdf/redland/model.rb, line 202 def triples(context=nil) stream = self.as_stream(context) return nil if not stream if block_given? while not stream.end? yield stream.current.subject ,stream.current.predicate,stream.current.object stream.next end else return get_statement_array(stream) end end
Yield the triples as well as the context
# File rdf/redland/model.rb, line 225 def triples_with_context(context=nil) stream = self.as_stream(context) while not stream.end? statement = stream.current yield statement.subject, statement.predicate, statement.object, stream.context stream.next end end
# File rdf/redland/model.rb, line 337 def yield_node_or_array(iterator) iterator = NodeIterator.new(my_iterator,self,source,target) if block_given? while not iterator.end? yield iterator.current iterator.next end else return get_node_array(iterator) end end
(C) Copyright 2004-2013 Dave Beckett, (C) Copyright 2004-2005 University of Bristol