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

  ViewVC Help
Powered by ViewVC 1.1.26