module ActiveFedora::SemanticNode
def self.included(klass)
def self.included(klass) klass.extend(ClassMethods) end
def add_relationship(relationship)
def add_relationship(relationship) # Only accept ActiveFedora::Relationships as input arguments assert_kind_of 'relationship', relationship, ActiveFedora::Relationship register_triple(relationship.subject, relationship.predicate, relationship.object) end
def assert_kind_of(n, o,t)
def assert_kind_of(n, o,t) raise "Assertion failure: #{n}: #{o} is not of type #{t}" unless o.kind_of?(t) end
def outbound_relationships()
def outbound_relationships() if !internal_uri.nil? && !relationships[internal_uri].nil? return relationships[:self].merge(relationships[internal_uri]) else return relationships[:self] end end
def register_predicate(subject, predicate)
def register_predicate(subject, predicate) register_subject(subject) if !relationships[subject].has_key?(predicate) relationships[subject][predicate] = [] end end
def register_subject(subject)
def register_subject(subject) if !relationships.has_key?(subject) relationships[subject] = {} end end
def register_triple(subject, predicate, object)
def register_triple(subject, predicate, object) register_subject(subject) register_predicate(subject, predicate) relationships[subject][predicate] << object end
def relationships
def relationships @relationships ||= relationships_from_class end
def relationships_from_class
def relationships_from_class rels = {} self.class.relationships.each_pair do |subj, pred| rels[subj] = {} pred.each_key do |pred_key| rels[subj][pred_key] = [] end end #puts "rels from class: #{rels.inspect}" return rels end
def to_rels_ext(pid, relationships=self.relationships)
@pid
Creates a RELS-EXT datastream for insertion into a Fedora Object
def to_rels_ext(pid, relationships=self.relationships) starter_xml = <<-EOL <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="info:fedora/#{pid}"> </rdf:Description> </rdf:RDF> EOL xml = REXML::Document.new(starter_xml) # Iterate through the hash of predicates, adding an element to the RELS-EXT for each "object" in the predicate's corresponding array. # puts "" # puts "Iterating through a(n) #{self.class}" # puts "=> whose relationships are #{self.relationships.inspect}" # puts "=> and whose outbound relationships are #{self.outbound_relationships.inspect}" self.outbound_relationships.each do |predicate, targets_array| targets_array.each do |target| # puts ". #{predicate} #{target}" xml.root.elements["rdf:Description"].add_element(self.class.predicate_lookup(predicate), {"xmlns" => "info:fedora/fedora-system:def/relations-external#", "rdf:resource"=>target}) end end xml.to_s end