/[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 1020 - (show annotations)
Sat Nov 10 11:02:37 2007 UTC (16 years, 6 months ago) by dpavlin
File MIME type: text/plain
File size: 14879 byte(s)
local

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

  ViewVC Help
Powered by ViewVC 1.1.26