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

  ViewVC Help
Powered by ViewVC 1.1.26