/[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 903 - (show annotations)
Wed Oct 10 21:00:48 2007 UTC (16 years, 7 months ago) by dpavlin
File MIME type: text/plain
File size: 14706 byte(s)
local configuration

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

  ViewVC Help
Powered by ViewVC 1.1.26