/[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 1064 - (show annotations)
Tue Nov 27 21:02:15 2007 UTC (16 years, 5 months ago) by dpavlin
File MIME type: text/plain
File size: 14158 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 FFZG'
157 );
158
159 marc('040','b',
160 'hrv'
161 );
162
163 marc('040','e',
164 'HR PPIAK'
165 );
166
167
168 ### 041 - indikatori
169 ## pretpostavke o indikatorima
170 ## 1. Ako postoji polje 300 i ono sadr¾i /Prijevod/ ili /Izv. stv. nasl./, i1 = 1
171 ## (Da li je napomena uvijek pisana?)
172 ## 2. Podatak o prevodiocu u 200g. Problem: razlièiti oblici rijeèi, razlièiti jezici.
173 ## 3. Ako u UDK oznaci postoji "=", bez zagrada, onda je to prijevod
174 ## (ako postoje zagrade pr. 94(=411.16) onda su to pomoæne oznake)
175 ## pr. 821.111-2=163.42 je prijevod engleske drame na HR.
176 ## to ima samo za knji¾evna djela, eseje....
177 ## ????
178
179 #if ( rec('675') =~ m/\d=\d/ ) ??
180
181 if (
182 grep( m/[prijevod|prevedeno|izv.*stv.*nasl|izvornik]/i, rec('300') ) ||
183 grep( m/[preve|prijevod]/i, rec('200','f')) ||
184 grep( m/[preve|prijevod]/i, rec('200','g'))
185 ) {
186 marc_indicators('041', 1, ' ');
187 } else {
188 marc_indicators('041', 0, ' ');
189 }
190
191 ### 041
192 ## ponovljivo polje (101) konvertira se u ponovljivo potpolje (041a)
193
194 #_debug(2);
195
196 marc_repeatable_subfield('041','a',
197 map { lc($_) } rec('101')
198 );
199
200 #_debug(0);
201
202 ### 044
203 ## kako dobiti zemlju izdavanja?
204
205 ### 080
206 ## 675 podpolja b, c, d ... - ¹to s njima? - provjeriti za svaku bazu
207
208 marc('080','a',
209 rec('675','a')
210 );
211
212 marc('080','a',
213 rec('675','b')
214 );
215
216 marc('080','a',
217 rec('675','c')
218 );
219
220 marc('080','a',
221 rec('675','d')
222 );
223
224
225 ### 084 - other classification (R)
226 ## NSK ga koristi za struènu oznaku NSK iz polja 681
227 ## NSK konvertira polje 686 u 084, u skladu s LOC konv. tablicom
228 ## polje 686 koristi FFPS. jo¹ netko?
229
230 marc('084','a',
231 rec('686')
232 );
233
234 ### 100
235 ## I1 = 0 ako je pseudonim (ima 700a, nema 700b)
236
237 if ( rec('700','a') && ! rec('700','b') ) {
238 marc_indicators('100', 0, ' ');
239 } else {
240 marc_indicators('100', 1, ' ');
241 }
242
243 marc('100','a',
244 join_with(', ',
245 rec('700', 'a'),
246 rec('700', 'b')
247 )
248 );
249
250
251 ### 111 i 110
252 ## konverzija u 110 ili 111 ovisno o postojanju/nepostojanju nekih polja - provjeriti ispise naslova iz svake baze - moguæe su gre¹ke.
253
254 # ovo vrijedi za FFSFB
255 if ( rec('710','d') || rec('710','e') || rec('710','f') ) {
256
257 marc_indicators('111', 2, ' ');
258
259 marc_compose('111',
260 'a', suffix(
261 rec('710','b') ? '.' :
262 '',
263 rec('710','a'),
264 ),
265 'e', rec('710','b'),
266 'n', prefix(
267 rec('710','d') ? '(' :
268 '',
269 rec('710','d')
270 ),
271 'd', prefix(
272 ( ! rec('710','d') ) ? '(' :
273 ( ! rec('710','e') ) ? '(' :
274 '; ',
275 rec('710','f'),
276 ),
277 'c', prefix(
278 ( rec('710','e') && ( rec('710','d') || rec('710','f') ) ) ? '; ' :
279 ( ! rec('710','d') && ! rec('710','f') ) ? '(' :
280 '',
281 rec('710','e'),
282 ),
283 '+',')',
284 );
285
286
287 } else {
288
289 marc_indicators('110', 2, ' ');
290
291 marc('110','a',
292 rec('710','a')
293 );
294
295 marc('110','b',
296 rec('710','b')
297 );
298
299 if ( rec('710','c') ) {
300 marc('110','c',
301 surround('(', ')', rec('710','c'))
302 );
303 }
304
305 }
306
307
308 ### 245 indikatori
309 ## i1 = 0 za anonimne publikacije, i1 = 1 ako postoji 700 ili 710
310 ## i2 = pretpostavlja se na temelju èlana na poèetku naslova i jezika
311 ## treba provjeriti
312
313 my $i1;
314
315 if ( rec('700') || rec('710') ) {
316 $i1 = 1;
317
318 } else {
319 $i1 = 0;
320 }
321
322 marc_indicators('245', $i1, 0);
323
324 if ( rec('200','a') =~ m/^Einen / ) {
325 marc_indicators('245', $i1, 6);
326 }
327
328 if ( rec('200','a') =~ m/^Eine / ) {
329 marc_indicators('245', $i1, 5);
330 }
331
332 if ( rec('200','a') =~ m/^(Die|Das|Der|Ein|Les|The) / ) {
333 marc_indicators('245', $i1, 4);
334 }
335
336 if ( rec('200','a') =~ m/^(Um|Un|An|La|Le|Il) / ) {
337 marc_indicators('245', $i1, 3);
338 }
339
340 if ( rec('200','a') =~ m/^(A|L') / ) {
341 marc_indicators('245', $i1, 2);
342 }
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, provjeriti
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', ' ', 3);
471 }
472
473 #_debug(3);
474
475 ### 440
476
477 marc_template(
478 from => 225, to => 440,
479 subfields_rename => [
480 'a' => 'a',
481 'x' => 'x',
482 'v' => 'v',
483 'h' => 'n',
484 'i' => 'p',
485 'w' => 'v',
486 ],
487 isis_template => [
488 'a.|h,|i ;|w',
489 'a.|h.|w',
490 'a.|i ;|w',
491 'a ;|v.|i',
492 'a ;|v.|i ;|w',
493 'a ;|v.|h,|i ;|w',
494 'a ;|v.|h ;|w',
495 'a ;|v ;|w',
496 #mozda greska:
497 'a ;|v,|x ;|w',
498 'a,|x ;|v',
499 'a,|x.|p ;|w',
500 ],
501 marc_template => [
502 'a',
503 'a ;|v',
504 'a,|x',
505 'a.|n', # mozda greska
506 'a.|n,|p',
507 'a.|p',
508 'a ;|v.|n',
509 'a ;|v.|n,|p', # mozda greska
510 'v',
511 'x',
512 ],
513 );
514
515
516 ## 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)
517
518 #marc_compose('440',
519 # 'a', suffix(
520 # ( rec('225','v') ) ? ' ;' :
521 # ( rec('225','w') ) ? ' ; ' :
522 # ( rec('225','x') ) ? ',' :
523 # ( rec('225','h') || rec('225','i') ) ? '.' :
524 # '.',
525 # frec('225','a')
526 # ),
527 # 'x',suffix(
528 # ( rec('225','x') && ( rec('225','h') || rec('225','i') ) ) ? '.' :
529 # '',
530 # frec('225','x')
531 # ),
532 # 'v',suffix(
533 # ( rec('225','v') && ( rec('225','h') || rec('225','i') ) ) ? '.' :
534 # ( rec('225','v') && rec('225','w') ) ? ' ; ' :
535 # '',
536 # frec('225','v')
537 # ),
538 # 'n',suffix(
539 # ( rec('225','h') && rec('225','i') ) ? ',' :
540 # ( rec('225','h') && rec('225','w') ) ? ' ; ' :
541 # '',
542 # frec('225','h')
543 # ),
544 # 'p',suffix(
545 # ( rec('225','i') && rec('225','w') ) ? ' ; ' :
546 # ( rec('225','i') && rec('225','x') ) ? ',' :
547 # '',
548 # frec('225','i')
549 # ),
550 ## 225w treba ici u 440v, na kraj
551 # '+', join_with(' ; ',
552 # rec('225','w'),
553 # )
554 #);
555
556 #marc_original_order('440','225');
557
558
559 #if (
560 # count( lookup(
561 # sub { 1 },
562 # 'ffps','libri',
563 # sub { rec('225','a') }
564 # ) ) > 1
565 #) {
566
567
568 #_debug(0);
569
570
571 ### 500
572
573 marc('500','a',
574 rec('300')
575 );
576
577 marc('500','a',
578 rec('305')
579 );
580
581 marc('500','a',
582 rec('307')
583 );
584
585 marc('500','a',
586 rec('314')
587 );
588
589 ### 502 - bilje¹ka o disertacijama
590 ## odgovarajuæeg polja nema u originalnim podacima. mo¾da se mo¾e pretpostaviti?
591
592 ### 504
593
594 marc('504','a',
595 rec('320')
596 );
597
598 ### 505
599 ## FFPS 327 - sadrzaj
600 ## NSK konvertira 327 (NP) u 501 (R)
601 ## u LOC konv. tablici stoji 327 (NP) u 505 (NR)
602 ## standard i validacije dopu¹taju 501 (R) i 505 (R)
603
604 if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) {
605 marc_indicators('505', '0', ' ');
606 marc('505','a',
607 regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
608 rec('327')
609 )
610 );
611 }
612
613 if ( config() =~ m/ffan/ ) {
614 marc_indicators('505', '0', ' ');
615 marc('505','a',
616 regex('s/[<>]//g',
617 rec('330')
618 )
619 );
620 }
621
622
623
624
625 ### 520
626 ## NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
627 ## FFPS 330 (NP) - sa¾etak
628
629 if ( config() =~ m/ffps/ ) {
630 marc('520','a',
631 regex('s/[\\r\\n]+/. /g',
632 rec('330')
633 )
634 );
635 }
636
637 ### 526 - STUDY PROGRAM INFORMATION NOTE
638 ## provjeriti za svaku bazu sta je u 996?
639
640 marc_indicators('526', 8, ' ');
641
642 marc('526','a',
643 rec('996')
644 );
645
646 ### 538 - zahtjevi sustava
647
648 marc('538','a',
649 rec('337','a')
650 );
651
652 ### 655
653
654 marc_indicators('655', ' ', 4);
655 marc('655','a',
656 rec('608')
657 );
658
659 ### 653
660
661 marc_indicators('653', 0, ' ');
662 marc('653','a',
663 rec('610')
664 );
665
666 #_debug(2);
667
668
669 ### 700
670 ## ako je u originalu ponovljivo polje treba biti i konvertirano u ponovljivo !!
671
672 marc_indicators('700', 1, ' ');
673
674 if ( rec('701') ) {
675 marc('700','4',
676 'aut'
677 );
678 }
679
680 marc('700','a',
681 join_with(', ',
682 rec('701', 'a'),
683 rec('701', 'b')
684 )
685 );
686
687 marc('700','a',
688 join_with(', ',
689 rec('701', 'c'),
690 rec('701', 'd')
691 )
692 );
693
694 marc('700','a',
695 join_with(', ',
696 rec('701', 'e'),
697 rec('701', 'f')
698 )
699 );
700
701 marc('700','a',
702 join_with(', ',
703 rec('701', 'g'),
704 rec('701', 'h')
705 )
706 );
707
708
709 marc('700','a',
710 join_with(', ',
711 rec('702', 'a'),
712 rec('702', 'b')
713 )
714 );
715
716 marc('700','a',
717 join_with(', ',
718 rec('702','c'),
719 rec('702','d')
720 )
721 );
722
723 marc('700','a',
724 join_with(', ',
725 rec('702','e'),
726 rec('702','f')
727 )
728 );
729
730 marc('700','a',
731 join_with(', ',
732 rec('702','g'),
733 rec('702','h')
734 )
735 );
736
737 #_debug(0);
738
739
740 ### 740 - nadopuniti
741
742 marc_indicators('740', 0, ' ');
743
744 # if ( ! rec('464') ) {
745 # marc('740','a',
746 # rec('200','c')
747 # );
748
749 marc('740','a',
750 rec('200','k')
751 );
752
753 # } else {
754
755 #marc('740','a',
756 # rec('464','a')
757 #);
758
759 # };
760
761
762 ### 760 w
763 ## generiranje zapisa o nakladnièkoj cjelini i povezivanje podreðenog zapisa s nadreðenim
764
765 #if (
766 # rec('225','a') # da li je nakladnièka cjelina?
767 #) {
768 #
769 #my $series_key =
770 #join_with('',
771 # rec('225','a'),
772 # rec('210','a'),
773 # rec('210','b'),
774 #);
775 #
776 #my $series = get( $series_key );
777 #
778 #if ($series) {
779 # warn "nije novi";
780 #} else {
781 #
782 #$series = join_with('',
783 # uc( config() ),
784 # ' LS',
785 # rec('000')
786 #);
787 #
788 #set( $series_key => $series );
789 #
790 #} # $series
791 #} # nakladnièka cjelina
792 #
793 #my $series_key = join_with('',
794 # rec('225','a'),
795 # rec('210','a'),
796 # rec('210','b'),
797 #);
798 #
799 #if ($series_key) {
800 #
801 # marc_indicators('760', 0, ' ');
802 #
803 # marc('760','w',
804 # get( $series_key )
805 # );
806 #}
807
808 # ## testing
809 #
810 # my $dup_key = join_with('',
811 # rec('200','a'),
812 #);
813 #
814 #if ($dup_key) {
815 # marc('995','a',
816 # get( $dup_key )
817 # );
818 #}
819 #
820 #
821 # marc_indicators('776', 0, ' ');
822 #
823 # marc('776','a',
824 # rec('452','1')
825 # );
826 #
827
828
829 ### 852 - signatura
830
831 marc_indicators('852', 4, ' ');
832
833 marc('852','j',
834 join_with(' ',
835 rec('990')
836 )
837 );
838
839 ### 876 - item information - basic bibliographic unit
840
841 marc('876','a',
842 rec('991'),
843 );
844
845 ### 886 - former marc
846
847 marc_indicators('886', 2, ' ');
848
849 marc('886','2',
850 'ffmarc'
851 );
852
853 marc('886','a',
854 '994'
855 );
856
857 marc('886','b',
858 join_with(''.
859 '##^a',
860 join_with('',
861 prefix('^a',
862 rec('994','a'),
863 ),
864 prefix('^b',
865 rec('994','b')
866 )
867 )
868 )
869 );
870
871
872 } # polje 200a

  ViewVC Help
Powered by ViewVC 1.1.26