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

  ViewVC Help
Powered by ViewVC 1.1.26