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 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 marc_indicators('100', 1, ' ');
134 marc('100','a',
135         join_with(', ',
136                 rec('700', 'a'),
137                 rec('700', 'b')
138         )
139 );
140
141
142 ### 111 i 110
143 # provjeriti ispise naslova iz svake baze - moguæe su gre¹ke.
144 # ovo vrijedi za FFSFB
145
146 if ( rec('710','f') ) {
147
148 marc_indicators('111', 2, ' ');
149
150 marc_compose('111',
151         'a', rec('710','a'),
152         'e', rec('710','b'),
153         'n', rec('710','d'),
154         'd', rec('710','f'),
155         'c', rec('710','e'),
156 );
157
158
159 } else {
160         
161 marc_indicators('110', 2, ' ');
162 marc('110','a',
163         rec('710','a')
164 );
165
166 marc('110','c',
167         rec('710','c')
168 );
169
170 }
171
172
173 ### 245 indikatori
174 # i1 = 1 za sve zapise
175 # i2 = pretpostavlja se na temelju èlana na poèetku naslova i jezika
176 # treba nadopuniti i dati podatke na verifikaciju knji¾nièarima
177
178 marc_indicators('245', 1, 0);
179
180 if (    ( rec('200','a') =~ m/^Die /) || 
181         ( rec('200','a') =~ m/^Das /) || 
182         ( rec('200','a') =~ m/^The /) ) {
183                 marc_indicators('245', 1, 4);
184
185
186 if (    ( rec('200','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) )
187         {
188                 marc_indicators('245', 1, 2);
189
190
191 ### 245
192 # redoslijed polja
193
194 #_debug(3);
195 marc_compose('245',
196         'a', suffix(
197                 rec('200','b') ? '. '   :
198                 rec('200','k') ? ' ; '  :
199                 rec('200','d') ? ' = '  :
200                 rec('200','e') ? ' : '  :
201                 rec('200','f') ? ' / '  :
202                                  '.',
203                         rec('200','a')
204         ),
205 #       'h', rec('200','b'),
206         'b', suffix(
207                 ( rec('200','k') && rec('200','f') ) ? ' / ' :
208                                      ' ',
209                         join_with(' ; ',
210                                 rec('200','k'),
211                         ),
212         ),
213         'b', suffix(
214                 ( rec('200','d') && rec('200','f') ) ? ' / ' :
215                                                        ' ',
216                                 rec('200','d'), 
217         ),
218         'b', suffix(
219                 ( rec('200','e') && rec('200','f') ) ? ' / ' :
220                                                        ' ',
221                         join_with(' : ',
222                                 rec('200','e'),
223                         ),
224         ),
225
226         'c', rec('200','f'),
227
228 # append to last subfield
229         '+', prefix('. ', 
230                 rec('200','c') 
231         ),
232 );
233
234
235
236 #_debug(0);
237
238
239 ### 250
240
241 marc('250','a',
242         suffix(
243                 rec('205','f') ? ' / ' :
244                                  ' '.
245                         rec('205','a')
246         )
247 );
248
249 marc('250','b',
250         rec('205','f')
251 );
252
253
254 ### 260
255 # ponovljiva potpolja u originalnom redosljedu
256
257 marc_original_order('260', '210');
258
259
260 ### 300
261 # provjeriti interpunkcije !!
262
263 marc('300','a',
264         suffix(
265                 rec('215','c') ? ' : ' :
266                 rec('215','d') ? ' ; ' :
267                 rec('215','e') ? ' + ' :
268                                         ' ',
269                         rec('215','a')
270         )
271 );
272
273 marc('300','b',
274         suffix(
275                 ( rec('215','c') && rec('215','d') ) ? ' ; ' :
276                 ( rec('215','c') && rec('215','e') ) ? ' + ' :
277                                                                 ' ',
278                         rec('215','c')
279         )
280 );
281
282 marc('300','c',
283         suffix(
284                 rec('215','e') ? ' + ' :
285                                  ' ',
286                         rec('215','d')
287         )
288 );
289
290 marc('300','e',
291         rec('215','e')
292 );
293
294
295 ### 440
296 # 2.ind. prema jeziku i èlanu
297
298 marc_indicators('440', ' ', '0');
299
300 marc('440','a',
301         join_with(' : ',
302                 rec('225','a'),
303                 join_with(' / ',
304                         rec('225','e'),
305                         rec('225','f')
306                 )
307         )
308 ) ;
309
310 marc('440','n',
311         rec('225','h')
312 );
313
314 marc('440','p',
315         rec('225','i')
316 );
317
318 marc('440','v',
319         join_with(', ',
320                 rec('225','v'),
321                 rec('225','w')
322         ),
323 );
324
325 marc('440','x',
326         rec('225','x')
327 );
328
329 marc('440','a',
330         rec('225','b'),
331 );
332
333
334 ### 490 
335 #
336 #marc('490','a',
337 #       rec('225','a')
338 #);
339
340
341 ### 500
342
343 marc('500','a',
344         rec('300')
345 );
346
347 marc('500','a',
348         rec('305')
349 );
350
351 marc('500','a',
352         rec('307')
353 );
354
355 marc('500','a',
356         rec('314')
357 );
358
359 ### 502 - bilje¹ka o disertacijama
360 # odgovarajuæeg polja nema u originalnim podacima. mo¾da se mo¾e pretpostaviti?
361
362 ### 504
363
364 marc('504','a',
365         rec('320')
366 );
367
368 ## napomene uz konverziju polja 327 (sadrzaj):
369 # NSK konvertira 327 (NP) u 501 (R)
370 # u LOC konv. tablici stoji 327 (NP) u 505 (NR)
371 # standard i validacije dopu¹taju 501 (R) i 505 (R)
372
373 ## 505
374 ## FFPS 327 - sadrzaj
375
376 if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) {
377         marc_indicators('505', '0', ' ');
378         marc('505','a',
379                 regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
380                         rec('327')
381                 )       
382 );
383 }
384
385
386
387 ## napomene uz konverziju polja 330:
388 # NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
389
390
391 ### 520
392 # mo¾da i polje 520y - jezik napomene ako je uvijek isti jezik
393
394 # FFPS 330 (NP) - sa¾etak
395 if ( config() =~ m/ffps/ ) { 
396         marc('520','a',
397                 regex('s/[\\r\\n]+/. /g',
398                         rec('330')
399                 )       
400         );
401 }
402
403 # FFTU 330 - ???
404 if ( config() =~ m/fftu/ ) { 
405         marc('520','a',
406                 rec('330')
407         );
408 }
409
410
411 ### 538
412
413 marc('538','a',
414         rec('337','a')
415 );
416
417
418 ### 246
419
420 marc_indicators('246', 1, 3);
421 marc('246','a',
422         rec('532')
423 );
424
425 ### 655
426
427 marc_indicators('655', ' ', 4);
428 marc('655','a',
429         rec('608')
430 );
431
432 ### 653
433
434 marc_indicators('653', 0, ' ');
435 marc('653','a',
436         rec('610')
437 );
438
439 #_debug(2);
440
441
442 ### 700
443
444 marc_indicators('700', 1, ' ');
445
446 if ( rec('701') ) { 
447 marc('700','4', 
448         'aut'
449 ); 
450 }
451
452 marc('700','a',
453         join_with(', ',
454                 rec('701', 'a'),
455                 rec('701', 'b')
456         )
457 );
458
459 marc('700','a',
460         join_with(', ',
461                 rec('701', 'c'),
462                 rec('701', 'd')
463         )
464 );
465
466 marc('700','a',
467         join_with(', ',
468                 rec('701', 'e'),
469                 rec('701', 'f')
470         )
471 );
472
473 marc('700','a',
474         join_with(', ',
475                 rec('701', 'g'),
476                 rec('701', 'h')
477         )
478 );
479
480
481 marc('700','a',
482         rec('702','a'),
483 );
484
485
486 # ako je u originalu ponovljivo polje treba biti i konvertirano u ponovljivo !!
487
488
489 marc('700','a',
490         join_with(', ',
491                 rec('702','c'),
492                 rec('702','d')
493         )
494 );
495
496 marc('700','a',
497         join_with(', ',
498                 rec('702','e'),
499                 rec('702','f')
500         )
501 );
502
503 marc('700','a',
504         join_with(', ',
505                 rec('702','g'),
506                 rec('702','h')
507         )
508 );
509
510 ## 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?
511 #
512 # marc('700','a',
513 #       rec('330','a')
514 # );
515
516
517 # marc('700','a',
518 #       rec('330','b')
519 # );
520
521 # marc('700','a',
522 #       rec('330','c')
523 # );
524
525
526 # marc('700','a',
527 #       rec('330','d')
528 # );
529
530 # marc('700','a',
531 #       rec('330','e')
532 # );
533
534 # marc('700','a',
535 #       rec('330','f')
536 # );
537  
538 #_debug(0);
539
540
541
542
543 ### 740
544
545 marc_indicators('740', 0, ' ');
546
547 # if ( ! rec('464') ) {
548 # marc('740','a',
549 #       rec('200','c')
550 # );
551
552  marc('740','a',
553         rec('200','k')
554  );
555
556 # } else {
557
558 #marc('740','a',
559 #       rec('464','a')
560 #);
561
562 # };
563
564 ### generiranje zapisa o nakladnièkoj cjelini i povezivanje podreðenog zapisa s nadreðenim
565
566
567 my $series_key = join_with('',
568         rec('225','a'),
569         rec('210','a'),
570         rec('210','b'),
571 );
572
573 if ($series_key) {
574
575         marc_indicators('760', 0, ' ');
576         
577         marc('760','w',
578                 get( $series_key )
579         );
580
581 }
582
583 ### testing
584 #
585 # my $dup_key = join_with('',
586 #       rec('200','a'),
587 #);
588 #
589 #if ($dup_key) {
590 #       marc('995','a',
591 #               get( $dup_key )
592 #       );
593 #}
594 #
595 #
596 # marc_indicators('776', 0, ' ');
597
598 # marc('776','a',
599 #       rec('452','1')
600 # );
601 #
602
603
604
605 ##################################
606 ##                              ##
607 ## pomoæni ispisi - privremeno! ##
608 ##                              ##
609 ##################################
610
611 if ( ! rec('464') && rec('200','c') ) {
612         marc('002',
613                 'ima-200c-nema-464'
614         );
615 }
616
617 if ( ! rec('464') && rec('200','k') ) {
618         marc('003',
619                 'ima-200k-nema-464'
620         );
621 }
622
623 if ( ! ( rec('200','c') || rec('200','k') ) && rec('464') ) {
624         marc('004',
625                 'ima-464-nema-200c-ili-200k'
626         );
627 }
628
629
630
631 #_debug(2);
632
633 if ( rec('200') =~ m/prev/ ) {
634         marc('005',
635                 'prijevod'
636         );
637 }
638
639 #_debug(0);
640
641
642
643 } # polje 200a