/[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 824 - (show annotations)
Fri May 18 20:27:21 2007 UTC (16 years, 11 months ago) by dpavlin
File MIME type: text/plain
File size: 11331 byte(s)
local

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

  ViewVC Help
Powered by ViewVC 1.1.26