local
[webpac2] / conf / normalize / ff-libri.pl
1 #########################################################################
2 ##                                                                      ##
3 ## Ova datoteka sadr¾i pravila za generiranje MARC21 ISO 2709 izlazne   ##
4 ## datoteke. Ulazni format je CDS/ISIS sa zapisima u UNIMARC-u.         ##
5 ##                                                                      ##      
6 ##########################################################################
7
8 # konvertira se ako postoji polje 200^a
9
10 if ( rec('200','a') ) {
11
12 ### LEADER
13 # raspraviti 17,18
14 # u nekim knji¾nicama koristi se 999a i 999b, a u nekima samo 999
15
16 if ( rec('999') && first(rec('999')) =~ m/(pregledan|P)/i) {
17         marc_leader('05','c');
18 } else {
19         marc_leader('05','n');
20 }
21
22         marc_leader('06','a');
23         marc_leader('07','m');
24         marc_leader('18','i');
25
26 if ( rec('230') ) {
27         marc_leader('19','r');
28 }
29
30 ### 001 - Voyager
31
32 ### 008
33
34 ### 035$6
35 # Privemeno koristimo 035$6 umjesto 035$9, zato ¹to marclint prijavljuje 9 kao gre¹ku.
36 # marc 035a - System Number - NSK zapisuje Voyagerov ID (001) - kako?
37 # kako mora izgledati polje 035$9? mo¾e li sadr¾avati slova i razmake?
38
39
40 marc('035','6',
41 join_with(' ',
42 #               config('input normalize path'),
43 #               config('name'),
44                 config(),
45                 'L',
46 #               config('input name'),
47 #               id(),
48 #               rec('994','a'),
49                 rec('000')
50         )
51 );
52
53
54 ### 020
55 # postoji modify -> drugi ISBN poèinje prefixom "ISBN" koji se mièe (sfb)
56
57 marc('020','a',
58         regex('s/ ISBN //g',
59                 rec('10')
60         )
61 );
62
63
64 ### 040
65 # za sve je isti
66
67 marc('040','a',
68         'HR FFZG'
69 );
70
71 marc('040','b',
72         'hrv'
73 );
74
75 marc('040','e',
76         'HR PPIAK'
77 );
78
79
80 ### 041 indikatori
81 # pretpostavke o indikatorima:
82
83 # 1. Ako postoji polje 300 i prvo pojavljivanje tog polja sadr¾i /Prijevod/ , i1 = 1
84 # (Da li je napomena uvijek pisana?)
85 #
86 # 2. Podatak o prevodiocu u 200g. Problem: razlièiti oblici rijeèi, razlièiti jezici.
87 #
88 # 3. Ako u UDK oznaci postoji "=", bez zagrada, onda je to prijevod
89 # (ako postoje zagrade pr. 94(=411.16) onda su to pomoæne oznake)
90 # pr. 821.111-2=163.42 je prijevod engleske drame na HR. 
91 # to ima samo za knji¾evna djela, eseje.... 
92
93
94 #if ( rec('675') =~ m/\d=\d/ ) {
95 if ( first(rec('300')) =~ m/Prijevod/ || first(rec('300')) =~ m/Izv. stv. nasl./ ) {
96         marc_indicators('041', 1, ' ');
97 } else {
98         marc_indicators('041', 0, ' ');
99 }
100
101
102 ### 041
103 # ponovljivo polje konvertira se u ponovljivo potpolje
104
105 #_debug(2);
106 marc_repeatable_subfield('041','a',
107         rec('101')
108 );
109 #_debug(0);
110
111
112 ### 080
113 # 675 podpolja b, c, d ... - ¹to s njima ???
114
115 marc('080','a',
116         rec('675','a')
117 );
118
119
120 ### 084 - other classification (R)
121 # NSK ga koristi za struènu oznaku NSK iz polja 681
122 # NSK definira i prelazak polja 686 u 084, u skladu s LOC konv. tablicom
123 # polje 686 koristi FFPS
124
125
126 marc('084','a',
127         rec('686')
128 );
129
130 ### 100
131 # I1 = 0 ako je pseudonim (ima 700a, nema 700b)
132
133 if ( rec('700','a') && ! rec('700','b') ) {
134         marc_indicators('100', 0, ' ');
135 } else {
136         marc_indicators('100', 1, ' ');
137 }
138
139 marc('100','a',
140         join_with(', ',
141                 rec('700', 'a'),
142                 rec('700', 'b')
143         )
144 );
145
146
147 ### 111 i 110
148 # provjeriti ispise naslova iz svake baze - moguæe su gre¹ke.
149 # ovo vrijedi za FFSFB
150
151 if ( rec('710','f') ) {
152
153 marc_indicators('111', 2, ' ');
154
155 marc_compose('111',
156         'a', rec('710','a'),
157         'e', rec('710','b'),
158         'n', rec('710','d'),
159         'd', rec('710','f'),
160         'c', rec('710','e'),
161 );
162
163
164 } else {
165         
166 marc_indicators('110', 2, ' ');
167 marc('110','a',
168         rec('710','a')
169 );
170
171 marc('110','c',
172         rec('710','c')
173 );
174
175 }
176
177
178 ### 245 indikatori
179 # i1 = 1 za sve zapise
180 # i2 = pretpostavlja se na temelju èlana na poèetku naslova i jezika
181 # treba nadopuniti i dati podatke na verifikaciju knji¾nièarima
182
183 marc_indicators('245', 1, 0);
184
185 if (    ( rec('200','a') =~ m/^Die /) || 
186         ( rec('200','a') =~ m/^Das /) || 
187         ( rec('200','a') =~ m/^The /) ) {
188                 marc_indicators('245', 1, 4);
189
190
191 if (    ( rec('200','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
192                 marc_indicators('245', 1, 2);
193
194
195 if (    ( rec('200','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
196                 marc_indicators('245', 1, 2);
197
198
199 ### 245
200 # redoslijed polja
201
202 #_debug(3);
203 marc_compose('245',
204         'a', suffix(
205                 rec('200','b') ? '. '   :
206                 rec('200','k') ? ' ; '  :
207                 rec('200','d') ? ' = '  :
208                 rec('200','e') ? ' : '  :
209                 rec('200','f') ? ' / '  :
210                                  '.',
211                         rec('200','a')
212         ),
213 #       'h', rec('200','b'),
214         'b', suffix(
215                 ( rec('200','k') && rec('200','f') ) ? ' / ' :
216                                      ' ',
217                         join_with(' ; ',
218                                 rec('200','k'),
219                         ),
220         ),
221         'b', suffix(
222                 ( rec('200','d') && rec('200','f') ) ? ' / ' :
223                                                        ' ',
224                                 rec('200','d'), 
225         ),
226         'b', suffix(
227                 ( rec('200','e') && rec('200','f') ) ? ' / ' :
228                                                        ' ',
229                         join_with(' : ',
230                                 rec('200','e'),
231                         ),
232         ),
233
234         'c', rec('200','f'),
235
236 # append to last subfield
237         '+', prefix('. ', 
238                 rec('200','c') 
239         ),
240 );
241
242
243
244 #_debug(0);
245
246
247 ### 250
248
249 marc('250','a',
250         suffix(
251                 rec('205','f') ? ' / ' :
252                                  ' '.
253                         rec('205','a')
254         )
255 );
256
257 marc('250','b',
258         rec('205','f')
259 );
260
261
262 ### 260
263 # ponovljiva potpolja u originalnom redosljedu
264
265 marc_original_order('260', '210');
266
267
268 ### 300
269 # provjeriti interpunkcije !!
270
271 marc('300','a',
272         suffix(
273                 rec('215','c') ? ' : ' :
274                 rec('215','d') ? ' ; ' :
275                 rec('215','e') ? ' + ' :
276                                         ' ',
277                         rec('215','a')
278         )
279 );
280
281 marc('300','b',
282         suffix(
283                 ( rec('215','c') && rec('215','d') ) ? ' ; ' :
284                 ( rec('215','c') && rec('215','e') ) ? ' + ' :
285                                                                 ' ',
286                         rec('215','c')
287         )
288 );
289
290 marc('300','c',
291         suffix(
292                 rec('215','e') ? ' + ' :
293                                  ' ',
294                         rec('215','d')
295         )
296 );
297
298 marc('300','e',
299         rec('215','e')
300 );
301
302
303 ### 440
304 # 2.ind. prema jeziku i èlanu
305
306 marc_indicators('440', ' ', '0');
307
308 marc('440','a',
309         join_with(' : ',
310                 rec('225','a'),
311                 join_with(' / ',
312                         rec('225','e'),
313                         rec('225','f')
314                 )
315         )
316 ) ;
317
318 marc('440','n',
319         rec('225','h')
320 );
321
322 marc('440','p',
323         rec('225','i')
324 );
325
326 marc('440','v',
327         join_with(', ',
328                 rec('225','v'),
329                 rec('225','w')
330         ),
331 );
332
333 marc('440','x',
334         rec('225','x')
335 );
336
337 marc('440','a',
338         rec('225','b'),
339 );
340
341
342 ### 490 
343 #
344 #marc('490','a',
345 #       rec('225','a')
346 #);
347
348
349 ### 500
350
351 marc('500','a',
352         rec('300')
353 );
354
355 marc('500','a',
356         rec('305')
357 );
358
359 marc('500','a',
360         rec('307')
361 );
362
363 marc('500','a',
364         rec('314')
365 );
366
367 ### 502 - bilje¹ka o disertacijama
368 # odgovarajuæeg polja nema u originalnim podacima. mo¾da se mo¾e pretpostaviti?
369
370 ### 504
371
372 marc('504','a',
373         rec('320')
374 );
375
376 ## napomene uz konverziju polja 327 (sadrzaj):
377 # NSK konvertira 327 (NP) u 501 (R)
378 # u LOC konv. tablici stoji 327 (NP) u 505 (NR)
379 # standard i validacije dopu¹taju 501 (R) i 505 (R)
380
381 ## 505
382 ## FFPS 327 - sadrzaj
383
384 if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) {
385         marc_indicators('505', '0', ' ');
386         marc('505','a',
387                 regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
388                         rec('327')
389                 )       
390 );
391 }
392
393
394
395 ## napomene uz konverziju polja 330:
396 # NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
397
398
399 ### 520
400 # mo¾da i polje 520y - jezik napomene ako je uvijek isti jezik
401
402 # FFPS 330 (NP) - sa¾etak
403 if ( config() =~ m/ffps/ ) { 
404         marc('520','a',
405                 regex('s/[\\r\\n]+/. /g',
406                         rec('330')
407                 )       
408         );
409 }
410
411 # FFTU 330 - ???
412 if ( config() =~ m/fftu/ ) { 
413         marc('520','a',
414                 rec('330')
415         );
416 }
417
418
419 ### 538
420
421 marc('538','a',
422         rec('337','a')
423 );
424
425
426 ### 246
427
428 marc_indicators('246', 1, 3);
429 marc('246','a',
430         rec('532')
431 );
432
433 ### 655
434
435 marc_indicators('655', ' ', 4);
436 marc('655','a',
437         rec('608')
438 );
439
440 ### 653
441
442 marc_indicators('653', 0, ' ');
443 marc('653','a',
444         rec('610')
445 );
446
447 #_debug(2);
448
449
450 ### 700
451
452 marc_indicators('700', 1, ' ');
453
454 if ( rec('701') ) { 
455 marc('700','4', 
456         'aut'
457 ); 
458 }
459
460 marc('700','a',
461         join_with(', ',
462                 rec('701', 'a'),
463                 rec('701', 'b')
464         )
465 );
466
467 marc('700','a',
468         join_with(', ',
469                 rec('701', 'c'),
470                 rec('701', 'd')
471         )
472 );
473
474 marc('700','a',
475         join_with(', ',
476                 rec('701', 'e'),
477                 rec('701', 'f')
478         )
479 );
480
481 marc('700','a',
482         join_with(', ',
483                 rec('701', 'g'),
484                 rec('701', 'h')
485         )
486 );
487
488
489 marc('700','a',
490         rec('702','a'),
491 );
492
493
494 # ako je u originalu ponovljivo polje treba biti i konvertirano u ponovljivo !!
495
496
497 marc('700','a',
498         join_with(', ',
499                 rec('702','c'),
500                 rec('702','d')
501         )
502 );
503
504 marc('700','a',
505         join_with(', ',
506                 rec('702','e'),
507                 rec('702','f')
508         )
509 );
510
511 marc('700','a',
512         join_with(', ',
513                 rec('702','g'),
514                 rec('702','h')
515         )
516 );
517
518 ## treba provjeriti da li polje 330 sadrzi jos neke podatke koji mogu biti u <> ili su tu iskljucivo autori? da li samo autori ili neke druge osobe?
519 #
520 # marc('700','a',
521 #       rec('330','a')
522 # );
523
524
525 # marc('700','a',
526 #       rec('330','b')
527 # );
528
529 # marc('700','a',
530 #       rec('330','c')
531 # );
532
533
534 # marc('700','a',
535 #       rec('330','d')
536 # );
537
538 # marc('700','a',
539 #       rec('330','e')
540 # );
541
542 # marc('700','a',
543 #       rec('330','f')
544 # );
545  
546 #_debug(0);
547
548
549
550
551 ### 740
552
553 marc_indicators('740', 0, ' ');
554
555 # if ( ! rec('464') ) {
556 # marc('740','a',
557 #       rec('200','c')
558 # );
559
560 marc('740','a',
561         rec('200','k')
562 );
563
564 # } else {
565
566 #marc('740','a',
567 #       rec('464','a')
568 #);
569
570 # };
571
572 ### generiranje zapisa o nakladnièkoj cjelini i povezivanje podreðenog zapisa s nadreðenim
573
574
575 my $series_key = join_with('',
576         rec('225','a'),
577         rec('210','a'),
578         rec('210','b'),
579 );
580
581 if ($series_key) {
582
583         marc_indicators('760', 0, ' ');
584         
585         marc('760','w',
586                 get( $series_key )
587         );
588 }
589
590 ### testing
591 #
592 # my $dup_key = join_with('',
593 #       rec('200','a'),
594 #);
595 #
596 #if ($dup_key) {
597 #       marc('995','a',
598 #               get( $dup_key )
599 #       );
600 #}
601 #
602 #
603 # marc_indicators('776', 0, ' ');
604
605 # marc('776','a',
606 #       rec('452','1')
607 # );
608 #
609
610
611
612 ##################################
613 ##                              ##
614 ## pomoæni ispisi - privremeno! ##
615 ##                              ##
616 ##################################
617
618 if ( ! rec('464') && rec('200','c') ) {
619         marc('002',
620                 'ima-200c-nema-464'
621         );
622 }
623
624 if ( ! rec('464') && rec('200','k') ) {
625         marc('003',
626                 'ima-200k-nema-464'
627         );
628 }
629
630 if ( ! ( rec('200','c') || rec('200','k') ) && rec('464') ) {
631         marc('004',
632                 'ima-464-nema-200c-ili-200k'
633         );
634 }
635
636
637
638 #_debug(2);
639
640 if ( rec('200') =~ m/prev/ ) {
641         marc('005',
642                 'prijevod'
643         );
644 }
645
646 #_debug(0);
647
648
649
650 } # polje 200a