mabmapper 1.0.0.pre18 → 2.0.0
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/.rspec +3 -0
- data/Gemfile +27 -5
- data/README.md +7 -0
- data/lib/mabmapper/aleph_mab_xml_engine.rb +316 -275
- data/lib/mabmapper/cli.rb +30 -35
- data/lib/mabmapper/engine.rb +2 -1
- data/lib/mabmapper/mab_xml/document.rb +5 -3
- data/lib/mabmapper/version.rb +1 -1
- data/lib/mabmapper.rb +2 -1
- data/mabmapper.gemspec +7 -11
- data/spec/mabmapper/aleph_mab_xml_engine/publisher_spec.rb +197 -0
- data/spec/spec_helper.rb +86 -0
- data/test/mab_files/test_description/405.xml +4 -4
- data/test/mab_files/test_description/501-519.xml +8 -8
- data/test/mab_files/test_description/522.xml +4 -4
- data/test/mab_files/test_description/523.xml +4 -4
- data/test/mab_files/test_description/536-537.xml +8 -8
- data/test/mab_files/test_description/PAD01.001249913.PRIMO.xml +171 -0
- data/test/mab_files/test_publisher/PAD01.001206544.PRIMO.xml +1130 -0
- data/test/mab_files/test_publisher/PAD01.001231060.PRIMO.xml +145 -0
- data/test/mabmapper/test_creationdate.rb +3 -3
- data/test/mabmapper/test_description.rb +9 -0
- data/test/mabmapper/test_edition.rb +1 -1
- data/test/mabmapper/test_publisher.rb +2 -0
- data/test/test_mabmapper.rb +1 -1
- metadata +36 -65
@@ -8,7 +8,7 @@ module Mabmapper
|
|
8
8
|
# Id
|
9
9
|
#
|
10
10
|
field :id do
|
11
|
-
|
11
|
+
source.controlfield('SYS').values.join
|
12
12
|
end
|
13
13
|
|
14
14
|
#
|
@@ -18,14 +18,14 @@ module Mabmapper
|
|
18
18
|
value = 'A'
|
19
19
|
|
20
20
|
# gelöscht -> LDR Position 6 == 'd'
|
21
|
-
value = 'D' if
|
21
|
+
value = 'D' if source.controlfield('LDR').at(5) == 'd'
|
22
22
|
# ausgesondert über Feld 078
|
23
|
-
value = 'D' if
|
23
|
+
value = 'D' if source.datafields('078', ind1: 'r').subfields('a').value.try(:downcase) == 'aus'
|
24
24
|
# Standort Detmold unterdrücken
|
25
|
-
detmold_locations =
|
25
|
+
detmold_locations = source.datafields('LOC').subfields('n').values.flatten
|
26
26
|
value = 'D' if detmold_locations.present? && detmold_locations.all?{|v| v == '50'}
|
27
27
|
# Interimsaufnahmen unterdrücken
|
28
|
-
value = 'D' if
|
28
|
+
value = 'D' if source.datafields('537', ind1: '-', ind2: '1').subfields('a').values.flatten.any? { |v| v.downcase.include? 'interimsaufnahme' }
|
29
29
|
|
30
30
|
value
|
31
31
|
end
|
@@ -34,21 +34,21 @@ module Mabmapper
|
|
34
34
|
# HT Nummer
|
35
35
|
#
|
36
36
|
field :ht_number do
|
37
|
-
|
37
|
+
source.datafields('001', ind2: '1').subfields('a').value
|
38
38
|
end
|
39
39
|
|
40
40
|
#
|
41
41
|
# Creation date
|
42
42
|
#
|
43
43
|
field :creation_date do
|
44
|
-
|
44
|
+
source.datafields('LOC', ind2: :blank).subfields('k').values.flatten.map(&:presence).compact.uniq
|
45
45
|
end
|
46
46
|
|
47
47
|
#
|
48
48
|
# Materialtyp
|
49
49
|
#
|
50
50
|
field :materialtyp do
|
51
|
-
f050 =
|
51
|
+
f050 = source.controlfield('050')
|
52
52
|
type = case
|
53
53
|
when (%w(a ).include?(f050.at( 0)) ) then 'print'
|
54
54
|
when (%w(a b c).include?(f050.at( 3)) ) then 'microform'
|
@@ -68,10 +68,10 @@ module Mabmapper
|
|
68
68
|
# Inhaltstyp
|
69
69
|
#
|
70
70
|
field :inhaltstyp do
|
71
|
-
f051 =
|
72
|
-
f052 =
|
73
|
-
f051s = f051.join.slice(1..3) || ""
|
74
|
-
f052s = f052.join.slice(1..6) || ""
|
71
|
+
f051 = source.controlfield('051')
|
72
|
+
f052 = source.controlfield('052')
|
73
|
+
f051s = f051.values.join.slice(1..3) || ""
|
74
|
+
f052s = f052.values.join.slice(1..6) || ""
|
75
75
|
|
76
76
|
type = case
|
77
77
|
# Monos
|
@@ -112,7 +112,7 @@ module Mabmapper
|
|
112
112
|
# Bandzählung von Reihen
|
113
113
|
volumes = []
|
114
114
|
(456..496).step(10) do |f|
|
115
|
-
value =
|
115
|
+
value = source.datafields("#{f}", ind2: '1').subfields('a').value
|
116
116
|
volumes << value if value.present?
|
117
117
|
end
|
118
118
|
volumes.first
|
@@ -122,20 +122,20 @@ module Mabmapper
|
|
122
122
|
# Title
|
123
123
|
#
|
124
124
|
field :title do
|
125
|
-
f331_2 =
|
126
|
-
f333_2 =
|
127
|
-
f335_2 =
|
128
|
-
f360_2 =
|
129
|
-
|
130
|
-
f089_1 =
|
131
|
-
f331_1 =
|
132
|
-
f333_1 =
|
133
|
-
f335_1 =
|
134
|
-
f360_1 =
|
135
|
-
f304_1 =
|
136
|
-
f310_1 =
|
137
|
-
f340_1 =
|
138
|
-
f341_1 =
|
125
|
+
f331_2 = source.datafields('331', ind2: '2').subfields('a').value
|
126
|
+
f333_2 = source.datafields('333', ind2: '2').subfields('a').value
|
127
|
+
f335_2 = source.datafields('335', ind2: '2').subfields('a').value
|
128
|
+
f360_2 = source.datafields('360', ind2: '2').subfields('a').value
|
129
|
+
|
130
|
+
f089_1 = source.datafields('089', ind2: '1').subfields('a').values.join(" ").presence # can occur multple times
|
131
|
+
f331_1 = source.datafields('331', ind2: '1').subfields('a').value
|
132
|
+
f333_1 = source.datafields('333', ind2: '1').subfields('a').value
|
133
|
+
f335_1 = source.datafields('335', ind2: '1').subfields('a').value
|
134
|
+
f360_1 = source.datafields('360', ind2: '1').subfields('a').value
|
135
|
+
f304_1 = source.datafields('304', ind2: '1').subfields('a').value
|
136
|
+
f310_1 = source.datafields('310', ind2: '1').subfields('a').value
|
137
|
+
f340_1 = source.datafields('340', ind2: '1').subfields('a').value
|
138
|
+
f341_1 = source.datafields('341', ind2: '1').subfields('a').value
|
139
139
|
|
140
140
|
title = merge(title, f331_2, delimiter: '. ')
|
141
141
|
title = merge(title, f333_2, delimiter: ' / ')
|
@@ -163,35 +163,42 @@ module Mabmapper
|
|
163
163
|
end
|
164
164
|
|
165
165
|
field :short_title_display do
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
elsif f331_1
|
182
|
-
f331_1
|
183
|
-
elsif f089_1 && f089_1.length > 3 && f089_1[/\A(\d|\s)+\Z/].nil? && !['buch', 'hauptbd.'].include?(f089_1.gsub(/\[|\]/, '').downcase)
|
184
|
-
f089_1.gsub(/.*(bd|Bd).*\,/, '') # Try to remove volume count from
|
185
|
-
elsif f331_2
|
186
|
-
f331_2
|
187
|
-
else
|
188
|
-
''
|
189
|
-
end
|
166
|
+
bandangabe_in_vorlageform = source.datafields('089', ind2: '1').subfields('a').values.join(" ")
|
167
|
+
hauptsachtitel_in_ansetzungsform = source.datafields('310', ind1: ['-', 'a'], ind2: '1').subfields('a').value
|
168
|
+
hauptsachtitel_in_vorlageform = source.datafields('331', ind2: '1').subfields('a').value
|
169
|
+
hauptsachtitel_der_überordnung_in_vorlageform = source.datafields('331', ind2: '2').subfields('a').value
|
170
|
+
allgemeine_materialbenennung = source.datafields('334', ind1: '-', ind2: '1').value
|
171
|
+
zusätze_zum_hauptsachtitel = source.datafields('335', ind2: '1').subfields('a').value
|
172
|
+
|
173
|
+
# helper
|
174
|
+
bandangabe_may_be_used_as_title = -> (bandangabe) {
|
175
|
+
has_minimal_length = bandangabe_in_vorlageform.length > 3
|
176
|
+
does_not_only_contain_numbers_or_spaces = bandangabe_in_vorlageform[/\A(\d|\s)+\Z/].nil?
|
177
|
+
is_no_well_known_identifier = !['buch', 'hauptbd.'].include?(bandangabe_in_vorlageform.gsub(/\[|\]/, '').downcase)
|
178
|
+
|
179
|
+
has_minimal_length && does_not_only_contain_numbers_or_spaces && is_no_well_known_identifier
|
180
|
+
}
|
190
181
|
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
182
|
+
if hauptsachtitel_in_ansetzungsform
|
183
|
+
hauptsachtitel_in_ansetzungsform
|
184
|
+
elsif hauptsachtitel_in_vorlageform
|
185
|
+
[
|
186
|
+
"#{hauptsachtitel_in_vorlageform}",
|
187
|
+
if allgemeine_materialbenennung then "[#{allgemeine_materialbenennung}]" end,
|
188
|
+
if zusätze_zum_hauptsachtitel then ": #{zusätze_zum_hauptsachtitel}" end
|
189
|
+
]
|
190
|
+
.compact.join(" ")
|
191
|
+
elsif bandangabe_may_be_used_as_title.call(bandangabe_in_vorlageform)
|
192
|
+
bandangabe_in_vorlageform.gsub(/.*(bd|Bd).*\,/, '') # Try to remove volume count from
|
193
|
+
elsif hauptsachtitel_der_überordnung_in_vorlageform
|
194
|
+
hauptsachtitel_der_überordnung_in_vorlageform
|
195
|
+
end
|
196
|
+
.try do |_title|
|
197
|
+
_title.gsub(/<<|>>/, '').strip.presence
|
198
|
+
end
|
199
|
+
.try do |_cleaned_title|
|
200
|
+
_cleaned_title[0].upcase << _cleaned_title[1..-1]
|
201
|
+
end
|
195
202
|
end
|
196
203
|
|
197
204
|
field :title_search do
|
@@ -199,24 +206,24 @@ module Mabmapper
|
|
199
206
|
search_titles << ref(:title_display)
|
200
207
|
|
201
208
|
(342..355).each do |f|
|
202
|
-
search_titles <<
|
209
|
+
search_titles << source.datafields("#{f}", ind2: '1').subfields('a').values
|
203
210
|
end
|
204
211
|
|
205
|
-
search_titles <<
|
212
|
+
search_titles << source.datafields('370', ind2: '1').subfields('a').values
|
206
213
|
|
207
|
-
search_titles <<
|
214
|
+
search_titles << source.datafields('376', ind2: '1').subfields('a').values
|
208
215
|
(451..491).step(10).each do |f|
|
209
|
-
search_titles <<
|
216
|
+
search_titles << source.datafields("#{f}", ind2: '1').subfields('a').values
|
210
217
|
end
|
211
|
-
search_titles <<
|
212
|
-
search_titles <<
|
213
|
-
search_titles <<
|
218
|
+
search_titles << source.datafields('502', ind2: '1').subfields('a').values
|
219
|
+
search_titles << source.datafields('504', ind2: '1').subfields('a').values
|
220
|
+
search_titles << source.datafields('505', ind2: '1').subfields('a').values
|
214
221
|
(526..534).each do |f|
|
215
|
-
search_titles <<
|
222
|
+
search_titles << source.datafields("#{f}", ind2: '1').subfields('a').values
|
216
223
|
end
|
217
|
-
search_titles <<
|
218
|
-
search_titles <<
|
219
|
-
search_titles <<
|
224
|
+
search_titles << source.datafields('621', ind2: '1').subfields('a').values
|
225
|
+
search_titles << source.datafields('627', ind2: '1').subfields('a').values
|
226
|
+
search_titles << source.datafields('633', ind2: '1').subfields('a').values
|
220
227
|
|
221
228
|
search_titles
|
222
229
|
.flatten
|
@@ -242,26 +249,26 @@ module Mabmapper
|
|
242
249
|
|
243
250
|
# Personen
|
244
251
|
(100..196).step(4) do |f|
|
245
|
-
|
246
|
-
creators << (
|
252
|
+
source.datafields("#{f}", ind1: ['-', 'a'], ind2: ['1', '2']).each do |datafield|
|
253
|
+
creators << (datafield.subfields('a').value || datafield.subfields('p').value || datafield.subfields('c').value)
|
247
254
|
end
|
248
255
|
end
|
249
256
|
|
250
|
-
creators.map(&:presence).compact.uniq
|
257
|
+
creators.map(&:presence).compact.uniq.map { |element| element.gsub(/<<|>>/, '') }
|
251
258
|
end
|
252
259
|
|
253
|
-
def self.corporate_body_from_field(
|
254
|
-
subfield_a =
|
255
|
-
subfield_b =
|
256
|
-
subfield_c =
|
257
|
-
subfield_d =
|
258
|
-
subfield_e =
|
259
|
-
subfield_g =
|
260
|
-
subfield_h =
|
261
|
-
subfield_k =
|
262
|
-
subfield_n =
|
263
|
-
subfield_x =
|
264
|
-
subfield_z =
|
260
|
+
def self.corporate_body_from_field(datafield)
|
261
|
+
subfield_a = datafield.subfields('a').value # Körperschafts-/Kongressname/Geografikum ohne IDN-Verknüpfung (NW)
|
262
|
+
subfield_b = datafield.subfields('b').value # Unterordnung
|
263
|
+
subfield_c = datafield.subfields('c').value # Ort (NW)
|
264
|
+
subfield_d = datafield.subfields('d').value # Datum (NW)
|
265
|
+
subfield_e = datafield.subfields('e').value # Kongressname (NW)
|
266
|
+
subfield_g = datafield.subfields('g').value # Name des Geografikums (NW)
|
267
|
+
subfield_h = datafield.subfields('h').value # Zusatz
|
268
|
+
subfield_k = datafield.subfields('k').value # Körperschaftsname (NW)
|
269
|
+
subfield_n = datafield.subfields('n').value # Zählung (W)
|
270
|
+
subfield_x = datafield.subfields('x').value # nachgeordneter Teil (W)
|
271
|
+
subfield_z = datafield.subfields('x').value # geografische Unterteilung (W)
|
265
272
|
|
266
273
|
if !subfield_a && subfield_b && !subfield_c && !subfield_e && !subfield_g && subfield_h && subfield_k && !subfield_x && !subfield_z
|
267
274
|
"#{subfield_k} <#{subfield_h}> / #{subfield_b}"
|
@@ -282,7 +289,7 @@ module Mabmapper
|
|
282
289
|
|
283
290
|
# Körpferschaften
|
284
291
|
(200..296).step(4) do |f|
|
285
|
-
|
292
|
+
source.datafields("#{f}", ind1: ['-', 'a'], ind2: ['1', '2']).each do |field|
|
286
293
|
creators << engine.corporate_body_from_field(field)
|
287
294
|
end
|
288
295
|
end
|
@@ -291,8 +298,8 @@ module Mabmapper
|
|
291
298
|
end
|
292
299
|
|
293
300
|
field :author_statement do
|
294
|
-
f359_1 =
|
295
|
-
f359_2 =
|
301
|
+
f359_1 = source.datafields('359', ind1: :blank, ind2:'1').subfields('a').values.flatten.presence
|
302
|
+
f359_2 = source.datafields('359', ind1: :blank, ind2:'2').subfields('a').values.flatten.presence
|
296
303
|
f359_1 || f359_2
|
297
304
|
end
|
298
305
|
|
@@ -304,9 +311,9 @@ module Mabmapper
|
|
304
311
|
|
305
312
|
# Personen
|
306
313
|
(100..196).step(4) do |f|
|
307
|
-
|
308
|
-
name = (
|
309
|
-
action_designator =
|
314
|
+
source.datafields("#{f}", ind1: ['b', 'c', 'e', 'f'], ind2: ['1', '2']).each do |datafield|
|
315
|
+
name = (datafield.subfields('a').value || datafield.subfields('p').value || datafield.subfields('c').value)
|
316
|
+
action_designator = datafield.subfields('b').value
|
310
317
|
contributors << [name, action_designator].map(&:presence).compact.join(' ')
|
311
318
|
end
|
312
319
|
end
|
@@ -319,7 +326,7 @@ module Mabmapper
|
|
319
326
|
|
320
327
|
# Körpferschaften
|
321
328
|
(200..296).step(4) do |f|
|
322
|
-
|
329
|
+
source.datafields("#{f}", ind1: ['b', 'c', 'e', 'f'], ind2: ['1', '2']).each do |field|
|
323
330
|
contributors << engine.corporate_body_from_field(field)
|
324
331
|
end
|
325
332
|
end
|
@@ -332,16 +339,16 @@ module Mabmapper
|
|
332
339
|
|
333
340
|
# Personen
|
334
341
|
(100..196).step(4) do |f|
|
335
|
-
creators <<
|
342
|
+
creators << source.datafields("#{f}", ind2: ['1', '2']).map { |_field| _field.subfields(['a','p','n','c','b']).values.presence.try(:join, " ") }
|
336
343
|
end
|
337
344
|
|
338
345
|
# Körperschaften
|
339
346
|
(200..296).step(4) do |f|
|
340
|
-
creators <<
|
347
|
+
creators << source.datafields("#{f}", ind2: ['1', '2']).map { |_field| _field.subfields(['a','k','b','e','n','c','g','h']).values.presence.try(:join, " ") }
|
341
348
|
end
|
342
349
|
|
343
350
|
# Sonderfall: Verfasserangaben aus 359 -> [u.a.]
|
344
|
-
t =
|
351
|
+
t = source.datafields("359", ind2: '1').subfields('a').value
|
345
352
|
creators << '[u.a.]' if t && t.match(/\.\.\.|\[u\.a\.\]/i)
|
346
353
|
|
347
354
|
# Cleanup
|
@@ -371,15 +378,15 @@ module Mabmapper
|
|
371
378
|
creators.reject!{|e| e == '[u.a.]'}
|
372
379
|
|
373
380
|
# + Index Felder für Personen
|
374
|
-
creators <<
|
381
|
+
creators << source.datafields('PPE').subfields(['a', 'p']).values
|
375
382
|
|
376
383
|
# + zweiteilige Nebeneintragungen / beigefügte oder enthaltene Werke
|
377
384
|
(800..824).step(6) do |f|
|
378
|
-
creators <<
|
385
|
+
creators << source.datafields("#{f}").subfields(['a','p','c','n','b']).values
|
379
386
|
end
|
380
387
|
|
381
388
|
# + Index Felder für Körperschaften
|
382
|
-
creators <<
|
389
|
+
creators << source.datafields('PKO').subfields(['a','k','b','e','g']).values
|
383
390
|
|
384
391
|
# Füge alle Teile zusammen
|
385
392
|
creators = creators.flatten.compact
|
@@ -393,9 +400,9 @@ module Mabmapper
|
|
393
400
|
# Edition
|
394
401
|
#
|
395
402
|
field :edition do
|
396
|
-
f403_1 =
|
397
|
-
f403_2 =
|
398
|
-
f407_1 =
|
403
|
+
f403_1 = source.datafields('403', ind2: '1').subfields('a').value
|
404
|
+
f403_2 = source.datafields('403', ind2: '2').subfields('a').value
|
405
|
+
f407_1 = source.datafields('407', ind2: '1').subfields('a').value
|
399
406
|
|
400
407
|
f403_1.presence || f403_2.presence || f407_1.presence
|
401
408
|
end
|
@@ -404,62 +411,83 @@ module Mabmapper
|
|
404
411
|
# Publisher
|
405
412
|
#
|
406
413
|
field :publisher do
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
f415_1 = doc.field('415', ind2: '1').subfield('a').get.value
|
411
|
-
f415_2 = doc.field('415', ind2: '2').subfield('a').get.value
|
414
|
+
publisher = []
|
415
|
+
|
416
|
+
is_rda_record = source.datafields('419').present?
|
412
417
|
|
413
|
-
|
414
|
-
|
418
|
+
if is_rda_record
|
419
|
+
source.datafields('419').each do |_veröffentlichungsangabe|
|
420
|
+
verlagsorte = _veröffentlichungsangabe.subfields('a').values.first.try(:split, ';').try(:map!, &:strip)
|
421
|
+
verlagsname = _veröffentlichungsangabe.subfields('b').value
|
422
|
+
erster_verlagsort = verlagsorte.try(:first)
|
415
423
|
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
424
|
+
if verlagsname.present?
|
425
|
+
publisher << [erster_verlagsort, verlagsname].compact.join(" : ")
|
426
|
+
end
|
427
|
+
end
|
428
|
+
else # is rak record
|
429
|
+
orte_der_ersten_verleger = source.datafields('410', ind2: '1').subfields('a').values.presence
|
430
|
+
orte_der_ersten_verleger_der_überordnung = source.datafields('410', ind2: '2').subfields('a').values.presence
|
431
|
+
orte_der_zweiten_verleger = source.datafields('415', ind2: '1').subfields('a').values.presence
|
432
|
+
orte_der_zweiten_verleger_der_überordnung = source.datafields('415', ind2: '2').subfields('a').values.presence
|
421
433
|
|
422
|
-
|
423
|
-
|
424
|
-
# ... weitere Verleger in 418 ohne Ortsangabe ignorieren wir
|
434
|
+
orte_der_ersten_verleger ||= orte_der_ersten_verleger_der_überordnung
|
435
|
+
orte_der_zweiten_verleger ||= orte_der_zweiten_verleger_der_überordnung
|
425
436
|
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
437
|
+
namen_der_ersten_verleger = source.datafields('412', ind2: '1').subfields('a').values.presence
|
438
|
+
namen_der_ersten_verleger_der_überordnung = source.datafields('412', ind2: '2').subfields('a').values.presence
|
439
|
+
namen_der_zweiten_verleger = source.datafields('417', ind2: '1').subfields('a').values.presence
|
440
|
+
namen_der_zweiten_verleger_der_überordnung = source.datafields('417', ind2: '2').subfields('a').values.presence
|
441
|
+
|
442
|
+
namen_der_ersten_verleger ||= namen_der_ersten_verleger_der_überordnung
|
443
|
+
namen_der_zweiten_verleger ||= namen_der_zweiten_verleger_der_überordnung
|
444
|
+
|
445
|
+
# ... weitere Verleger in 418 ohne Ortsangabe ignorieren wir
|
446
|
+
|
447
|
+
erste_verleger = namen_der_ersten_verleger
|
448
|
+
.try(:map).try(:with_index) do |_name_eines_ersten_verlegers, _index|
|
449
|
+
[orte_der_ersten_verleger.try(:[], _index), _name_eines_ersten_verlegers].compact.join(" : ")
|
450
|
+
end
|
451
|
+
|
452
|
+
zweite_verleger = namen_der_zweiten_verleger
|
453
|
+
.try(:map).try(:with_index) do |_name_eines_zweiten_verlegers, _index|
|
454
|
+
[orte_der_zweiten_verleger.try(:[], _index), _name_eines_zweiten_verlegers].compact.join(" : ")
|
455
|
+
end
|
456
|
+
|
457
|
+
publisher.concat(erste_verleger) if erste_verleger.present?
|
458
|
+
publisher.concat(zweite_verleger) if zweite_verleger.present?
|
459
|
+
end
|
460
|
+
|
461
|
+
publisher.map! { |_verleger| _verleger.gsub(/<<|>>/, '') }
|
430
462
|
end
|
431
463
|
|
432
464
|
#
|
433
465
|
# Creation date
|
434
466
|
#
|
435
467
|
field :creationdate do
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
"– #{f425_c1}"
|
458
|
-
else
|
459
|
-
f425_a1.presence || f425_p1.presence
|
460
|
-
end
|
468
|
+
is_superorder = begin
|
469
|
+
f051 = source.controlfield('051')
|
470
|
+
f052 = source.controlfield('052')
|
471
|
+
|
472
|
+
%w(n t).include?(f051.at(0)) || %w(r p).include?(f052.at(0))
|
473
|
+
end
|
474
|
+
|
475
|
+
erscheinungsjahr_in_ansetzungsform = source.datafields('425', ind1: 'a', ind2: '1').subfields('a').value
|
476
|
+
erscheinungsjahr_des_ersten_bandes = source.datafields('425', ind1: 'b', ind2: '1').subfields('a').value
|
477
|
+
erscheinungsjahr_des_letzten_bandes = source.datafields('425', ind1: 'c', ind2: '1').subfields('a').value
|
478
|
+
publikationsdatum_bei_tonträgern = source.datafields('425', ind1: 'p', ind2: '1').subfields('a').value
|
479
|
+
erscheinungsjahr_der_quelle = source.datafields('595').value
|
480
|
+
|
481
|
+
if erscheinungsjahr_der_quelle
|
482
|
+
erscheinungsjahr_der_quelle # hat Vorrang vor dem eigentlichen Erscheinungsjahr
|
483
|
+
elsif is_superorder && (erscheinungsjahr_des_ersten_bandes || erscheinungsjahr_des_letzten_bandes)
|
484
|
+
[
|
485
|
+
erscheinungsjahr_des_ersten_bandes,
|
486
|
+
erscheinungsjahr_des_letzten_bandes
|
487
|
+
]
|
488
|
+
.uniq.join(" - ").strip # returns either "xxxx -", "xxxx - yyyy" or "- yyyy"
|
461
489
|
else
|
462
|
-
|
490
|
+
erscheinungsjahr_in_ansetzungsform || publikationsdatum_bei_tonträgern
|
463
491
|
end
|
464
492
|
end
|
465
493
|
|
@@ -474,11 +502,11 @@ module Mabmapper
|
|
474
502
|
# Format
|
475
503
|
#
|
476
504
|
field :format do
|
477
|
-
f433 =
|
478
|
-
f434 =
|
479
|
-
f435 =
|
480
|
-
f437 =
|
481
|
-
f653 =
|
505
|
+
f433 = source.datafields('433', ind2: '1').subfields('a').value
|
506
|
+
f434 = source.datafields('434', ind2: '1').subfields('a').values.join(', ')
|
507
|
+
f435 = source.datafields('435', ind2: '1').subfields('a').value
|
508
|
+
f437 = source.datafields('437', ind2: '1').subfields('a').value
|
509
|
+
f653 = source.datafields('653', ind2: '1').subfields('a').values.join(', ')
|
482
510
|
|
483
511
|
format = f433
|
484
512
|
format = merge(format, f434, delimiter: ' : ')
|
@@ -493,16 +521,16 @@ module Mabmapper
|
|
493
521
|
# Is part of
|
494
522
|
#
|
495
523
|
field :is_part_of do
|
496
|
-
f525 =
|
497
|
-
f590 =
|
498
|
-
f591 =
|
499
|
-
f592 =
|
500
|
-
f593 =
|
501
|
-
f594 =
|
502
|
-
f595 =
|
503
|
-
f596 =
|
504
|
-
f597 =
|
505
|
-
f598 =
|
524
|
+
f525 = source.datafields('525', ind2: '1').subfields(['p','a']).values.presence.try(:join, ': ')
|
525
|
+
f590 = source.datafields('590', ind2: '1').subfields('a').value
|
526
|
+
f591 = source.datafields('591', ind2: '1').subfields('a').value
|
527
|
+
f592 = source.datafields('592', ind2: '1').subfields('a').value
|
528
|
+
f593 = source.datafields('593', ind2: '1').subfields('a').value
|
529
|
+
f594 = source.datafields('594', ind2: '1').subfields('a').value
|
530
|
+
f595 = source.datafields('595', ind2: '1').subfields('a').value
|
531
|
+
f596 = source.datafields('596', ind2: '1').subfields('a').value
|
532
|
+
f597 = source.datafields('597', ind2: '1').subfields('a').value
|
533
|
+
f598 = source.datafields('598', ind2: '1').subfields('a').value
|
506
534
|
|
507
535
|
#f599_1 = doc.datafield('599', ind1: 'a,b', ind2: '1', subfield: 'a', multiple: true).join(' ') # ISSN
|
508
536
|
#f599_2 = doc.datafield('599', ind1: 'c,d', ind2: '1', subfield: 'a', multiple: true).join(' ') # ISBN
|
@@ -533,9 +561,15 @@ module Mabmapper
|
|
533
561
|
#
|
534
562
|
field :isbn do
|
535
563
|
isbns = []
|
536
|
-
|
537
|
-
|
538
|
-
|
564
|
+
source.datafields('540', ind2: '1').each do |_datafield|
|
565
|
+
isbns << _datafield.subfields('a').values if _datafield.ind1 != "z"
|
566
|
+
end
|
567
|
+
|
568
|
+
source.datafields('634', ind2: '1').each do |_datafield|
|
569
|
+
isbns << _datafield.subfields('a').values if _datafield.ind1 != "z"
|
570
|
+
end
|
571
|
+
|
572
|
+
isbns << source.datafields('086', ind2: '1').subfields(['b','c','d']).values
|
539
573
|
isbns.flatten.map{|v| v.gsub(/[^0-9\-x]/i, '').strip if v.present?}.map(&:presence).compact.uniq
|
540
574
|
end
|
541
575
|
|
@@ -544,9 +578,15 @@ module Mabmapper
|
|
544
578
|
#
|
545
579
|
field :issn do
|
546
580
|
issns = []
|
547
|
-
|
548
|
-
|
549
|
-
|
581
|
+
source.datafields('542', ind2: '1').each do |_datafield|
|
582
|
+
issns << _datafield.subfields('a').values if _datafield.ind1 != "z"
|
583
|
+
end
|
584
|
+
|
585
|
+
source.datafields('635', ind2: '1').each do |_datafield|
|
586
|
+
issns << _datafield.subfields('a').values if _datafield.ind1 != "z"
|
587
|
+
end
|
588
|
+
|
589
|
+
issns << source.datafields('545', ind2: '1').subfields(['a','b','c','d']).values
|
550
590
|
issns.flatten.map{|v| v.gsub(/[^0-9\-x]/i, '').strip if v.present?}.map(&:presence).compact.uniq
|
551
591
|
end
|
552
592
|
|
@@ -555,7 +595,7 @@ module Mabmapper
|
|
555
595
|
#
|
556
596
|
field :zdb_id do
|
557
597
|
zdb_ids = []
|
558
|
-
zdb_ids <<
|
598
|
+
zdb_ids << source.datafields('025', ind1: 'z', ind2: '1').subfields('a').values
|
559
599
|
zdb_ids.flatten.map(&:presence).compact.uniq
|
560
600
|
end
|
561
601
|
|
@@ -565,11 +605,11 @@ module Mabmapper
|
|
565
605
|
field :subject do
|
566
606
|
subjects = []
|
567
607
|
|
568
|
-
subjects <<
|
608
|
+
subjects << source.datafields('902').subfields(['a','p','k','s','g','e','t']).values
|
569
609
|
|
570
610
|
# Beispiel aus 740: New York (N.Y.)--Social life and customs--20th century--Fiction.
|
571
611
|
%w(710 711 740).each do |f|
|
572
|
-
t =
|
612
|
+
t = source.datafields(f).subfields('a').values
|
573
613
|
t = t.flatten.map(&:presence).compact
|
574
614
|
t = t.map{|a| a.split('--')}.flatten.map{|s| s.end_with?('.') ? s[0..-2].strip : s}.map(&:presence).compact.uniq
|
575
615
|
subjects = subjects + t
|
@@ -585,7 +625,7 @@ module Mabmapper
|
|
585
625
|
subjects << ref(:subject)
|
586
626
|
|
587
627
|
# + Index Felder für weitere Schlagworte
|
588
|
-
subjects <<
|
628
|
+
subjects << source.datafields('PSW').subfields(['a','k','e','g','s','p','t','f','z']).values
|
589
629
|
|
590
630
|
subjects.flatten.map(&:presence).compact.map{|f| f.delete('<').delete('>')}.uniq
|
591
631
|
end
|
@@ -595,8 +635,8 @@ module Mabmapper
|
|
595
635
|
#
|
596
636
|
field :ddc do
|
597
637
|
ddc_fields = []
|
598
|
-
ddc_fields <<
|
599
|
-
ddc_fields <<
|
638
|
+
ddc_fields << source.datafields('700', ind1: 'b', ind2: '1').subfields('a').values
|
639
|
+
ddc_fields << source.datafields('705', ind1: :blank, ind2: '1').subfields('a').values
|
600
640
|
|
601
641
|
ddc_fields.flatten.map(&:presence).compact.uniq
|
602
642
|
end
|
@@ -607,9 +647,9 @@ module Mabmapper
|
|
607
647
|
field :abstract do
|
608
648
|
abstracts = []
|
609
649
|
|
610
|
-
abstracts <<
|
611
|
-
abstracts <<
|
612
|
-
abstracts <<
|
650
|
+
abstracts << source.datafields('750').subfields('a').value
|
651
|
+
abstracts << source.datafields('753').subfields('a').value
|
652
|
+
abstracts << source.datafields('756').subfields('a').value
|
613
653
|
|
614
654
|
abstracts.map(&:presence).compact
|
615
655
|
end
|
@@ -619,7 +659,7 @@ module Mabmapper
|
|
619
659
|
#
|
620
660
|
field :language do
|
621
661
|
languages = []
|
622
|
-
languages <<
|
662
|
+
languages << source.datafields('037', ind1: 'b', ind2: ['1','2']).subfields('a').values
|
623
663
|
languages.flatten.map(&:presence).compact.uniq
|
624
664
|
end
|
625
665
|
|
@@ -629,14 +669,14 @@ module Mabmapper
|
|
629
669
|
field :relation do
|
630
670
|
relations = []
|
631
671
|
|
632
|
-
if (f021a =
|
672
|
+
if (f021a = source.datafields('021').subfields('a').value).present?
|
633
673
|
relations << {
|
634
674
|
ht_number: f021a,
|
635
675
|
label: 'Primärform'
|
636
676
|
}
|
637
677
|
end
|
638
678
|
|
639
|
-
if (f022a =
|
679
|
+
if (f022a = source.datafields('022').subfields('a').value).present?
|
640
680
|
relations << {
|
641
681
|
ht_number: f022a,
|
642
682
|
label: 'Sekundärform'
|
@@ -644,11 +684,11 @@ module Mabmapper
|
|
644
684
|
end
|
645
685
|
|
646
686
|
(526..534).each do |mab_field_number|
|
647
|
-
|
648
|
-
ht_number =
|
687
|
+
source.datafields("#{mab_field_number}", ind2: '1').each do |datafield|
|
688
|
+
ht_number = datafield.subfields('9').value
|
649
689
|
label = [
|
650
|
-
|
651
|
-
|
690
|
+
datafield.subfields('p').value,
|
691
|
+
datafield.subfields('a').value.try(:gsub, /<<|>>/, '')
|
652
692
|
].compact.join(' ')
|
653
693
|
|
654
694
|
relations << {ht_number: ht_number, label: label} if label
|
@@ -666,23 +706,24 @@ module Mabmapper
|
|
666
706
|
|
667
707
|
# Link zur Überordung eines mehrbändigen Werkes
|
668
708
|
superorders << {
|
669
|
-
ht_number:
|
670
|
-
label:
|
671
|
-
volume_count:
|
709
|
+
ht_number: source.datafields('010', ind2: '1').subfields('a').value,
|
710
|
+
label: source.datafields('331', ind2: '2').subfields('a').value,
|
711
|
+
volume_count: source.datafields('089', ind2: '1').subfields('a').values.presence.try(:join, " ") # Bandzählung dieses Werkes innerhalb der entsprechenden Überordnung
|
672
712
|
}
|
673
713
|
|
674
714
|
# 451 ff
|
675
715
|
(451..491).step(10) do |f|
|
676
716
|
superorders << {
|
677
|
-
ht_number:
|
678
|
-
label: [
|
679
|
-
volume_count:
|
717
|
+
ht_number: source.datafields("#{f+2}", ind2: '1').subfields('a').value,
|
718
|
+
label: [source.datafields("#{f}", ind2: '1').subfields('a').value, source.datafields("#{f}", ind2: '2').subfields('a').value].compact.reject { |label| label[/\A\.\.\.\s+(;|:)/] }.first,
|
719
|
+
volume_count: source.datafields("#{f+4}", ind2: '1').subfields('a').value
|
680
720
|
}
|
681
721
|
end
|
682
722
|
|
683
723
|
superorders
|
684
724
|
.map(&:presence)
|
685
725
|
.delete_if { |element| element[:label].blank? }
|
726
|
+
.deep_dup # to be able tu use .gsub!
|
686
727
|
.each do |element|
|
687
728
|
# remove 'not sort' indicators from label
|
688
729
|
element[:label].try(:gsub!, /<<|>>/, '')
|
@@ -726,8 +767,8 @@ module Mabmapper
|
|
726
767
|
field :superorder do
|
727
768
|
superorders = []
|
728
769
|
|
729
|
-
f623 =
|
730
|
-
f629 =
|
770
|
+
f623 = source.datafields('623').value # Identifikationsnummer des 1. GT der Sekundärform
|
771
|
+
f629 = source.datafields('629').value # Identifikationsnummer des 2. GT der Sekundärform
|
731
772
|
|
732
773
|
superorders << if (json_encoded_superorders_display = ref(:superorder_display)).present?
|
733
774
|
superorders_display = json_encoded_superorders_display.map { |json_encoded_superorder_display| JSON.parse(json_encoded_superorder_display) }
|
@@ -744,8 +785,8 @@ module Mabmapper
|
|
744
785
|
# Sind wir eine Überordnung?
|
745
786
|
#
|
746
787
|
field :is_superorder do
|
747
|
-
f051 =
|
748
|
-
f052 =
|
788
|
+
f051 = source.controlfield('051')
|
789
|
+
f052 = source.controlfield('052')
|
749
790
|
|
750
791
|
f051.at(0) == 'n' || f051.at(0) == 't' || f052.at(0) == 'p' || f052.at(0) == 'r' || f052.at(0) == 'z'
|
751
792
|
end
|
@@ -761,10 +802,10 @@ module Mabmapper
|
|
761
802
|
# Erscheinungsform
|
762
803
|
#
|
763
804
|
field :erscheinungsform do
|
764
|
-
f051 =
|
765
|
-
f052 =
|
766
|
-
f051s = f051.join.slice(1..3) || ""
|
767
|
-
f052s = f052.join.slice(1..6) || ""
|
805
|
+
f051 = source.controlfield('051')
|
806
|
+
f052 = source.controlfield('052')
|
807
|
+
f051s = f051.values.join.slice(1..3) || ""
|
808
|
+
f052s = f052.values.join.slice(1..6) || ""
|
768
809
|
|
769
810
|
type = case
|
770
811
|
when (f051.at(0) == 'a') then 'article'
|
@@ -802,20 +843,20 @@ module Mabmapper
|
|
802
843
|
descriptions = []
|
803
844
|
|
804
845
|
# 405 - Erscheinungsverlauf von Zeitschriften
|
805
|
-
descriptions <<
|
846
|
+
descriptions << source.datafields('405', ind2: '1').map { |_field| _field.subfields(['p', 'a']).values.join(': ') }
|
806
847
|
|
807
848
|
# 522 - Teilungsvermerk bei fortlaufenden Sammelwerken
|
808
|
-
descriptions <<
|
849
|
+
descriptions << source.datafields('522', ind2: '1').map { |_field| _field.subfields(['p', 'a']).values.join(': ') }
|
809
850
|
|
810
851
|
# 523 - Erscheinungsverlauf von Monos
|
811
|
-
descriptions <<
|
852
|
+
descriptions << source.datafields('523', ind2: '1').map { |_field| _field.subfields(['p', 'a']).values.join(': ') }
|
812
853
|
|
813
854
|
(501..519).each do |f|
|
814
|
-
descriptions <<
|
855
|
+
descriptions << source.datafields("#{f}", ind2: '1').map { |_field| _field.subfields(['p', 'a']).values.join(': ') }
|
815
856
|
end
|
816
857
|
|
817
858
|
(536..537).each do |f|
|
818
|
-
descriptions <<
|
859
|
+
descriptions << source.datafields("#{f}", ind2: '1').map { |_field| _field.subfields(['p', 'a']).values.join(': ') } unless f == 537 && ref(:erscheinungsform) == "journal"
|
819
860
|
end
|
820
861
|
|
821
862
|
# Finally...
|
@@ -840,16 +881,16 @@ module Mabmapper
|
|
840
881
|
|
841
882
|
field :volume_count_sort do
|
842
883
|
possible_values = []
|
843
|
-
possible_values <<
|
844
|
-
(451..491).step(10) { |f| possible_values <<
|
884
|
+
possible_values << source.datafields('090', ind2: '1').subfields('a').value
|
885
|
+
(451..491).step(10) { |f| possible_values << source.datafields("#{f+5}", ind2: '1').subfields('a').value }
|
845
886
|
count = possible_values.map(&:presence).compact.uniq.first
|
846
887
|
count.rjust(15, '0') if count.present?
|
847
888
|
end
|
848
889
|
|
849
890
|
field :volume_count_sort2 do
|
850
891
|
possible_values = []
|
851
|
-
possible_values <<
|
852
|
-
(451..491).step(10) { |f| possible_values <<
|
892
|
+
possible_values << source.datafields('090', ind2: '1').subfields('a').value
|
893
|
+
(451..491).step(10) { |f| possible_values << source.datafields("#{f+5}", ind2: '1').subfields('a').value }
|
853
894
|
count = possible_values.map(&:presence).compact.uniq.first
|
854
895
|
|
855
896
|
if count.present?
|
@@ -876,7 +917,7 @@ module Mabmapper
|
|
876
917
|
# Notation
|
877
918
|
#
|
878
919
|
field :notation do
|
879
|
-
|
920
|
+
source.datafields('700', ind2: ' ').subfields('a').values
|
880
921
|
end
|
881
922
|
|
882
923
|
field :notation_sort do
|
@@ -887,7 +928,7 @@ module Mabmapper
|
|
887
928
|
# Table of contents
|
888
929
|
#
|
889
930
|
field :toc do
|
890
|
-
|
931
|
+
source.datafields('TXT').subfields('a').values.join(' ')
|
891
932
|
end
|
892
933
|
|
893
934
|
#
|
@@ -897,11 +938,11 @@ module Mabmapper
|
|
897
938
|
signatures = []
|
898
939
|
|
899
940
|
# Lade LOC Felder für Signaturen-Extraktion
|
900
|
-
fields =
|
941
|
+
fields = source.datafields('LOC')
|
901
942
|
# Lösche alle Felder die kein Unterfeld d haben (ausgesondert)
|
902
|
-
fields = fields.reject{|f| f.subfields.find{|sf| sf.
|
943
|
+
fields = fields.reject{|f| f.subfields.find{|sf| sf.code == "d"}.blank?}
|
903
944
|
# Prüfe ob alle Exemplare im Magazin stehen
|
904
|
-
all_stack = fields.map{|f| f.subfields.find {|sf| sf.
|
945
|
+
all_stack = fields.map{|f| f.subfields.find {|sf| sf.code == 'b' && sf.value.match(/02|03|04|07/)}.present?}.all?
|
905
946
|
|
906
947
|
# Zeitschriftensignatur (haben Vorrgang, falls vorhanden)
|
907
948
|
#
|
@@ -909,16 +950,16 @@ module Mabmapper
|
|
909
950
|
# Darüber hinaus kann dieses Feld mehrfach vorkommen. Wir nehmen an, dass Subfeld 0 eine Art Zählung angibt, weshalb dort
|
910
951
|
# ein Wert von '1' zu bevorzugen ist.
|
911
952
|
#
|
912
|
-
signatures <<
|
913
|
-
.select { |f| f.
|
914
|
-
.select { |f| (value = f.
|
915
|
-
.map { |f| f.
|
953
|
+
signatures << source.datafields('200', ind1: ' ', ind2: ' ')
|
954
|
+
.select { |f| f.subfields('f').present? }
|
955
|
+
.select { |f| (value = f.subfields('0').value) == '1' || value.nil? }
|
956
|
+
.map { |f| f.subfields('f').value.try(:gsub, ' ', '') }
|
916
957
|
.first.presence
|
917
958
|
|
918
959
|
# Wenn alle Exemplare im Magzin stehen, dann nimm nur die erste signatur
|
919
960
|
if all_stack
|
920
961
|
fields.each do |field|
|
921
|
-
subfield = field.subfields.find{|f| f.
|
962
|
+
subfield = field.subfields.find{|f| f.code == "d"}
|
922
963
|
if subfield.present? && subfield.value.present?
|
923
964
|
signatures << subfield.value
|
924
965
|
break
|
@@ -927,14 +968,14 @@ module Mabmapper
|
|
927
968
|
# ansonsten extrahiere aus den normalen Signaturen eine Basis-Signatur
|
928
969
|
else
|
929
970
|
# Lösche alle Felder die als Standordkennziffer eine Magazinkennung haben
|
930
|
-
fields = fields.reject{|f| f.subfields.find{|sf| sf.
|
971
|
+
fields = fields.reject{|f| f.subfields.find{|sf| sf.code == 'b' && sf.value.match(/02|03|04|07/)}.present?}
|
931
972
|
|
932
973
|
# Sortiere die restlichen Felder nach Unterfeld 5 (Strichcode)
|
933
974
|
fields = fields.sort do |x, y|
|
934
|
-
x5 = x.subfields.find{|f| f.
|
935
|
-
y5 = y.subfields.find{|f| f.
|
975
|
+
x5 = x.subfields.find{|f| f.code == "5"}
|
976
|
+
y5 = y.subfields.find{|f| f.code == "5"}
|
936
977
|
if x5 && y5
|
937
|
-
x5.value <=>
|
978
|
+
x5.value <=> y5.value
|
938
979
|
else
|
939
980
|
0
|
940
981
|
end
|
@@ -942,7 +983,7 @@ module Mabmapper
|
|
942
983
|
|
943
984
|
# Extrahiere die Signaturen aus Unterfeld d und erzeuge eine Basis-Signatur
|
944
985
|
fields.each do |field|
|
945
|
-
subfield = field.subfields.find{|f| f.
|
986
|
+
subfield = field.subfields.find{|f| f.code == "d"}
|
946
987
|
if subfield.present? && subfield.value.present?
|
947
988
|
signature = subfield.value
|
948
989
|
index = signature.index('+') || signature.length
|
@@ -953,7 +994,7 @@ module Mabmapper
|
|
953
994
|
end
|
954
995
|
|
955
996
|
# Stücktitel Signatur
|
956
|
-
signatures <<
|
997
|
+
signatures << source.datafields('100', ind2: ' ').subfields('a').value
|
957
998
|
|
958
999
|
# Some additional love for journal signatures
|
959
1000
|
signatures.map! do |signature|
|
@@ -961,9 +1002,9 @@ module Mabmapper
|
|
961
1002
|
if signature.try(:[], /\d+[A-Za-z]\d+$/).present?
|
962
1003
|
# unless there is a leading standortkennziffer
|
963
1004
|
unless signature.starts_with?('P')
|
964
|
-
standort_kennziffer = if (loc_standort_kennziffer =
|
1005
|
+
standort_kennziffer = if (loc_standort_kennziffer = source.datafields('LOC').subfields('b').value).present?
|
965
1006
|
loc_standort_kennziffer
|
966
|
-
elsif (f105a =
|
1007
|
+
elsif (f105a = source.datafields('105').subfields('a').value).present?
|
967
1008
|
f105a
|
968
1009
|
end
|
969
1010
|
|
@@ -982,11 +1023,11 @@ module Mabmapper
|
|
982
1023
|
|
983
1024
|
field :signature_search do
|
984
1025
|
signatures = []
|
985
|
-
signatures = signatures +
|
1026
|
+
signatures = signatures + source.datafields('LOC').subfields('d').values
|
986
1027
|
# Stücktitel Signatur
|
987
|
-
signatures <<
|
1028
|
+
signatures << source.datafields('100', ind2: ' ').subfields('a').value
|
988
1029
|
# Zeitschriftensignatur
|
989
|
-
signatures <<
|
1030
|
+
signatures << source.datafields('200', ind1: ' ', ind2: ' ').subfields('f').values
|
990
1031
|
|
991
1032
|
signatures = signatures.flatten.map(&:presence).compact
|
992
1033
|
.map do |signature|
|
@@ -1006,9 +1047,9 @@ module Mabmapper
|
|
1006
1047
|
if (journal_signature = signatures.select { |signature| signature.try(:[], /\d+[A-Za-z]\d+$/).present? }.first).present?
|
1007
1048
|
if signatures.none? { |signature| signature.starts_with? 'P' }
|
1008
1049
|
# TODO: code duplication with :signature
|
1009
|
-
standort_kennziffer = if (loc_standort_kennziffer =
|
1050
|
+
standort_kennziffer = if (loc_standort_kennziffer = source.datafields('LOC').subfields('b').value).present?
|
1010
1051
|
loc_standort_kennziffer
|
1011
|
-
elsif (f105a =
|
1052
|
+
elsif (f105a = source.datafields('105').subfields('a').value).present?
|
1012
1053
|
f105a
|
1013
1054
|
end
|
1014
1055
|
|
@@ -1037,12 +1078,11 @@ module Mabmapper
|
|
1037
1078
|
field :resource_link do
|
1038
1079
|
fulltext_links = []
|
1039
1080
|
|
1040
|
-
|
1041
|
-
|
1042
|
-
|
1043
|
-
|
1044
|
-
|
1045
|
-
subfield_t = link.get_subfield('t') # Type: VIEW => Adam Inhaltsverzeichnis
|
1081
|
+
source.datafields('655').each do |datafield|
|
1082
|
+
url = datafield.subfields('u').value
|
1083
|
+
subfield_3 = datafield.subfields('3') # HBZ Inhaltsverzeichnisse
|
1084
|
+
subfield_z = datafield.subfields('z') # BVB Inhaltsverzeichnisse
|
1085
|
+
subfield_t = datafield.subfields('t') # Type: VIEW => Adam Inhaltsverzeichnis
|
1046
1086
|
|
1047
1087
|
unless (url.present? && subfield_3.present? && subfield_3.value =~ /^inhalt/i) ||
|
1048
1088
|
(url.present? && subfield_z.present? && subfield_z.value =~ /^inhalt/i) ||
|
@@ -1060,12 +1100,11 @@ module Mabmapper
|
|
1060
1100
|
field :link_to_toc do
|
1061
1101
|
toc_links = []
|
1062
1102
|
|
1063
|
-
|
1064
|
-
|
1065
|
-
|
1066
|
-
|
1067
|
-
|
1068
|
-
subfield_t = link.get_subfield('t') # Type: VIEW => Adam Inhaltsverzeichnis
|
1103
|
+
source.datafields('655').each do |datafield|
|
1104
|
+
url = datafield.subfields('u').value
|
1105
|
+
subfield_3 = datafield.subfields('3') # HBZ Inhaltsverzeichnisse
|
1106
|
+
subfield_z = datafield.subfields('z') # BVB Inhaltsverzeichnisse
|
1107
|
+
subfield_t = datafield.subfields('t') # Type: VIEW => Adam Inhaltsverzeichnis
|
1069
1108
|
|
1070
1109
|
if (url.present? && subfield_3.present? && subfield_3.value =~ /^inhaltsv/i) ||
|
1071
1110
|
(url.present? && subfield_z.present? && subfield_z.value =~ /^inhaltsv/i) ||
|
@@ -1082,7 +1121,7 @@ module Mabmapper
|
|
1082
1121
|
#
|
1083
1122
|
field :selection_code do
|
1084
1123
|
codes = []
|
1085
|
-
codes <<
|
1124
|
+
codes << source.datafields('078', ind1: ['e', 'r']).subfields('a').values
|
1086
1125
|
|
1087
1126
|
codes.flatten.map(&:presence).compact.uniq
|
1088
1127
|
end
|
@@ -1101,21 +1140,20 @@ module Mabmapper
|
|
1101
1140
|
# f - Signatur
|
1102
1141
|
r = []
|
1103
1142
|
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
field_f = field.get_subfield('f')
|
1143
|
+
source.datafields('200', ind2: ' ').each do |field|
|
1144
|
+
field_0 = field.subfields('0')
|
1145
|
+
field_a = field.subfields('a')
|
1146
|
+
field_b = field.subfields('b')
|
1147
|
+
field_c = field.subfields('c')
|
1148
|
+
field_e = field.subfields('e')
|
1149
|
+
field_f = field.subfields('f')
|
1112
1150
|
|
1113
1151
|
s = ""
|
1114
|
-
s = merge(s, field_a.
|
1115
|
-
s = merge(s, field_b.
|
1116
|
-
s = merge(s, field_c.
|
1117
|
-
s = merge(s, field_e.
|
1118
|
-
s = merge(s, field_f.
|
1152
|
+
s = merge(s, field_a.value, delimiter: ' ')
|
1153
|
+
s = merge(s, field_b.value, delimiter: ': ')
|
1154
|
+
s = merge(s, field_c.value, delimiter: ' ')
|
1155
|
+
s = merge(s, field_e.value, delimiter: '. ')
|
1156
|
+
s = merge(s, field_f.value, delimiter: ' <strong>Zeitschriftensignatur</strong>: ')
|
1119
1157
|
|
1120
1158
|
# Cleanup
|
1121
1159
|
s = s.gsub(/^\- /, '') # Z.b. "- Index: Foo Bar"
|
@@ -1142,11 +1180,11 @@ module Mabmapper
|
|
1142
1180
|
#
|
1143
1181
|
field :frbr_t do
|
1144
1182
|
value = 1
|
1145
|
-
f052 =
|
1146
|
-
ffmt =
|
1147
|
-
f100 =
|
1148
|
-
f200 =
|
1149
|
-
f300 =
|
1183
|
+
f052 = source.controlfield('052')
|
1184
|
+
ffmt = source.controlfield('FMT')
|
1185
|
+
f100 = source.datafields('100').subfields(['a','p']).value
|
1186
|
+
f200 = source.datafields('200').subfields(['a','k','g','e']).value
|
1187
|
+
f300 = source.datafields('300', ind2: '2').subfields('a').value
|
1150
1188
|
|
1151
1189
|
if (f052.present? and ['p','z','r','j'].include?(f052.at(0)))
|
1152
1190
|
value = 99
|
@@ -1164,11 +1202,11 @@ module Mabmapper
|
|
1164
1202
|
#
|
1165
1203
|
field :frbr_k1 do
|
1166
1204
|
value = nil
|
1167
|
-
ffmt =
|
1168
|
-
f052 =
|
1169
|
-
f334 =
|
1170
|
-
f100_1 = doc.naco_normalization(
|
1171
|
-
f100_2 = doc.naco_normalization(
|
1205
|
+
ffmt = source.controlfield('FMT')
|
1206
|
+
f052 = source.controlfield('052')
|
1207
|
+
f334 = source.datafields('334', ind2: '1').subfields('a').value.try(:downcase)
|
1208
|
+
f100_1 = doc.naco_normalization(source.datafields('100', ind1: '-', ind2: '1').subfields(['a','p']).value).presence
|
1209
|
+
f100_2 = doc.naco_normalization(source.datafields('100', ind1: 'b', ind2: '1').subfields(['a','p']).value).presence
|
1172
1210
|
|
1173
1211
|
if (f100_1.present?)
|
1174
1212
|
value = "$$Kpad#{f100_1}$$AA"
|
@@ -1184,54 +1222,57 @@ module Mabmapper
|
|
1184
1222
|
end
|
1185
1223
|
|
1186
1224
|
field :redactional_remark do
|
1187
|
-
|
1225
|
+
source.datafields("537", ind2: '1').map do |_datafield|
|
1226
|
+
_datafield.subfields(['a', 'p']).values.join(': ')
|
1227
|
+
end
|
1228
|
+
.presence.try(:join)
|
1188
1229
|
end
|
1189
1230
|
|
1190
1231
|
#
|
1191
1232
|
# Sekundärformen
|
1192
1233
|
#
|
1193
1234
|
field :is_secondary_form do
|
1194
|
-
(
|
1235
|
+
(source.datafields('610').value || source.datafields('611').value || source.datafields('619').value || source.datafields('621').value) != nil
|
1195
1236
|
end
|
1196
1237
|
|
1197
1238
|
field :secondary_form_preliminary_phrase do
|
1198
|
-
|
1239
|
+
source.datafields('610', ind1: '-', ind2: '1').value
|
1199
1240
|
end
|
1200
1241
|
|
1201
1242
|
field :secondary_form_publisher do
|
1202
|
-
(
|
1243
|
+
(source.datafields('611').value.to_s << ' : ' << source.datafields('613').value.to_s).gsub(/\A : /, '').presence
|
1203
1244
|
end
|
1204
1245
|
|
1205
1246
|
field :secondary_form_creationdate do
|
1206
|
-
|
1247
|
+
source.datafields('619').value
|
1207
1248
|
end
|
1208
1249
|
|
1209
1250
|
field :secondary_form_isbn do
|
1210
|
-
|
1251
|
+
source.datafields('634').value
|
1211
1252
|
end
|
1212
1253
|
|
1213
1254
|
field :secondary_form_physical_description do
|
1214
|
-
|
1255
|
+
source.datafields('637').value
|
1215
1256
|
end
|
1216
1257
|
|
1217
1258
|
# there can at most be two of 'em
|
1218
1259
|
field :secondary_form_superorder do
|
1219
1260
|
[
|
1220
1261
|
{
|
1221
|
-
ht_number:
|
1222
|
-
label:
|
1223
|
-
volume_count:
|
1262
|
+
ht_number: source.datafields('623').value,
|
1263
|
+
label: source.datafields('621').value,
|
1264
|
+
volume_count: source.datafields('625').value
|
1224
1265
|
},
|
1225
1266
|
{
|
1226
|
-
ht_number:
|
1227
|
-
label:
|
1228
|
-
volume_count:
|
1267
|
+
ht_number: source.datafields('629').value,
|
1268
|
+
label: source.datafields('627').value,
|
1269
|
+
volume_count: source.datafields('631').value
|
1229
1270
|
}
|
1230
1271
|
].select { |superorder| superorder[:label].present? }.map(&:to_json).presence
|
1231
1272
|
end
|
1232
1273
|
|
1233
1274
|
field :local_comment do
|
1234
|
-
|
1275
|
+
source.datafields('125', ind1: ' ', ind2: ' ').subfields(['_', 'a']).values.flatten.uniq.presence
|
1235
1276
|
end
|
1236
1277
|
|
1237
1278
|
#
|