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