/[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 816 - (show annotations)
Thu Apr 5 21:48:41 2007 UTC (17 years ago) by dpavlin
File MIME type: text/plain
File size: 10725 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( 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/^The /) ) {
229 marc_indicators('245', $i1, 4);
230 }
231
232 if ( ( rec('200','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
233 marc_indicators('245', $i1, 2);
234 }
235
236 if ( ( rec('200','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
237 marc_indicators('245', $i1, 2);
238 }
239
240 ### 245
241 # redoslijed polja va¾an
242 # podpolja i interpunkcije pripremljeni u modify
243
244 #_debug(3);
245
246 marc_compose('245',
247 'a', suffix(
248 ( ! rec('200','b') && ( rec('200','f') || rec('200','c') ) ) ? ' / ' : ' ',
249 rec('200','a'),
250 ),
251 'b', suffix(
252 ( rec('200','b') && rec('200','f') ) ? ' / ' :
253 ( rec('200','b') && rec('200','c') ) ? '. ' :
254 ' ',
255 rec('200','b'),
256 ),
257 'c', suffix(
258 ( rec('200','f') && rec('200','c') ) ? '. ' :
259 ' ',
260 rec('200','f'),
261 ),
262 '+', rec('200','c'),
263 );
264
265 #_debug(0);
266
267 #marc_compose('245',
268 # 'a', suffix(
269 # rec('200','b') ? '. ' :
270 # rec('200','k') ? ' ; ' :
271 # rec('200','d') ? ' = ' :
272 # rec('200','e') ? ' : ' :
273 # rec('200','f') ? ' / ' :
274 # '.',
275 # rec('200','a')
276 # ),
277 ## 'h', rec('200','b'),
278 # 'b', suffix(
279 # ( rec('200','k') && rec('200','f') ) ? ' / ' :
280 # ' ',
281 # join_with(' ; ',
282 # rec('200','k'),
283 # ),
284 # ),
285 # 'b', suffix(
286 # ( rec('200','d') && rec('200','f') ) ? ' / ' :
287 # ' ',
288 # rec('200','d'),
289 # ),
290 # 'b', suffix(
291 # ( rec('200','e') && rec('200','f') ) ? ' / ' :
292 # ' ',
293 # join_with(' : ',
294 # rec('200','e'),
295 # ),
296 # ),
297 # 'c', rec('200','f'),
298 ### append to last subfield
299 # '+', prefix('. ',
300 # rec('200','c')
301 # ),
302 #);
303
304
305
306
307
308 ### 250
309
310 marc('250','a',
311 suffix(
312 rec('205','f') ? ' / ' :
313 ' '.
314 rec('205','a')
315 )
316 );
317
318 marc('250','b',
319 rec('205','f')
320 );
321
322
323 ### 260
324 # ponovljiva potpolja u originalnom redosljedu
325
326 marc_original_order('260', '210');
327
328
329 ### 300
330 # provjeriti interpunkcije !!
331
332 marc('300','a',
333 suffix(
334 rec('215','c') ? ' : ' :
335 rec('215','d') ? ' ; ' :
336 rec('215','e') ? ' + ' :
337 ' ',
338 rec('215','a')
339 )
340 );
341
342 marc('300','b',
343 suffix(
344 ( rec('215','c') && rec('215','d') ) ? ' ; ' :
345 ( rec('215','c') && rec('215','e') ) ? ' + ' :
346 ' ',
347 rec('215','c')
348 )
349 );
350
351 marc('300','c',
352 suffix(
353 rec('215','e') ? ' + ' :
354 ' ',
355 rec('215','d')
356 )
357 );
358
359 marc('300','e',
360 rec('215','e')
361 );
362
363
364 ### 440
365 # 2.ind. prema jeziku i èlanu
366
367 marc_indicators('440', ' ', '0');
368
369 if ( ( rec('225','a') =~ m/^Die /) ||
370 ( rec('225','a') =~ m/^Das /) ||
371 ( rec('225','a') =~ m/^The /) ) {
372 marc_indicators('440', ' ', 4);
373 }
374
375 if ( ( rec('225','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
376 marc_indicators('440', ' ', 2);
377 }
378
379 if ( ( rec('225','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
380 marc_indicators('440', ' ', 2);
381 }
382
383 marc('440','a',
384 rec('225','a'),
385 );
386
387 marc('440','n',
388 rec('225','h')
389 );
390
391 marc('440','p',
392 rec('225','i')
393 );
394
395 marc('440','v',
396 rec('225','v'),
397 );
398
399 marc('440','x',
400 rec('225','x')
401 );
402
403
404 ### 490
405 #
406 #marc('490','a',
407 # rec('225','a')
408 #);
409
410
411 ### 50x
412
413 marc('500','a',
414 rec('300')
415 );
416
417 marc('500','a',
418 rec('305')
419 );
420
421 marc('500','a',
422 rec('307')
423 );
424
425 marc('500','a',
426 rec('314')
427 );
428
429 ### 502 - bilje¹ka o disertacijama
430 # odgovarajuæeg polja nema u originalnim podacima. mo¾da se mo¾e pretpostaviti?
431
432 ### 504
433
434 marc('504','a',
435 rec('320')
436 );
437
438 ## napomene uz konverziju polja 327 (sadrzaj):
439 # NSK konvertira 327 (NP) u 501 (R)
440 # u LOC konv. tablici stoji 327 (NP) u 505 (NR)
441 # standard i validacije dopu¹taju 501 (R) i 505 (R)
442
443 ## 505
444 ## FFPS 327 - sadrzaj
445
446 if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) {
447 marc_indicators('505', '0', ' ');
448 marc('505','a',
449 regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
450 rec('327')
451 )
452 );
453 }
454
455 if ( config() =~ m/ffan/ ) {
456 marc_indicators('505', '0', ' ');
457 marc('505','a',
458 regex('s/[<>]//g',
459 rec('330')
460 )
461 );
462 }
463
464
465
466 ## napomene uz konverziju polja 330:
467 # NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
468
469
470 ### 520
471 # mo¾da i polje 520y - jezik napomene ako je uvijek isti jezik
472
473 # FFPS 330 (NP) - sa¾etak
474 if ( config() =~ m/ffps/ ) {
475 marc('520','a',
476 regex('s/[\\r\\n]+/. /g',
477 rec('330')
478 )
479 );
480 }
481
482 ### 526 - STUDY PROGRAM INFORMATION NOTE
483
484 marc_indicators('526', 8, ' ');
485
486 marc('526','a',
487 rec('996')
488 );
489
490 ### 538 - zahtjevi sustava
491
492 marc('538','a',
493 rec('337','a')
494 );
495
496
497 ### 246
498
499 marc_indicators('246', 1, 3);
500 marc('246','a',
501 rec('532')
502 );
503
504 ### 655
505
506 marc_indicators('655', ' ', 4);
507 marc('655','a',
508 rec('608')
509 );
510
511 ### 653
512
513 marc_indicators('653', 0, ' ');
514 marc('653','a',
515 rec('610')
516 );
517
518 #_debug(2);
519
520
521 ### 700
522
523 marc_indicators('700', 1, ' ');
524
525 if ( rec('701') ) {
526 marc('700','4',
527 'aut'
528 );
529 }
530
531 marc('700','a',
532 join_with(', ',
533 rec('701', 'a'),
534 rec('701', 'b')
535 )
536 );
537
538 marc('700','a',
539 join_with(', ',
540 rec('701', 'c'),
541 rec('701', 'd')
542 )
543 );
544
545 marc('700','a',
546 join_with(', ',
547 rec('701', 'e'),
548 rec('701', 'f')
549 )
550 );
551
552 marc('700','a',
553 join_with(', ',
554 rec('701', 'g'),
555 rec('701', 'h')
556 )
557 );
558
559
560 marc('700','a',
561 rec('702','a'),
562 );
563
564
565 # ako je u originalu ponovljivo polje treba biti i konvertirano u ponovljivo !!
566
567
568 marc('700','a',
569 join_with(', ',
570 rec('702','c'),
571 rec('702','d')
572 )
573 );
574
575 marc('700','a',
576 join_with(', ',
577 rec('702','e'),
578 rec('702','f')
579 )
580 );
581
582 marc('700','a',
583 join_with(', ',
584 rec('702','g'),
585 rec('702','h')
586 )
587 );
588
589 ## 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?
590 #
591 # marc('700','a',
592 # rec('330','a')
593 # );
594 #
595 #
596 # marc('700','a',
597 # rec('330','b')
598 # );
599 #
600 # marc('700','a',
601 # rec('330','c')
602 # );
603 #
604 #
605 # marc('700','a',
606 # rec('330','d')
607 # );
608 #
609 # marc('700','a',
610 # rec('330','e')
611 # );
612 #
613 # marc('700','a',
614 # rec('330','f')
615 # );
616
617 #_debug(0);
618
619
620
621
622 ### 740
623
624 marc_indicators('740', 0, ' ');
625
626 # if ( ! rec('464') ) {
627 # marc('740','a',
628 # rec('200','c')
629 # );
630
631 marc('740','a',
632 rec('200','k')
633 );
634
635 # } else {
636
637 #marc('740','a',
638 # rec('464','a')
639 #);
640
641 # };
642
643 ### generiranje zapisa o nakladnièkoj cjelini i povezivanje podreðenog zapisa s nadreðenim
644
645
646 my $series_key = join_with('',
647 rec('225','a'),
648 rec('210','a'),
649 rec('210','b'),
650 );
651
652 if ($series_key) {
653
654 marc_indicators('760', 0, ' ');
655
656 marc('760','w',
657 get( $series_key )
658 );
659 }
660
661 ### testing
662 #
663 # my $dup_key = join_with('',
664 # rec('200','a'),
665 #);
666 #
667 #if ($dup_key) {
668 # marc('995','a',
669 # get( $dup_key )
670 # );
671 #}
672 #
673 #
674 # marc_indicators('776', 0, ' ');
675 #
676 # marc('776','a',
677 # rec('452','1')
678 # );
679 #
680
681
682 ## 852 - lokacija
683
684 marc_indicators('852', 4, ' ');
685
686 marc('852','j',
687 join_with(' ',
688 rec('990')
689 )
690 );
691
692 ## 876 - item information - basic bibliographic unit
693
694 marc('876','a',
695 rec('991'),
696 );
697
698 ## 886 - former marc
699
700 marc_indicators('886', 2, ' ');
701
702 marc('886','2',
703 'ffmarc'
704 );
705
706 marc('886','a',
707 '994'
708 );
709
710 marc('886','b',
711 join_with(''.
712 '##^a',
713 join_with('',
714 prefix('^a',
715 rec('994','a'),
716 ),
717 prefix('^b',
718 rec('994','b')
719 )
720 )
721 )
722 );
723
724
725 } # polje 200a

  ViewVC Help
Powered by ViewVC 1.1.26