/[webpac2]/trunk/conf/normalize/ff-libri.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/conf/normalize/ff-libri.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 876 - (show annotations)
Thu Aug 23 19:21:23 2007 UTC (16 years, 8 months ago) by dpavlin
File MIME type: text/plain
File size: 15096 byte(s)
local changes

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 # moguæa je i oznaka "m" u 06 - odrediti kriterije
23 marc_leader('06','a');
24 marc_leader('07','m');
25 marc_leader('18','i');
26
27 # pojasniti upotrebu 19 lidera!
28
29 if ( rec('230') ) {
30 marc_leader('19','r');
31 }
32
33 ### 001 - Voyager
34
35 ### Pojasniti upotrebu polja 006
36
37 ### 007
38 ### pojasniti upotrebu polja
39
40 marc_fixed('007',00,'ta');
41
42 ### 008
43
44 if ( rec('994','c') ) {
45 marc_fixed('008','00',
46 regex('s/^\d\d//',
47 rec('994','c')
48 ),
49 );
50 } else {
51 marc_fixed('008', 00,
52 '000101'
53 );
54 }
55
56 #warn( dump(
57 # regex('s/^\d\d//',
58 # rec('994','c')
59 # ),
60 #)
61 #);
62
63
64 marc_fixed('008','35',
65 first( lc(rec('101')) )
66 );
67
68
69 ### 020
70 # postoji modify -> drugi ISBN poèinje prefixom "ISBN" koji se mièe (sfb)
71
72 marc('020','a',
73 regex('s/ ISBN //g',
74 rec('10')
75 )
76 );
77
78
79 ### 035$6
80 # Privemeno koristimo 035$6 umjesto 035$9, zato ¹to marclint prijavljuje 9 kao gre¹ku.
81 # marc 035a - System Number - NSK zapisuje Voyagerov ID (001)
82 # kako mora izgledati polje 035$9? mo¾e li sadr¾avati slova i razmake?
83
84 marc('035','6',
85 join_with('',
86 # config('input normalize path'),
87 # config('name'),
88 config(),
89 ' L',
90 # config('input name'),
91 # id(),
92 # rec('994','a'),
93 rec('000')
94 )
95 );
96
97
98
99 ### 040
100 # za sve je isti
101 # treba utvrditi toènu oznaku za ustanovu
102
103 marc('040','a',
104 'HR FFZG'
105 );
106
107 marc('040','b',
108 'hrv'
109 );
110
111 marc('040','e',
112 'HR PPIAK'
113 );
114
115
116 ### 041 indikatori
117 # pretpostavke o indikatorima:
118 #
119 # 1. Ako postoji polje 300 i ono sadr¾i /Prijevod/ ili /Izv. stv. nasl./, i1 = 1
120 # (Da li je napomena uvijek pisana?)
121 #
122 # 2. Podatak o prevodiocu u 200g. Problem: razlièiti oblici rijeèi, razlièiti jezici.
123 #
124 # 3. Ako u UDK oznaci postoji "=", bez zagrada, onda je to prijevod
125 # (ako postoje zagrade pr. 94(=411.16) onda su to pomoæne oznake)
126 # pr. 821.111-2=163.42 je prijevod engleske drame na HR.
127 # to ima samo za knji¾evna djela, eseje....
128 # ????
129
130
131 #if ( rec('675') =~ m/\d=\d/ ) {
132 if ( grep( m/prijevod/i, rec('300')) || grep( m/prevedeno/i, rec('300')) || grep( m/izv.*stv.*nasl/i, rec('300')) || grep( m/izvornik/i, rec('300')) || grep( m/preve/i, rec('200','f')) || grep( m/preve/i, rec('200','g')) || grep( m/prijevod/i, rec('200','f')) || grep( m/prijevod/i, rec('200','g')) ) {
133 marc_indicators('041', 1, ' ');
134 } else {
135 marc_indicators('041', 0, ' ');
136 }
137
138
139 ### 041
140 # ponovljivo polje konvertira se u ponovljivo potpolje
141
142 #_debug(2);
143 marc_repeatable_subfield('041','a',
144 rec('101')
145 );
146 #_debug(0);
147
148 ### 044
149
150
151 ### 080
152 # 675 podpolja b, c, d ... - ¹to s njima ???
153
154 marc('080','a',
155 rec('675','a')
156 );
157
158 marc('080','a',
159 rec('675','b')
160 );
161
162 marc('080','a',
163 rec('675','c')
164 );
165
166 marc('080','a',
167 rec('675','d')
168 );
169
170
171 ### 084 - other classification (R)
172 # NSK ga koristi za struènu oznaku NSK iz polja 681
173 # NSK definira i prelazak polja 686 u 084, u skladu s LOC konv. tablicom
174 # polje 686 koristi FFPS
175
176
177 marc('084','a',
178 rec('686')
179 );
180
181 ### 100
182 # I1 = 0 ako je pseudonim (ima 700a, nema 700b)
183
184 if ( rec('700','a') && ! rec('700','b') ) {
185 marc_indicators('100', 0, ' ');
186 } else {
187 marc_indicators('100', 1, ' ');
188 }
189
190 marc('100','a',
191 join_with(', ',
192 rec('700', 'a'),
193 rec('700', 'b')
194 )
195 );
196
197
198 ### 111 i 110
199 # provjeriti ispise naslova iz svake baze - moguæe su gre¹ke.
200 # ovo vrijedi za FFSFB
201
202 if ( rec('710','d') || rec('710','e') || rec('710','f') ) {
203
204 marc_indicators('111', 2, ' ');
205
206 marc_compose('111',
207 'a', suffix(
208 rec('710','b') ? '.' :
209 '',
210 rec('710','a'),
211 ),
212 'e', rec('710','b'),
213 'n', prefix(
214 rec('710','d') ? '(' :
215 '',
216 rec('710','d')
217 ),
218 'd', prefix(
219 ( ! rec('710','d') ) ? '(' :
220 ( ! rec('710','e') ) ? '(' :
221 '; ',
222 rec('710','f'),
223 ),
224 'c', prefix(
225 ( rec('710','e') && ( rec('710','d') || rec('710','f') ) ) ? '; ' :
226 ( ! rec('710','d') && ! rec('710','f') ) ? '(' :
227 '',
228 rec('710','e'),
229 ),
230 '+',')',
231 );
232
233
234 } else {
235
236 marc_indicators('110', 2, ' ');
237
238 marc('110','a',
239 rec('710','a')
240 );
241
242 marc('110','b',
243 rec('710','b')
244 );
245 if ( rec('710','c') ) {
246 marc('110','c',
247 surround('(', ')', rec('710','c'))
248 );
249 }
250
251 }
252
253
254 ### 245 indikatori
255 # i1 = 0 za anonimne publikacije, i1 = 1 ako postoji 700 ili 710
256 # i2 = pretpostavlja se na temelju èlana na poèetku naslova i jezika
257 # treba nadopuniti i dati podatke na verifikaciju knji¾nièarima
258
259 my $i1;
260
261 if ( rec('700') || rec('710') ) {
262 $i1 = 1;
263
264 } else {
265 $i1 = 0;
266 }
267
268 marc_indicators('245', $i1, 0);
269
270 if ( ( rec('200','a') =~ m/^Die /) ||
271 ( rec('200','a') =~ m/^Das /) ||
272 ( rec('200','a') =~ m/^Der /) ||
273 ( rec('200','a') =~ m/^The /) ) {
274 marc_indicators('245', $i1, 4);
275 }
276
277 if ( ( rec('200','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
278 marc_indicators('245', $i1, 2);
279 }
280
281 if ( ( rec('200','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
282 marc_indicators('245', $i1, 2);
283 }
284
285 ### 245
286 # podpolja i interpunkcije pripremljeni u modify
287
288 #_debug(3);
289
290 marc_compose('245',
291 'a', suffix(
292 ( ! ( rec('200','d') || rec('200','e') || rec('200','k') ) ) && ( rec('200','f') ) ? ' / ' :
293 ( rec('200','d') ) ? ' = ' :
294 ( rec('200','e') ) ? ' : ' :
295 ( rec('200','k') ) ? ' ; ' :
296 '',
297 rec('200','a'),
298 ),
299 'b', suffix(
300 ( rec('200','d') && rec('200','f') ) ? ' / ' :
301 ( rec('200','d') && rec('200','c') ) ? '. ' :
302 '',
303 rec('200','d'),
304 ),
305 'b', suffix(
306 ( rec('200','e') && rec('200','f') ) ? ' / ' :
307 ( rec('200','e') && rec('200','c') ) ? '. ' :
308 '',
309 rec('200','e'),
310 ),
311 'b', suffix(
312 ( rec('200','k') && rec('200','f') ) ? ' / ' :
313 ( rec('200','k') && rec('200','c') ) ? '. ' :
314 '',
315 rec('200','k'),
316 ),
317 'c', suffix(
318 ( rec('200','f') && rec('200','c') ) ? '. ' :
319 '',
320 rec('200','f'),
321 ),
322 '+', rec('200','c'),
323 );
324
325 #marc_compose('245',
326 # 'a', suffix(
327 # ( ! rec('200','p') && ( rec('200','f') || rec('200','c') ) ) ? ' / ' :
328 # ( ! rec('200','p') && rec('200','c') ) ? ' : ' :
329 # '',
330 # rec('200','a'),
331 # ),
332 # 'b', suffix(
333 # ( rec('200','p') && rec('200','f') ) ? ' / ' :
334 # ( rec('200','p') && rec('200','c') ) ? '. ' :
335 # '',
336 # rec('200','p'),
337 # ),
338 # 'c', suffix(
339 # ( rec('200','f') && rec('200','c') ) ? '. ' :
340 # '',
341 # rec('200','f'),
342 # ),
343 # '+', rec('200','c'),
344 #);
345
346 #_debug(0);
347
348 #marc_compose('245',
349 # 'a', suffix(
350 # rec('200','b') ? '. ' :
351 # rec('200','k') ? ' ; ' :
352 # rec('200','d') ? ' = ' :
353 # rec('200','e') ? ' : ' :
354 # rec('200','f') ? ' / ' :
355 # '.',
356 # rec('200','a')
357 # ),
358 ## 'h', rec('200','b'),
359 # 'b', suffix(
360 # ( rec('200','k') && rec('200','f') ) ? ' / ' :
361 # ' ',
362 # join_with(' ; ',
363 # rec('200','k'),
364 # ),
365 # ),
366 # 'b', suffix(
367 # ( rec('200','d') && rec('200','f') ) ? ' / ' :
368 # ' ',
369 # rec('200','d'),
370 # ),
371 # 'b', suffix(
372 # ( rec('200','e') && rec('200','f') ) ? ' / ' :
373 # ' ',
374 # join_with(' : ',
375 # rec('200','e'),
376 # ),
377 # ),
378 # 'c', rec('200','f'),
379 ### append to last subfield
380 # '+', prefix('. ',
381 # rec('200','c')
382 # ),
383 #);
384
385
386
387
388
389 ### 250
390 ## zapisima koji nemaju potpolje, dodaje se ^a u modify - provjeriti
391
392 marc_compose('250',
393 'a',suffix(
394 rec('205','f') ? ' / ' :
395 ' ',
396 rec('205','a')
397 ),
398 'b', rec('205','f'),
399 );
400
401
402
403 ### 260
404 # ponovljiva potpolja u originalnom redosljedu
405
406 marc_original_order('260', '210');
407
408
409 ### 300
410 # urediti interpunkcije za sve kombinacije
411
412 marc('300','a',
413 suffix(
414 rec('215','c') ? ' : ' :
415 rec('215','d') ? ' ; ' :
416 rec('215','e') ? ' + ' :
417 ' ',
418 rec('215','a')
419 )
420 );
421
422 marc('300','b',
423 suffix(
424 ( rec('215','c') && rec('215','d') ) ? ' ; ' :
425 ( rec('215','c') && rec('215','e') ) ? ' + ' :
426 ' ',
427 rec('215','c')
428 )
429 );
430
431 marc('300','c',
432 suffix(
433 rec('215','e') ? ' + ' :
434 ' ',
435 rec('215','d')
436 )
437 );
438
439 marc('300','e',
440 rec('215','e')
441 );
442
443 ### 362
444 # brojèani podaci za nakladnièku cjelinu
445
446 ### 440
447 # 2.ind. prema jeziku i èlanu
448
449 marc_indicators('440', ' ', '0');
450
451 if ( ( rec('225','a') =~ m/^Die /) ||
452 ( rec('225','a') =~ m/^Das /) ||
453 ( rec('225','a') =~ m/^The /) ) {
454 marc_indicators('440', ' ', 4);
455 }
456
457 if ( ( rec('225','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
458 marc_indicators('440', ' ', 2);
459 }
460
461 if ( ( rec('225','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
462 marc_indicators('440', ' ', 2);
463 }
464
465 #_debug(3);
466
467 marc_original_order('440','225');
468
469
470 #marc_compose('440',
471 # 'a', suffix(
472 # rec('225','i') ? '. ' :
473 # '',
474 # rec('225','a'),
475 # ),
476 # 'p', suffix(
477 # ( ! rec('225','x') && rec('225','i') && rec('225','v') ) ? ' ; ' :
478 # ( rec('225','i') && rec('225','x') ) ? ', ' :
479 # '',
480 # rec('225','i'),
481 # ),
482 # 'x', suffix(
483 # ( rec('225','x') && rec('225','v') ) ? ' ; ' :
484 # '',
485 # rec('225','x'),
486 # ),
487 # 'v', rec('225','v'),
488 #);
489
490 ## ovo radi samo kad 225 nije ponovljivo
491
492 #if (
493 # count( lookup(
494 # sub { 1 },
495 # 'ffps','libri',
496 # sub { rec('225','a') }
497 # ) ) > 1
498 #) {
499
500 #marc_compose('440',
501 # 'a', suffix(
502 # ( rec('225','x') ) ? ', ' :
503 # ( rec('225','v') || rec('225','w') ) ? ' ; ' :
504 # ( rec('225','h') || rec('225','i') ) ? '. ' :
505 # '',
506 # join_with(' / ',
507 # join_with(' : ',
508 # join_with(' = ',
509 # rec('225','a'),
510 # rec('225','d'),
511 # ),
512 # rec('225','e'),
513 # ),
514 # rec('225','f'),
515 # ),
516 # ),
517 # 'x', suffix(
518 # ( rec('225','x') && rec('225','v') ) ? ' ; ' :
519 # ( rec('225','x') && ( rec('225','h') || rec('225','i') ) ) ? '. ' :
520 # '',
521 # rec('225','x'),
522 # ),
523 # 'v', suffix(
524 # ( rec('225','v') && rec('225','h') || rec('225','i') ) ? '. ' :
525 # '',
526 # join_with('; ',
527 # rec('225','v'),
528 # )
529 # ),
530 # 'n', suffix(
531 # ( rec('225','h') && rec('225','p') || rec('225','y') ) ? ', ' :
532 # '',
533 # rec('225','h'),
534 # ),
535 # 'p', suffix(
536 # ( rec('225','i') && rec('225','x') ) ? ', ' :
537 # ( rec('225','i') && rec('225','v') ) ? ' ; ' :
538 # '',
539 # rec('225','i'),
540 # ),
541 # 'x', suffix(
542 # ( rec('225','y') && rec('225','v') ) ? ' ; ' :
543 # '',
544 # rec('225','y'),
545 # ),
546 # 'v', rec('225','w'),
547 # );
548 #
549 # marc_compose('440',
550 # 'a', suffix(
551 # rec('225','k') ? ' ; ' :
552 # '',
553 # join_with(' / ',
554 # rec('225','b'),
555 # rec('225','j')
556 # ),
557 # ),
558 # 'v',
559 # rec('225','k'),
560 # );
561 #
562 #
563 # marc_compose('440',
564 # 'a', suffix(
565 # rec('225','s') ? ' ; ' :
566 # '',
567 # join_with(' / ',
568 # rec('225','c'),
569 # rec('225','r')
570 # ),
571 # ),
572 # 'v',
573 # rec('225','s'),
574 # );
575
576 #}
577
578 #if ( rec('225','i') ) {
579 # marc('440','p',
580 # prefix('. ',
581 # rec('225','i')
582 # ),
583 # );
584 #}
585 #
586 #if ( rec('225','v') ) {
587 # marc('440','v',
588 # prefix(' ; ',
589 # rec('225','v'),
590 # ),
591 # );
592 #}
593
594 #_debug(0);
595
596
597 ### 50x
598
599 marc('500','a',
600 rec('300')
601 );
602
603 marc('500','a',
604 rec('305')
605 );
606
607 marc('500','a',
608 rec('307')
609 );
610
611 marc('500','a',
612 rec('314')
613 );
614
615 ### 502 - bilje¹ka o disertacijama
616 # odgovarajuæeg polja nema u originalnim podacima. mo¾da se mo¾e pretpostaviti?
617
618 ### 504
619
620 marc('504','a',
621 rec('320')
622 );
623
624 ## napomene uz konverziju polja 327 (sadrzaj):
625 # NSK konvertira 327 (NP) u 501 (R)
626 # u LOC konv. tablici stoji 327 (NP) u 505 (NR)
627 # standard i validacije dopu¹taju 501 (R) i 505 (R)
628
629 ## 505
630 ## FFPS 327 - sadrzaj
631
632 if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) {
633 marc_indicators('505', '0', ' ');
634 marc('505','a',
635 regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
636 rec('327')
637 )
638 );
639 }
640
641 if ( config() =~ m/ffan/ ) {
642 marc_indicators('505', '0', ' ');
643 marc('505','a',
644 regex('s/[<>]//g',
645 rec('330')
646 )
647 );
648 }
649
650
651
652 ## napomene uz konverziju polja 330:
653 # NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
654
655
656 ### 520
657 # mo¾da i polje 520y - jezik napomene ako je uvijek isti jezik
658
659 # FFPS 330 (NP) - sa¾etak
660 if ( config() =~ m/ffps/ ) {
661 marc('520','a',
662 regex('s/[\\r\\n]+/. /g',
663 rec('330')
664 )
665 );
666 }
667
668 ### 526 - STUDY PROGRAM INFORMATION NOTE
669
670 marc_indicators('526', 8, ' ');
671
672 marc('526','a',
673 rec('996')
674 );
675
676 ### 538 - zahtjevi sustava
677
678 marc('538','a',
679 rec('337','a')
680 );
681
682
683 ### 246
684
685 marc_indicators('246', 1, 3);
686 marc('246','a',
687 rec('532')
688 );
689
690 ### 655
691
692 marc_indicators('655', ' ', 4);
693 marc('655','a',
694 rec('608')
695 );
696
697 ### 653
698
699 marc_indicators('653', 0, ' ');
700 marc('653','a',
701 rec('610')
702 );
703
704 #_debug(2);
705
706
707 ### 700
708
709 marc_indicators('700', 1, ' ');
710
711 if ( rec('701') ) {
712 marc('700','4',
713 'aut'
714 );
715 }
716
717 marc('700','a',
718 join_with(', ',
719 rec('701', 'a'),
720 rec('701', 'b')
721 )
722 );
723
724 marc('700','a',
725 join_with(', ',
726 rec('701', 'c'),
727 rec('701', 'd')
728 )
729 );
730
731 marc('700','a',
732 join_with(', ',
733 rec('701', 'e'),
734 rec('701', 'f')
735 )
736 );
737
738 marc('700','a',
739 join_with(', ',
740 rec('701', 'g'),
741 rec('701', 'h')
742 )
743 );
744
745
746 marc('700','a',
747 join_with(', ',
748 rec('702', 'a'),
749 rec('702', 'b')
750 )
751 );
752
753
754 # ako je u originalu ponovljivo polje treba biti i konvertirano u ponovljivo !!
755
756
757 marc('700','a',
758 join_with(', ',
759 rec('702','c'),
760 rec('702','d')
761 )
762 );
763
764 marc('700','a',
765 join_with(', ',
766 rec('702','e'),
767 rec('702','f')
768 )
769 );
770
771 marc('700','a',
772 join_with(', ',
773 rec('702','g'),
774 rec('702','h')
775 )
776 );
777
778 ## 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?
779 #
780 # marc('700','a',
781 # rec('330','a')
782 # );
783 #
784 #
785 # marc('700','a',
786 # rec('330','b')
787 # );
788 #
789 # marc('700','a',
790 # rec('330','c')
791 # );
792 #
793 #
794 # marc('700','a',
795 # rec('330','d')
796 # );
797 #
798 # marc('700','a',
799 # rec('330','e')
800 # );
801 #
802 # marc('700','a',
803 # rec('330','f')
804 # );
805
806 #_debug(0);
807
808
809
810
811 ### 740
812
813 marc_indicators('740', 0, ' ');
814
815 # if ( ! rec('464') ) {
816 # marc('740','a',
817 # rec('200','c')
818 # );
819
820 marc('740','a',
821 rec('200','k')
822 );
823
824 # } else {
825
826 #marc('740','a',
827 # rec('464','a')
828 #);
829
830 # };
831
832 ### generiranje zapisa o nakladnièkoj cjelini i povezivanje podreðenog zapisa s nadreðenim
833
834 if (
835 rec('225','a') # da li je nakladnièka cjelina?
836 ) {
837
838 my $series_key =
839 join_with('',
840 rec('225','a'),
841 rec('210','a'),
842 rec('210','b'),
843 );
844
845 my $series = get( $series_key );
846
847 if ($series) {
848 warn "nije novi";
849 } else {
850
851 $series = join_with('',
852 config(),
853 'LS',
854 rec('000')
855 );
856
857 set( $series_key => $series );
858
859 } # $series
860 } # nakladnièka cjelina
861
862 my $series_key = join_with('',
863 rec('225','a'),
864 rec('210','a'),
865 rec('210','b'),
866 );
867
868 if ($series_key) {
869
870 marc_indicators('760', 0, ' ');
871
872 marc('760','w',
873 get( $series_key )
874 );
875 }
876 ### testing
877 #
878 # my $dup_key = join_with('',
879 # rec('200','a'),
880 #);
881 #
882 #if ($dup_key) {
883 # marc('995','a',
884 # get( $dup_key )
885 # );
886 #}
887 #
888 #
889 # marc_indicators('776', 0, ' ');
890 #
891 # marc('776','a',
892 # rec('452','1')
893 # );
894 #
895
896
897 ## 852 - lokacija
898
899 marc_indicators('852', 4, ' ');
900
901 marc('852','j',
902 join_with(' ',
903 rec('990')
904 )
905 );
906
907 ## 876 - item information - basic bibliographic unit
908
909 marc('876','a',
910 rec('991'),
911 );
912
913 ## 886 - former marc
914
915 marc_indicators('886', 2, ' ');
916
917 marc('886','2',
918 'ffmarc'
919 );
920
921 marc('886','a',
922 '994'
923 );
924
925 marc('886','b',
926 join_with(''.
927 '##^a',
928 join_with('',
929 prefix('^a',
930 rec('994','a'),
931 ),
932 prefix('^b',
933 rec('994','b')
934 )
935 )
936 )
937 );
938
939
940 } # polje 200a

  ViewVC Help
Powered by ViewVC 1.1.26