dor-services 6.0.0 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/dor-services.rb +7 -6
- data/lib/dor/certificate_authenticated_rest_resource_factory.rb +2 -1
- data/lib/dor/config.rb +38 -37
- data/lib/dor/datastreams/administrative_metadata_ds.rb +98 -98
- data/lib/dor/datastreams/content_metadata_ds.rb +26 -17
- data/lib/dor/datastreams/datastream_spec_solrizer.rb +4 -2
- data/lib/dor/datastreams/default_object_rights_ds.rb +10 -7
- data/lib/dor/datastreams/desc_metadata_ds.rb +6 -6
- data/lib/dor/datastreams/embargo_metadata_ds.rb +94 -94
- data/lib/dor/datastreams/events_ds.rb +55 -54
- data/lib/dor/datastreams/geo_metadata_ds.rb +7 -6
- data/lib/dor/datastreams/identity_metadata_ds.rb +128 -125
- data/lib/dor/datastreams/provenance_metadata_ds.rb +3 -1
- data/lib/dor/datastreams/rights_metadata_ds.rb +4 -4
- data/lib/dor/datastreams/role_metadata_ds.rb +42 -42
- data/lib/dor/datastreams/simple_dublin_core_ds.rb +45 -43
- data/lib/dor/datastreams/technical_metadata_ds.rb +3 -1
- data/lib/dor/datastreams/version_metadata_ds.rb +12 -5
- data/lib/dor/datastreams/workflow_definition_ds.rb +74 -73
- data/lib/dor/datastreams/workflow_ds.rb +12 -7
- data/lib/dor/exceptions.rb +2 -0
- data/lib/dor/indexers/data_indexer.rb +16 -0
- data/lib/dor/indexers/describable_indexer.rb +2 -0
- data/lib/dor/indexers/editable_indexer.rb +2 -0
- data/lib/dor/indexers/identifiable_indexer.rb +23 -8
- data/lib/dor/indexers/processable_indexer.rb +2 -0
- data/lib/dor/indexers/releasable_indexer.rb +2 -0
- data/lib/dor/models/abstract.rb +2 -0
- data/lib/dor/models/admin_policy_object.rb +2 -0
- data/lib/dor/models/agreement.rb +2 -0
- data/lib/dor/models/collection.rb +3 -0
- data/lib/dor/models/concerns/assembleable.rb +2 -0
- data/lib/dor/models/concerns/contentable.rb +5 -2
- data/lib/dor/models/concerns/describable.rb +7 -2
- data/lib/dor/models/concerns/editable.rb +28 -21
- data/lib/dor/models/concerns/embargoable.rb +4 -0
- data/lib/dor/models/concerns/eventable.rb +2 -0
- data/lib/dor/models/concerns/geoable.rb +2 -0
- data/lib/dor/models/concerns/governable.rb +7 -2
- data/lib/dor/models/concerns/identifiable.rb +33 -34
- data/lib/dor/models/concerns/itemizable.rb +4 -1
- data/lib/dor/models/concerns/preservable.rb +2 -0
- data/lib/dor/models/concerns/processable.rb +15 -9
- data/lib/dor/models/concerns/publishable.rb +9 -4
- data/lib/dor/models/concerns/releaseable.rb +21 -11
- data/lib/dor/models/concerns/rightsable.rb +2 -0
- data/lib/dor/models/concerns/shelvable.rb +6 -2
- data/lib/dor/models/concerns/versionable.rb +8 -4
- data/lib/dor/models/item.rb +2 -0
- data/lib/dor/models/set.rb +2 -0
- data/lib/dor/models/workflow_object.rb +5 -1
- data/lib/dor/rest_resource_factory.rb +2 -0
- data/lib/dor/services/cleanup_reset_service.rb +2 -1
- data/lib/dor/services/cleanup_service.rb +2 -1
- data/lib/dor/services/digital_stacks_service.rb +3 -1
- data/lib/dor/services/indexing_service.rb +3 -1
- data/lib/dor/services/merge_service.rb +6 -4
- data/lib/dor/services/metadata_handlers/catalog_handler.rb +2 -0
- data/lib/dor/services/metadata_service.rb +4 -4
- data/lib/dor/services/public_desc_metadata_service.rb +16 -8
- data/lib/dor/services/public_xml_service.rb +7 -4
- data/lib/dor/services/registration_service.rb +25 -20
- data/lib/dor/services/reset_workspace_service.rb +4 -4
- data/lib/dor/services/sdr_ingest_service.rb +4 -2
- data/lib/dor/services/search_service.rb +8 -9
- data/lib/dor/services/suri_service.rb +3 -2
- data/lib/dor/services/technical_metadata_service.rb +15 -9
- data/lib/dor/services/thumbnail_service.rb +14 -10
- data/lib/dor/utils/hydrus_shims.rb +2 -0
- data/lib/dor/utils/ng_tidy.rb +3 -7
- data/lib/dor/utils/predicate_patch.rb +2 -0
- data/lib/dor/utils/sdr_client.rb +3 -0
- data/lib/dor/utils/solr_doc_helper.rb +4 -2
- data/lib/dor/version.rb +3 -1
- data/lib/dor/workflow/document.rb +113 -108
- data/lib/dor/workflow/process.rb +90 -87
- data/lib/tasks/rdoc.rake +4 -3
- metadata +4 -4
@@ -1,139 +1,142 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Dor
|
2
|
-
class IdentityMetadataDS < ActiveFedora::OmDatastream
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
4
|
+
class IdentityMetadataDS < ActiveFedora::OmDatastream
|
5
|
+
include SolrDocHelper
|
6
|
+
|
7
|
+
set_terminology do |t|
|
8
|
+
t.root(:path => 'identityMetadata')
|
9
|
+
t.objectId :index_as => [:symbol]
|
10
|
+
t.objectType :index_as => [:symbol]
|
11
|
+
t.objectLabel
|
12
|
+
t.citationCreator
|
13
|
+
t.sourceId
|
14
|
+
t.otherId(:path => 'otherId') do
|
15
|
+
t.name_(:path => { :attribute => 'name' })
|
16
|
+
end
|
17
|
+
t.agreementId :index_as => [:stored_searchable, :symbol]
|
18
|
+
t.tag :index_as => [:symbol]
|
19
|
+
t.citationTitle
|
20
|
+
t.objectCreator :index_as => [:stored_searchable, :symbol]
|
21
|
+
t.adminPolicy :index_as => [:not_searchable]
|
22
|
+
end
|
23
|
+
|
24
|
+
define_template :value do |builder, name, value, attrs|
|
25
|
+
builder.send(name.to_sym, value, attrs)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.xml_template
|
29
|
+
Nokogiri::XML('<identityMetadata/>')
|
14
30
|
end
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
t.adminPolicy :index_as => [:not_searchable]
|
20
|
-
end
|
21
|
-
|
22
|
-
define_template :value do |builder, name, value, attrs|
|
23
|
-
builder.send(name.to_sym, value, attrs)
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.xml_template
|
27
|
-
Nokogiri::XML('<identityMetadata/>')
|
28
|
-
end
|
29
|
-
|
30
|
-
def add_value(name, value, attrs = {})
|
31
|
-
ng_xml_will_change!
|
32
|
-
add_child_node(ng_xml.root, :value, name, value, attrs)
|
33
|
-
end
|
34
|
-
|
35
|
-
def objectId
|
36
|
-
find_by_terms(:objectId).text
|
37
|
-
end
|
38
|
-
|
39
|
-
def sourceId
|
40
|
-
node = find_by_terms(:sourceId).first
|
41
|
-
node ? [node['source'], node.text].join(':') : nil
|
42
|
-
end
|
43
|
-
|
44
|
-
# @param [String, Nil] value, or nil/empty string to delete sourceId node
|
45
|
-
# @return [String, Nil] The same value, as per Ruby convention for assignment operators
|
46
|
-
# @note The actual values assigned will have leading/trailing whitespace stripped.
|
47
|
-
def sourceId=(value)
|
48
|
-
ng_xml_will_change!
|
49
|
-
node = find_by_terms(:sourceId).first
|
50
|
-
unless value.present? # so setting it to '' is the same as removal: worth documenting maybe?
|
51
|
-
node.remove unless node.nil?
|
52
|
-
return nil
|
31
|
+
|
32
|
+
def add_value(name, value, attrs = {})
|
33
|
+
ng_xml_will_change!
|
34
|
+
add_child_node(ng_xml.root, :value, name, value, attrs)
|
53
35
|
end
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
def tags
|
63
|
-
ng_xml.search('//tag').collect(&:content)
|
64
|
-
end
|
65
|
-
|
66
|
-
def otherId(type = nil)
|
67
|
-
result = find_by_terms(:otherId).to_a
|
68
|
-
if type.nil?
|
69
|
-
result.collect { |n| [n['name'], n.text].join(':') }
|
70
|
-
else
|
71
|
-
result.select { |n| n['name'] == type }.collect { |n| n.text }
|
36
|
+
|
37
|
+
def objectId
|
38
|
+
find_by_terms(:objectId).text
|
39
|
+
end
|
40
|
+
|
41
|
+
def sourceId
|
42
|
+
node = find_by_terms(:sourceId).first
|
43
|
+
node ? [node['source'], node.text].join(':') : nil
|
72
44
|
end
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
def to_solr(solr_doc = {}, *args)
|
85
|
-
solr_doc = super(solr_doc, *args)
|
86
|
-
|
87
|
-
if digital_object.respond_to?(:profile)
|
88
|
-
digital_object.profile.each_pair do |property, value|
|
89
|
-
add_solr_value(solr_doc, property.underscore, value, (property =~ /Date/ ? :date : :symbol), [:stored_searchable])
|
45
|
+
|
46
|
+
# @param [String, Nil] value, or nil/empty string to delete sourceId node
|
47
|
+
# @return [String, Nil] The same value, as per Ruby convention for assignment operators
|
48
|
+
# @note The actual values assigned will have leading/trailing whitespace stripped.
|
49
|
+
def sourceId=(value)
|
50
|
+
ng_xml_will_change!
|
51
|
+
node = find_by_terms(:sourceId).first
|
52
|
+
unless value.present? # so setting it to '' is the same as removal: worth documenting maybe?
|
53
|
+
node&.remove
|
54
|
+
return nil
|
90
55
|
end
|
56
|
+
parts = value.split(':', 2).map(&:strip)
|
57
|
+
raise ArgumentError, "Source ID must follow the format 'namespace:value', not '#{value}'" unless
|
58
|
+
parts.length == 2 && parts[0].present? && parts[1].present?
|
59
|
+
|
60
|
+
node ||= ng_xml.root.add_child('<sourceId/>').first
|
61
|
+
node['source'] = parts[0]
|
62
|
+
node.content = parts[1]
|
91
63
|
end
|
92
64
|
|
93
|
-
|
94
|
-
(
|
95
|
-
add_solr_value(solr_doc, 'dor_id', id, :symbol, [:stored_searchable])
|
96
|
-
add_solr_value(solr_doc, 'identifier', sourceId, :symbol, [:stored_searchable])
|
97
|
-
add_solr_value(solr_doc, 'source_id', sourceId, :symbol, [])
|
65
|
+
def tags
|
66
|
+
ng_xml.search('//tag').collect(&:content)
|
98
67
|
end
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
# do some stuff to make tags in general and project tags specifically more easily searchable and facetable
|
108
|
-
find_by_terms(:tag).each { |tag|
|
109
|
-
(prefix, rest) = tag.text.split(/:/, 2)
|
110
|
-
prefix = prefix.downcase.strip.gsub(/\s/, '_')
|
111
|
-
unless rest.nil?
|
112
|
-
# this part will index a value in a field specific to the tag, e.g. registered_by_tag_*,
|
113
|
-
# book_tag_*, project_tag_*, remediated_by_tag_*, etc. project_tag_* and registered_by_tag_*
|
114
|
-
# definitley get used, but most don't. we can limit the prefixes that get solrized if things
|
115
|
-
# get out of hand.
|
116
|
-
add_solr_value(solr_doc, "#{prefix}_tag", rest.strip, :symbol, [])
|
68
|
+
|
69
|
+
def otherId(type = nil)
|
70
|
+
result = find_by_terms(:otherId).to_a
|
71
|
+
if type.nil?
|
72
|
+
result.collect { |n| [n['name'], n.text].join(':') }
|
73
|
+
else
|
74
|
+
result.select { |n| n['name'] == type }.collect { |n| n.text }
|
117
75
|
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def add_otherId(other_id)
|
79
|
+
ng_xml_will_change!
|
80
|
+
(name, val) = other_id.split(/:/, 2)
|
81
|
+
node = ng_xml.root.add_child('<otherId/>').first
|
82
|
+
node['name'] = name
|
83
|
+
node.content = val
|
84
|
+
node
|
85
|
+
end
|
86
|
+
|
87
|
+
def to_solr(solr_doc = {}, *args)
|
88
|
+
solr_doc = super(solr_doc, *args)
|
118
89
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
progressive_tag_prefix = ''
|
124
|
-
tag_parts.each_with_index do |part, index|
|
125
|
-
progressive_tag_prefix += ' : ' if index > 0
|
126
|
-
progressive_tag_prefix += part.strip
|
127
|
-
add_solr_value(solr_doc, 'exploded_tag', progressive_tag_prefix, :symbol, [])
|
90
|
+
if digital_object.respond_to?(:profile)
|
91
|
+
digital_object.profile.each_pair do |property, value|
|
92
|
+
add_solr_value(solr_doc, property.underscore, value, (property =~ /Date/ ? :date : :symbol), [:stored_searchable])
|
93
|
+
end
|
128
94
|
end
|
129
|
-
}
|
130
95
|
|
131
|
-
|
132
|
-
|
96
|
+
if sourceId.present?
|
97
|
+
(name, id) = sourceId.split(/:/, 2)
|
98
|
+
add_solr_value(solr_doc, 'dor_id', id, :symbol, [:stored_searchable])
|
99
|
+
add_solr_value(solr_doc, 'identifier', sourceId, :symbol, [:stored_searchable])
|
100
|
+
add_solr_value(solr_doc, 'source_id', sourceId, :symbol, [])
|
101
|
+
end
|
102
|
+
otherId.compact.each { |qid|
|
103
|
+
# this section will solrize barcode and catkey, which live in otherId
|
104
|
+
(name, id) = qid.split(/:/, 2)
|
105
|
+
add_solr_value(solr_doc, 'dor_id', id, :symbol, [:stored_searchable])
|
106
|
+
add_solr_value(solr_doc, 'identifier', qid, :symbol, [:stored_searchable])
|
107
|
+
add_solr_value(solr_doc, "#{name}_id", id, :symbol, [])
|
108
|
+
}
|
109
|
+
|
110
|
+
# do some stuff to make tags in general and project tags specifically more easily searchable and facetable
|
111
|
+
find_by_terms(:tag).each { |tag|
|
112
|
+
(prefix, rest) = tag.text.split(/:/, 2)
|
113
|
+
prefix = prefix.downcase.strip.gsub(/\s/, '_')
|
114
|
+
unless rest.nil?
|
115
|
+
# this part will index a value in a field specific to the tag, e.g. registered_by_tag_*,
|
116
|
+
# book_tag_*, project_tag_*, remediated_by_tag_*, etc. project_tag_* and registered_by_tag_*
|
117
|
+
# definitley get used, but most don't. we can limit the prefixes that get solrized if things
|
118
|
+
# get out of hand.
|
119
|
+
add_solr_value(solr_doc, "#{prefix}_tag", rest.strip, :symbol, [])
|
120
|
+
end
|
121
|
+
|
122
|
+
# solrize each possible prefix for the tag, inclusive of the full tag.
|
123
|
+
# e.g., for a tag such as "A : B : C", this will solrize to an _ssim field
|
124
|
+
# that contains ["A", "A : B", "A : B : C"].
|
125
|
+
tag_parts = tag.text.split(/:/)
|
126
|
+
progressive_tag_prefix = ''
|
127
|
+
tag_parts.each_with_index do |part, index|
|
128
|
+
progressive_tag_prefix += ' : ' if index > 0
|
129
|
+
progressive_tag_prefix += part.strip
|
130
|
+
add_solr_value(solr_doc, 'exploded_tag', progressive_tag_prefix, :symbol, [])
|
131
|
+
end
|
132
|
+
}
|
133
|
+
|
134
|
+
solr_doc
|
135
|
+
end
|
133
136
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
end # class
|
137
|
+
# maintain AF < 8 indexing behavior
|
138
|
+
def prefix
|
139
|
+
''
|
140
|
+
end
|
141
|
+
end # class
|
139
142
|
end
|
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Dor
|
2
4
|
# Represents the Fedora 3 datastream that hold provenance metadata
|
3
5
|
class ProvenanceMetadataDS < ActiveFedora::OmDatastream
|
4
6
|
# This provides the prefix for the solr fields generated by ActiveFedora.
|
5
7
|
# Since we don't want a prefix, we override this to return an empty string.
|
6
8
|
def prefix
|
7
|
-
''
|
9
|
+
''
|
8
10
|
end
|
9
11
|
end
|
10
12
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Dor
|
2
4
|
class RightsMetadataDS < ActiveFedora::OmDatastream
|
3
5
|
require 'dor/rights_auth'
|
@@ -35,7 +37,7 @@ module Dor
|
|
35
37
|
xml.machine { xml.none }
|
36
38
|
}
|
37
39
|
xml.access(:type => 'read') {
|
38
|
-
xml.machine { xml.none }
|
40
|
+
xml.machine { xml.none } # dark default
|
39
41
|
}
|
40
42
|
xml.use {
|
41
43
|
xml.human(:type => 'useAndReproduction')
|
@@ -64,7 +66,6 @@ module Dor
|
|
64
66
|
'none' => 'Citation Only'
|
65
67
|
}.freeze
|
66
68
|
|
67
|
-
|
68
69
|
# just a wrapper to invalidate @dra_object
|
69
70
|
def content=(xml)
|
70
71
|
@dra_object = nil
|
@@ -112,7 +113,7 @@ module Dor
|
|
112
113
|
loc_node = Nokogiri::XML::Node.new('location', rights_xml)
|
113
114
|
loc_node.content = rights_type.split(':').last
|
114
115
|
machine_node.add_child(loc_node)
|
115
|
-
else
|
116
|
+
else # we know it is none or dark by the argument filter (first line)
|
116
117
|
machine_node.add_child Nokogiri::XML::Node.new('none', rights_xml)
|
117
118
|
end
|
118
119
|
end
|
@@ -215,6 +216,5 @@ module Dor
|
|
215
216
|
def prefix
|
216
217
|
''
|
217
218
|
end
|
218
|
-
|
219
219
|
end # class
|
220
220
|
end
|
@@ -1,55 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Dor
|
2
|
-
class RoleMetadataDS < ActiveFedora::OmDatastream
|
3
|
-
|
4
|
+
class RoleMetadataDS < ActiveFedora::OmDatastream
|
5
|
+
include SolrDocHelper
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
+
set_terminology do |t|
|
8
|
+
t.root :path => 'roleMetadata'
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
10
|
+
t.actor do
|
11
|
+
t.identifier do
|
12
|
+
t.type_ :path => { :attribute => 'type' }
|
13
|
+
end
|
14
|
+
t.name
|
11
15
|
end
|
12
|
-
t.
|
13
|
-
|
14
|
-
t.person :ref => [:actor], :path => 'person'
|
15
|
-
t.group :ref => [:actor], :path => 'group'
|
16
|
+
t.person :ref => [:actor], :path => 'person'
|
17
|
+
t.group :ref => [:actor], :path => 'group'
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
t.role do
|
20
|
+
t.type_ :path => { :attribute => 'type' }
|
21
|
+
t.person :ref => [:person]
|
22
|
+
t.group :ref => [:group]
|
23
|
+
end
|
22
24
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
t.manager :ref => [:role], :attributes => { :type => 'manager' }
|
26
|
+
t.depositor :ref => [:role], :attributes => { :type => 'depositor' }
|
27
|
+
t.reviewer :ref => [:role], :attributes => { :type => 'reviewer' }
|
28
|
+
t.viewer :ref => [:role], :attributes => { :type => 'viewer' }
|
29
|
+
end
|
28
30
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
31
|
+
def self.xml_template
|
32
|
+
Nokogiri::XML::Builder.new do |xml|
|
33
|
+
xml.roleMetadata {}
|
34
|
+
end.doc
|
35
|
+
end
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
37
|
+
def to_solr(solr_doc = {}, *args)
|
38
|
+
find_by_xpath('/roleMetadata/role/*').each do |actor|
|
39
|
+
role_type = actor.parent['type']
|
40
|
+
val = [actor.at_xpath('identifier/@type'), actor.at_xpath('identifier/text()')].join ':'
|
41
|
+
add_solr_value(solr_doc, "apo_role_#{actor.name}_#{role_type}", val, :string, [:symbol])
|
42
|
+
add_solr_value(solr_doc, "apo_role_#{role_type}", val, :string, [:symbol])
|
43
|
+
if ['dor-apo-manager', 'dor-apo-depositor'].include? role_type
|
44
|
+
add_solr_value(solr_doc, 'apo_register_permissions', val, :string, [:symbol, :stored_searchable])
|
45
|
+
end
|
44
46
|
end
|
47
|
+
solr_doc
|
45
48
|
end
|
46
|
-
solr_doc
|
47
|
-
end
|
48
49
|
|
49
|
-
|
50
|
-
|
51
|
-
|
50
|
+
# maintain AF < 8 indexing behavior
|
51
|
+
def prefix
|
52
|
+
''
|
53
|
+
end
|
52
54
|
end
|
53
|
-
|
54
|
-
end
|
55
55
|
end
|
@@ -1,57 +1,59 @@
|
|
1
|
-
|
2
|
-
class SimpleDublinCoreDs < ActiveFedora::OmDatastream
|
3
|
-
|
4
|
-
set_terminology do |t|
|
5
|
-
t.root(
|
6
|
-
path: 'dc',
|
7
|
-
xmlns: 'http://www.openarchives.org/OAI/2.0/oai_dc/',
|
8
|
-
schema: 'http://cosimo.stanford.edu/standards/oai_dc/v2/oai_dc.xsd',
|
9
|
-
namespace_prefix: 'oai_dc',
|
10
|
-
index_as: [:not_searchable])
|
11
|
-
t.title( :index_as => [:stored_sortable, :stored_searchable], :xmlns => 'http://purl.org/dc/elements/1.1/', :namespace_prefix => 'dc')
|
12
|
-
t.creator( :index_as => [:stored_sortable, :stored_searchable], :xmlns => 'http://purl.org/dc/elements/1.1/', :namespace_prefix => 'dc')
|
13
|
-
t.identifier(:index_as => [:symbol, :stored_searchable], :xmlns => 'http://purl.org/dc/elements/1.1/', :namespace_prefix => 'dc')
|
14
|
-
end
|
1
|
+
# frozen_string_literal: true
|
15
2
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
3
|
+
module Dor
|
4
|
+
class SimpleDublinCoreDs < ActiveFedora::OmDatastream
|
5
|
+
set_terminology do |t|
|
6
|
+
t.root(
|
7
|
+
path: 'dc',
|
8
|
+
xmlns: 'http://www.openarchives.org/OAI/2.0/oai_dc/',
|
9
|
+
schema: 'http://cosimo.stanford.edu/standards/oai_dc/v2/oai_dc.xsd',
|
10
|
+
namespace_prefix: 'oai_dc',
|
11
|
+
index_as: [:not_searchable]
|
23
12
|
)
|
13
|
+
t.title(:index_as => [:stored_sortable, :stored_searchable], :xmlns => 'http://purl.org/dc/elements/1.1/', :namespace_prefix => 'dc')
|
14
|
+
t.creator(:index_as => [:stored_sortable, :stored_searchable], :xmlns => 'http://purl.org/dc/elements/1.1/', :namespace_prefix => 'dc')
|
15
|
+
t.identifier(:index_as => [:symbol, :stored_searchable], :xmlns => 'http://purl.org/dc/elements/1.1/', :namespace_prefix => 'dc')
|
24
16
|
end
|
25
17
|
|
26
|
-
|
27
|
-
|
18
|
+
def self.xml_template
|
19
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
20
|
+
xml['oai_dc'].dc(
|
21
|
+
'xmlns:oai_dc' => 'http://www.openarchives.org/OAI/2.0/oai_dc/',
|
22
|
+
'xmlns:dc' => 'http://purl.org/dc/elements/1.1/',
|
23
|
+
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
|
24
|
+
'xsi:schemaLocation' => 'http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd',
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
builder.doc
|
29
|
+
end
|
28
30
|
|
29
|
-
|
30
|
-
|
31
|
-
|
31
|
+
def to_solr(solr_doc = {}, *args)
|
32
|
+
# There are a whole bunch of namespace-related things that can go
|
33
|
+
# wrong with this terminology. Until it's fixed in OM, ignore them all.
|
32
34
|
|
33
|
-
|
35
|
+
doc = super solr_doc, *args
|
34
36
|
|
35
|
-
|
36
|
-
|
37
|
+
add_solr_value(doc, 'dc_title', title.first, :string, [:stored_sortable, :stored_searchable])
|
38
|
+
add_solr_value(doc, 'dc_creator', creator.first, :string, [:stored_sortable, :stored_searchable])
|
37
39
|
|
38
|
-
|
40
|
+
identifiers = {}
|
39
41
|
|
40
|
-
|
42
|
+
identifier.each { |i| ns, val = i.split(':'); identifiers[ns] ||= val }
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
-
|
44
|
+
identifiers.each do |ns, val|
|
45
|
+
add_solr_value(doc, "dc_identifier_#{ns}", val, :string, [:stored_sortable, :stored_searchable])
|
46
|
+
end
|
45
47
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
return doc
|
49
|
+
rescue Exception => e
|
50
|
+
warn "ERROR in SimpleDublinCoreDs to_solr()! #{e}"
|
51
|
+
solr_doc
|
52
|
+
end
|
51
53
|
|
52
|
-
|
53
|
-
|
54
|
-
|
54
|
+
# maintain AF < 8 indexing behavior
|
55
|
+
def prefix
|
56
|
+
''
|
57
|
+
end
|
55
58
|
end
|
56
59
|
end
|
57
|
-
end
|