configuration files for FF journals databases conversion
[webpac2] / conf / ffcasopisi / peri2marc.pl
1 if ( rec('200','a') ) {
2
3 ### LEADER
4
5 ## LDR 05 - n - new
6 marc_leader('05','n');
7
8 ## LDR 06 - a - language material 
9 marc_leader('06','a');
10
11 ## LDR 07 - Bibliographic level 
12 #  izvuci podatke iz tablice (za po i sf)
13
14 if ( rec('225','a') ) {
15         marc_leader('07','d');  
16 } else {
17         marc_leader('07','s');  
18 }
19
20 ## LDR 17 - Encoding level ; 7 - minimal level, u - unknown
21 marc_leader('17','u');
22
23 ## LDR 18 - i - isbd 
24 marc_leader('18','i');
25
26
27 ## LDR 19 - Multipart resource record level ; # - Not specified or not applicable, a - Set, b - Part with independent title, c - Part with dependent title 
28 # tematski brojevi imaju vezu u 
29
30 if ( rec('225','a') ) {
31         marc_leader('19','a');
32 }
33
34 ### 008 - All materials
35
36 marc_fixed('008','00', '010101');       # 00-05 - Date entered on file
37
38 ## za 008 06 treba i lookup u tablicu gdje postoji podatak o tome jel tekuci casopis ili nije?
39 ## c - Continuing resource currently published
40 ## d - Continuing resource ceased publication
41
42 my $year = rec('210','c');
43
44 #if ( rec('210','c') ) {
45 #       marc_fixed('008','06','s');             # 06 - Type of date/Publication status, s = single know date
46 #       
47 ##      warn "## year = $year";
48 #
49 #       if ( $year =~ m/^(\d{4})/ ) {
50 ##      warn "## $1 ##\n";
51 #               marc_fixed('008','07',$1);              # 07-10 - Date 1
52 #       }
53 #
54 #       if ( $year =~ m/^\d{4}-(\d{4})/ ) {
55 ##      warn "## $1 ##";
56 #               marc_fixed('008','11',$1);              # 11-14 - Date 2 
57 #               marc_fixed('008','06','d');
58 #       }
59 #       
60 #} else {
61 #       marc_fixed('008','06','n');             # 06 - n = unknown date
62 #}
63
64 if ( rec('210','c') ) {
65         my $d1 = '';
66         my $d2 = '';
67         if ( rec('210','c') =~ m/(\d{4})-/ ) {
68                 marc_fixed('008','06','m');
69                 if ( rec('210','c') =~ m/(\d{4})-/ ) {
70                         $d1 = $1;
71                         $d2 = '9999';
72                 }
73                 if ( rec('210','c') =~ m/-(\d{4})/ ) {
74                         $d2 = $1;
75                 }
76         } else {
77                 marc_fixed('008','06','s');
78                 if ( rec('210','c') =~ m/(\d{4})/ ) {
79                         $d1 = $1;
80                 }
81                 if ( rec('210','c') =~ m/(\d{2})(--|__)/ ) {
82                         $d1 = $1.'uu';
83                 } 
84                 if ( rec('210','c') =~ m/(\d{3})(-|_)/ ) {
85                         $d1 = $1.'u';
86                 }
87         }
88         marc_fixed('008','07',$d1);             # 07-10 - Date 1
89         marc_fixed('008','11',$d2);             # 07-10 - Date 1
90 } else {
91         marc_fixed('008','06','n');             # 06 - n = unknown date
92         marc_fixed('008','07','uuuu');
93 }
94
95 marc_fixed('008','15',                  # 15-17 - Place of publication, production, or execution
96         lc ( rec('102') ) 
97 );
98
99
100
101 marc_fixed('008','35',
102         first( lc(rec('101')) )         # 35-37 - Language
103 );
104                                         # 38 - Modified record
105                                         # 39 - Cataloging source
106
107 ### 008 - Continuing resources
108
109 if ( ! rec('225','a') ) {
110
111 marc_fixed('008','18', 'u');    # 18 - Frequency - ovo treba popuniti iz polja 326
112 marc_fixed('008','19', 'u');    # 19 - Regularity
113                                 # 20 - Undefined, ontains a blank (#) or fill character (|)
114
115 # za polje 008 21 treba lookup u tablicu:
116 marc_fixed('008','21', 'p');    # 21 - Type of continuing resource
117
118                                 # 22 - Form of original item - blank
119                                 # 23 - Form of item
120                                 # 24 - Nature of entire work
121                                 # 25-27 - Nature of contents
122                                 # 28 - Government publication
123                                 # 29 - Conference publication
124                                 # 30-32 - Undefined
125                                 # 33 - Original alphabet or script of title
126                                 # 34 - Entry convention
127
128
129 ## 022
130 # if ( ! rec('225','a') ) {
131 #       marc('022','a',
132 #               rec('11')
133 #       );
134 # }
135 #
136
137 ### 022
138
139 #if ( ! rec('225','a') ) {
140         marc('022','a',
141                 rec('11')
142         );
143 #}
144
145 ### 035$6
146 # privemeno koristimo 0356 umjesto 0359, zato ¹to marclint 9 prijavljuje kao gre¹ku
147
148 my $id;
149
150 $id = ( 
151         join_with('',
152                 uc( config() ),
153                 ' P',
154                 rec('000')
155         )
156 );
157
158 marc('035','6', $id);
159
160 ### 040
161 # za sve je isti
162 # treba utvrditi toènu oznaku za ustanovu
163
164 marc('040','a',
165         'HR FFZG'
166 );
167
168 marc('040','b',
169         'hrv'
170 );
171
172 marc('040','e',
173         'HR PPIAK'
174 );
175
176 ### 041 - indikatori
177
178 marc_indicators('041', 0, ' ');
179
180 ### 041
181
182 marc_repeatable_subfield('041','a',
183         rec('101')
184 );
185
186
187 #_debug(3);
188
189 ### 044 - zemlja izdavanja
190
191 marc('044','a',
192         rec('102')
193 );
194
195 ### 080
196
197 marc('080','a',
198         rec('675','a')
199 );
200
201 ### 210 indikatori
202 # marc_indicators('210', '1',' ');
203
204 ### 210 - ABBREVIATED TITLE 
205 # pronaæi prikladan izvor podataka (nsk baza, issn baza)
206
207 ## iz nsk
208 #if ( rec('11') ) {
209 #marc('210','a',
210 #       lookup(
211 #               sub { rec('531','a') },
212 #               'nsk','bbaza',
213 #               sub { rec('011','a') },
214 #               sub { rec('11') },
215 #       ) 
216 #);
217 #}
218
219 ### 222 indikatori
220 # drugi indikator prema èlanu
221
222 marc_indicators('222',' ','0');
223
224 ### 222 - Key title
225 # pronaæi prikadan izvor podataka - nsk baza, issn baze
226
227 marc('222','a',
228         rec('530')
229 );
230
231 # iz nsk:
232 #if ( rec('11') ) {
233 #marc('222','a',
234 #       lookup(
235 #               sub { rec('530','a') },
236 #               'nsk','bbaza',
237 #               sub { rec('011','a') },
238 #               sub { rec('11') },
239 #       ) 
240 #);
241 #}
242
243 ### 245 indikatori
244 # generiraju se prema èlanu, trebalo bi mo¾da i prema jeziku (jezika nema uvijek). 
245 # potrebna naknadna kontrola
246
247 marc_indicators('245', 0, 0);
248
249 if (    ( rec('200','a') =~ m/^Die /) || 
250         ( rec('200','a') =~ m/^Das /) || 
251         ( rec('200','a') =~ m/^Der /) || 
252         ( rec('200','a') =~ m/^Les /) || 
253         ( rec('200','a') =~ m/^The /) ) {
254                 marc_indicators('245', 0, 4);
255
256
257
258 if (    ( rec('200','a') =~ m/^Un /) || 
259         ( rec('200','a') =~ m/^An /) ||
260         ( rec('200','a') =~ m/^La /) ||
261         ( rec('200','a') =~ m/^Le /) ||
262         ( rec('200','a') =~ m/^Il /) ) {
263                 marc_indicators('245', 0, 3);
264
265
266 if (    ( rec('200','a') =~ m/^A /) || 
267         ( rec('200','a') =~ m/^L'/) ) {
268                 marc_indicators('245', 0, 2);
269
270
271 ### 245
272
273 marc_compose('245',
274         'a', suffix(
275                 ( ! ( rec('200','d') || rec('200','e') || rec('200','k') ) ) && ( rec('200','f') ) ? ' /' :  
276                 ( rec('200','d') ) ? ' =' :
277                 ( rec('200','e') ) ? ' :' :
278                 ( rec('200','k') ) ? ' ;' :
279                         '', 
280                         rec('200','a'),
281         ),
282         'b', suffix(
283                 ( rec('200','d') && rec('200','f') ) ? ' /' : 
284                 ( rec('200','d') && rec('200','c') ) ? '.'  : 
285                         '',
286                         rec('200','d'),
287         ),
288         'b', suffix(
289                 ( rec('200','e') && rec('200','f') ) ? ' /' : 
290                 ( rec('200','e') && rec('200','c') ) ? '.'  : 
291                         '',
292                         rec('200','e'),
293         ),
294         'b', suffix(
295                 ( rec('200','k') && rec('200','f') ) ? ' /' : 
296                 ( rec('200','k') && rec('200','c') ) ? '.'  : 
297                         '',
298                         rec('200','k'),
299         ),
300         'c', suffix(
301                 ( rec('200','f') && rec('200','c') ) ? '.' :
302                         '',
303                         rec('200','f'),
304         ),
305         '+', suffix('.',
306                 rec('200','c'),
307         )
308 );
309
310 ### 246 inikatori
311 # prema jeziku - provjera
312
313 if (    ( rec('200','a') =~ m/^Die /) || 
314         ( rec('200','a') =~ m/^Das /) || 
315         ( rec('200','a') =~ m/^The /) ) {
316                 marc_indicators('246', 0, 4);
317 } else {
318         marc_indicators('246', 0, 0);
319 }
320
321 ### 246
322 # povuæi podatke iz prikladnog izvora (nsk, issn)
323
324 marc('246','a',
325         rec('532')
326 );
327
328 ## iz nsk:
329 #       marc('246','a',
330 #               lookup(
331 #                       sub { rec('532','a') },
332 #                       'nsk','bbaza',
333 #                       sub { rec('011','a') },
334 #                       sub { rec('11') },
335 #               )
336 #       );
337
338 #_debug(0);
339
340
341 ## 260 - izdavanje
342 # provjeriti interpunkcije !!, u NSK nesto ne stima
343
344 marc_original_order('260','210');
345
346 ## lookup u NSK:
347 # if ( rec('11') ) {
348 #       marc_repeatable_subfield('260','a',
349 #               lookup(
350 #                       sub { rec('210','a') },
351 #                       'nsk','bbaza',
352 #                       sub { rec('011','a') },
353 #                       sub { rec('11') },
354 #               ) 
355 #       );
356 #       marc_repeatable_subfield('260','b',
357 #               lookup(
358 #                       sub { rec('210','c') },
359 #                       'nsk','bbaza',
360 #                       sub { rec('011','a') },
361 #                       sub { rec('11') },
362 #               ) 
363 #       );
364 #       marc('260','c',
365 #               lookup(
366 #                       sub { rec('210','d') },
367 #                       'nsk','bbaza',
368 #                       sub { rec('011','a') },
369 #                       sub { rec('11') },
370 #               ) 
371 #       );
372 # } else {
373 #       marc_original_order('260', '210');
374 # }
375
376
377 ### 300
378
379 marc('300','a',
380         suffix(
381                 ( rec('215','a') && rec('215','c') )    ?  ' : ' :
382                 ( rec('215','a') && rec('215','d') )    ?  ' ; ' :
383                 ( rec('215','a') && rec('215','e') )    ?  ' + ' :
384                                    ' ',
385                         rec('215','a')
386         )
387 );
388
389 marc('300','b',
390         suffix(
391                 ( rec('215','c') && rec('215','d') )    ?  ' ; ' :
392                 ( rec('215','c') && rec('215','e') )    ?  ' + ' :
393                                                            ' ',
394                         rec('215','c')
395         )
396 );
397
398 marc('300','c',
399         suffix(
400                 rec('215','e') ? ' + ' :
401                                  ' ',
402                         rec('215','d')
403         )
404 );
405
406 marc('300','e',
407         rec('215','e')
408 );
409
410 ### 310 - current stated publication frequency
411 # potrebno ujednaèiti, koristi se i u polju 008
412
413 marc('310','a',
414         rec('326')
415 );
416
417 ### 321 - former frequency of either an item or an update to an item when a current frequency is contained in field 310
418
419 # marc('321','a',
420 #       ovo bi trebalo procitati iz NSK konvertiranih podataka
421 #);
422
423 marc_indicators('362', 0, ' ');
424
425 ### 362
426 #
427 if ( rec('207','a') ) {
428         marc('362','a',
429                 rec('207','a'),
430         );
431
432
433 ## lookup iz nsk
434 #else {
435 #       if ( rec('11') ) {
436 #               marc('362','a',
437 #                       lookup(
438 #                               sub { rec('207','a') },
439 #                               'nsk','bbaza',
440 #                               sub { first( rec('011','a') ) },
441 #                               sub { rec('11') },
442 #                       ) 
443 #               );
444 #       }
445 #}
446
447 ### 490 ind.
448
449 marc_indicators('490', '0', ' ');
450
451 ### 490
452
453 marc('490','a',
454         join_with('. ',
455                 join_with(' / ',
456                         join_with(' : ',
457                                 join_with(' = ',
458                                         rec('225','a'),
459                                         rec('225','d')
460                                 ),
461                                 rec('225','e')
462                         ),
463                         join_with(' ; ',
464                                 rec('225','f'),
465                                 rec('225','g')
466                         ),
467                 ),
468                 rec('225','h')
469         )
470 );
471
472 marc('490','v',
473         rec('225','v')
474 );
475
476 marc('490','x',
477         rec('225','x')
478 );
479
480 if ( rec('11') ) {
481         marc('999','a',
482                 lookup(
483                         sub { rec('110','a'), },
484                         'nsk','bbaza',
485                         sub { rec('011','a') }, 
486                         sub { rec('11') } 
487                 )
488         );
489 }
490
491
492 #marc('998','a',
493 #       lookup(
494 #               sub { rec('H') },
495 #               'ffsf','xls',
496 #               sub { rec('A') },
497 #               sub { $id },
498 #       ),
499 #);
500
501
502 ### 5xx
503 # koje podatke povuæi iz drugih baza?
504
505 marc('500','a',
506         rec('300','a'),
507 );
508  
509
510 ### 534 - napomena o pretisku
511
512 marc('534','a',
513         rec('324')
514 );
515
516 ## potencijalno za izvuæi iz NSK
517 #if ( rec('11') ) {
518 #marc('546','a',
519 #       lookup(
520 #               sub { rec('302','a') },
521 #               'nsk','bbaza',
522 #               sub { rec('011','a') },
523 #               sub { rec('11') },
524 #       ) 
525 #);
526 #
527 #marc('550','a',
528 #       lookup(
529 #               sub { rec('314','a') },
530 #               'nsk','bbaza',
531 #               sub { rec('011','a') },
532 #               sub { rec('11') },
533 #       ) 
534 #);
535 #
536 #marc('555','a',
537 #       lookup(
538 #               sub { rec('320','a') },
539 #               'nsk','bbaza',
540 #               sub { rec('011','a') },
541 #               sub { rec('11') },
542 #       ) 
543 #);
544 #
545 #
546 ## marc('562','a',
547 ##      lookup(
548 ##              sub { rec('316','a') },
549 ##              'nsk','bbaza',
550 ##              sub { rec('011','a') },
551 ##              sub { rec('11') },
552 ##      ) 
553 ## );
554 #}
555
556 ### 653 indikatori
557 marc_indicators('653', 0, ' ');
558
559 ### 653
560
561 marc('653','a',
562         rec('610')
563 );
564
565 # marc_indicators('655', ' ', 4);
566 # marc('655','a',
567 #       lookup(
568 #               sub { rec('608','a') },
569 #               'nsk','bbaza',
570 #               sub { rec('011','a') },
571 #               sub { rec('11') },
572 #       ) 
573 # );
574
575
576 #_debug(2);
577
578 ### 700 indikatori
579
580 marc_indicators('700', 1, ' ');
581
582 ### 700
583
584 marc('700','a',
585         rec('702','a'),
586 );
587
588 marc('700','a',
589         join_with(', ',
590                 rec('702','c'),
591                 rec('702','d')
592         )
593 );
594
595  
596 #_debug(0);
597
598 ### 710 indikatori
599
600 marc_indicators('710', '2', ' ');
601
602 ### 710
603 marc('710','a',
604         rec('710','a')
605 );
606
607 ### 770 indikatori
608
609 marc_indicators('770', 0, ' ');
610
611 ### 770
612 marc('770','t',
613         rec('421','a'),
614 );
615
616 ### 772 indikatori
617 marc_indicators('772', 0, ' ');
618
619 ### 772
620 marc('772','t',
621         rec('422','a'),
622 );
623
624 ### 773 indikatori
625
626 if ( rec('225','a') ) {
627
628 marc_indicators('773', 0, ' ');
629
630 ### 773
631 ## da li je bitan redoslijed potpolja?
632
633 marc('773','w',
634         lookup(
635                 sub { rec('000') },
636                 'ffsf','peri',
637                 sub { rec('200','a') },
638                 sub { 
639                         regex('s/ ; //g',
640                                 rec('225','a')
641                         )
642                 },
643         )
644 );
645
646 }
647
648
649 ### 777 indikatori
650
651 marc_indicators('777', 0, ' ');
652
653 ### 777
654
655 marc('777','t',
656         rec('423','a'),
657 );
658
659 ### 780 indikatori
660
661 marc_indicators('780', 0, 0);
662
663 ### 780
664 marc('780','t',
665         rec('430','a'),
666 );
667
668 ### 785 indikatori
669
670 marc_indicators('785', 0, 0);
671
672 ### 785
673 marc('785','t',
674         rec('440','a'),
675 );
676
677 ### 852
678
679 marc('852','j',
680         join_with(' ',
681                 rec('990')
682         )
683 );
684
685 ### 876
686
687 marc('876','a',
688         rec('991','a')
689 );
690
691 ### 992
692
693 marc('992','a',
694         join_with(' ; ', 
695                 rec('992')
696         )
697 );
698
699
700 ### polja za probu
701
702
703 #marc('998','a',
704 #       lookup(
705 #               sub { rec('200','a') },
706 #               'ffiz','peri',
707 #               sub { rec('200','a'), },
708 #               sub { rec('225','a'), }
709 #       )
710 #);
711
712  
713 # marc('997','a',
714 #       sort(
715 #               lookup(
716 #                       sub { rec('001') },
717 #                       'nsk','bbaza',
718 #                       sub { rec('011','a') },
719 #                       sub { rec('11') },
720 #               )
721 #       )
722 # );
723
724 # marc('998','a',
725 #       sort(
726 #               lookup(
727 #                       sub { rec('001') },
728 #                       'nsk','bbaza',
729 #                       sub { first(rec('200','a')) . first(rec('200','e')) },
730 #                       sub { rec('200','a') . rec('200','e') },
731 #               )
732 #       )
733 # );
734
735 # marc('998','a',
736 #       sort(
737 #               lookup(
738 #                       sub { rec('001') },
739 #                       'nsk','bbaza',
740 #                       sub { first(rec('200','a')) },
741 #                       sub { rec('200','a') },
742 #               )
743 #       )
744 # );
745
746 }# 200a