Class: ActiveFedora::RelsExtDatastream
- Inherits:
-
Datastream
- Object
- Rubydora::Datastream
- Datastream
- ActiveFedora::RelsExtDatastream
show all
- Includes:
- Solrizer::FieldNameMapper
- Defined in:
- lib/active_fedora/rels_ext_datastream.rb
Instance Attribute Summary collapse
Attributes inherited from Datastream
#digital_object, #last_modified
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Datastream
#create, #dirty, #dirty=, #dirty?, #initialize, #inspect, #new_object?, #profile_from_hash, #save, #solrize_profile, #to_param, #to_solr, #validate_content_present
Instance Attribute Details
#model ⇒ Object
Returns the value of attribute model.
10
11
12
|
# File 'lib/active_fedora/rels_ext_datastream.rb', line 10
def model
@model
end
|
Class Method Details
.default_attributes ⇒ Object
12
13
14
|
# File 'lib/active_fedora/rels_ext_datastream.rb', line 12
def self.default_attributes
super.merge(:mimeType => 'application/rdf+xml')
end
|
.ensure_predicates_exist!(xml) ⇒ Object
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/active_fedora/rels_ext_datastream.rb', line 84
def self.ensure_predicates_exist!(xml)
statements = Nokogiri::XML(xml).xpath('//rdf:Description/*', 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#')
predicates = statements.collect { |e| { :prefix => e.namespace.prefix, :uri => e.namespace.href, :predicate => e.name } }.uniq
predicates.each do |pred|
unless Predicates.predicate_mappings[pred[:uri]]
Predicates.predicate_mappings[pred[:uri]] = {}
if pred[:prefix] and not Predicates.predicate_namespaces.has_value?(pred[:uri])
Predicates.predicate_namespaces[pred[:prefix].to_sym] = pred[:uri]
end
end
ns = Predicates.predicate_mappings[pred[:uri]]
unless ns.invert[pred[:predicate]]
ns["#{pred[:prefix]}_#{pred[:predicate].underscore}".to_sym] = pred[:predicate]
end
end
end
|
.from_xml(xml, tmpl) ⇒ Object
Populate a RelsExtDatastream object based on the “datastream” content Assumes that the datastream contains RDF XML from a Fedora RELS-EXT datastream
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/active_fedora/rels_ext_datastream.rb', line 54
def self.from_xml(xml, tmpl)
if (xml.nil?)
else
ensure_predicates_exist!(xml)
RDF::RDFXML::Reader.new(xml) do |reader|
reader.each_statement do |statement|
literal = statement.object.kind_of?(RDF::Literal)
predicate = self.short_predicate(statement.predicate)
object = literal ? statement.object.value : statement.object.to_str
tmpl.model.add_relationship(predicate, object, literal)
end
end
tmpl.relationships_are_not_dirty!
tmpl.changed_attributes.clear
tmpl
end
end
|
.short_predicate(predicate) ⇒ Object
101
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/active_fedora/rels_ext_datastream.rb', line 101
def self.short_predicate(predicate)
if match = /^(#{Predicates.predicate_mappings.keys.sort.reverse.join('|')})(.+)$/.match(predicate.to_str)
namespace = match[1]
predicate = match[2]
pred = Predicates.predicate_mappings[namespace].invert[predicate]
pred
else
raise "Unable to parse predicate: #{predicate}"
end
end
|
Instance Method Details
#changed? ⇒ Boolean
16
17
18
|
# File 'lib/active_fedora/rels_ext_datastream.rb', line 16
def changed?
relationships_are_dirty? or super
end
|
#from_solr(solr_doc) ⇒ Object
** EXPERIMENTAL **
This is utilized by ActiveFedora::Base.load_instance_from_solr to load the relationships hash using the Solr document passed in instead of from the RELS-EXT datastream in Fedora. Utilizes solr_name method (provided by Solrizer::FieldNameMapper) to map solr key to relationship predicate.
Warning
Solr must be synchronized with RELS-EXT data in Fedora.
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
# File 'lib/active_fedora/rels_ext_datastream.rb', line 123
def from_solr(solr_doc)
model.relationships_loaded = true
Predicates.predicate_mappings.each_pair do |namespace,predicates|
predicates.keys.each do |predicate|
predicate_symbol = ActiveFedora::SolrService.solr_name(predicate, :symbol)
value = (solr_doc[predicate_symbol].nil? ? solr_doc[predicate_symbol.to_s]: solr_doc[predicate_symbol])
unless value.nil?
if value.is_a? Array
value.each do |obj|
model.add_relationship(predicate, obj)
end
else
model.add_relationship(predicate, value)
end
end
end
end
@load_from_solr = true
end
|
20
21
22
|
# File 'lib/active_fedora/rels_ext_datastream.rb', line 20
def metadata?
true
end
|
#relationships ⇒ Object
41
42
43
|
# File 'lib/active_fedora/rels_ext_datastream.rb', line 41
def relationships
model.relationships
end
|
#relationships_are_dirty! ⇒ Object
33
34
35
|
# File 'lib/active_fedora/rels_ext_datastream.rb', line 33
def relationships_are_dirty!
model.relationships_are_dirty = true
end
|
#relationships_are_dirty? ⇒ Boolean
29
30
31
|
# File 'lib/active_fedora/rels_ext_datastream.rb', line 29
def relationships_are_dirty?
model.relationships_are_dirty if model
end
|
#relationships_are_not_dirty! ⇒ Object
37
38
39
|
# File 'lib/active_fedora/rels_ext_datastream.rb', line 37
def relationships_are_not_dirty!
model.relationships_are_dirty = false
end
|
#serialize! ⇒ Object
24
25
26
27
|
# File 'lib/active_fedora/rels_ext_datastream.rb', line 24
def serialize!
self.content = to_rels_ext() if relationships_are_dirty?
model.relationships_are_dirty = false
end
|
#to_rels_ext ⇒ Object
Creates a RELS-EXT datastream for insertion into a Fedora Object
#to_xml(fields_xml) ⇒ Object
45
46
47
48
|
# File 'lib/active_fedora/rels_ext_datastream.rb', line 45
def to_xml(fields_xml)
ActiveSupport::Deprecation.warn("to_xml is deprecated, use to_rels_ext")
to_rels_ext()
end
|