mabmapper 1.0.0.pre18 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
#
|