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