/[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

Annotation of /trunk/conf/normalize/ff-libri.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 842 - (hide 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 dpavlin 802 #########################################################################
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 dpavlin 795
8 dpavlin 792 # konvertira se ako postoji polje 200^a
9 dpavlin 773
10 dpavlin 751 if ( rec('200','a') ) {
11    
12 dpavlin 792 ### LEADER
13 dpavlin 751 # raspraviti 17,18
14 dpavlin 795 # u nekim knji¾nicama koristi se 999a i 999b, a u nekima samo 999
15 dpavlin 751
16 dpavlin 795 if ( rec('999') && first(rec('999')) =~ m/(pregledan|P)/i) {
17 dpavlin 751 marc_leader('05','c');
18     } else {
19     marc_leader('05','n');
20     }
21    
22 dpavlin 842 # moguæa je i oznaka "m" u 06 - odrediti kriterije
23 dpavlin 751 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 dpavlin 792 ### 001 - Voyager
32 dpavlin 751
33 dpavlin 816 ### 007
34    
35     marc_fixed('007',00,'ta');
36    
37 dpavlin 792 ### 008
38 dpavlin 773
39 dpavlin 816 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 dpavlin 824 first( lc(rec('101')) )
62 dpavlin 816 );
63    
64    
65    
66 dpavlin 792 ### 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 dpavlin 751 marc('035','6',
73 dpavlin 824 join_with('',
74 dpavlin 751 # config('input normalize path'),
75     # config('name'),
76 dpavlin 758 config(),
77     'L',
78 dpavlin 751 # config('input name'),
79     # id(),
80     # rec('994','a'),
81     rec('000')
82     )
83     );
84    
85    
86 dpavlin 792 ### 020
87     # postoji modify -> drugi ISBN poèinje prefixom "ISBN" koji se mièe (sfb)
88 dpavlin 751
89     marc('020','a',
90 dpavlin 783 regex('s/ ISBN //g',
91     rec('10')
92     )
93 dpavlin 751 );
94    
95    
96 dpavlin 792 ### 040
97     # za sve je isti
98    
99 dpavlin 751 marc('040','a',
100     'HR FFZG'
101     );
102    
103     marc('040','b',
104     'hrv'
105     );
106    
107 dpavlin 758 marc('040','e',
108     'HR PPIAK'
109     );
110    
111 dpavlin 792
112     ### 041 indikatori
113     # pretpostavke o indikatorima:
114     #
115 dpavlin 816 # 1. Ako postoji polje 300 i ono sadr¾i /Prijevod/ ili /Izv. stv. nasl./, i1 = 1
116 dpavlin 792 # (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 dpavlin 816 # ????
125 dpavlin 792
126    
127 dpavlin 807 #if ( rec('675') =~ m/\d=\d/ ) {
128 dpavlin 816 if ( grep( m/Prijevod/, rec('300')) || grep( m/Izv. stv. nasl./, rec('300') ) ) {
129 dpavlin 751 marc_indicators('041', 1, ' ');
130     } else {
131     marc_indicators('041', 0, ' ');
132     }
133    
134 dpavlin 758
135 dpavlin 792 ### 041
136     # ponovljivo polje konvertira se u ponovljivo potpolje
137    
138 dpavlin 783 #_debug(2);
139 dpavlin 751 marc_repeatable_subfield('041','a',
140     rec('101')
141     );
142 dpavlin 783 #_debug(0);
143 dpavlin 751
144    
145 dpavlin 792 ### 080
146 dpavlin 807 # 675 podpolja b, c, d ... - ¹to s njima ???
147 dpavlin 783
148 dpavlin 792 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 dpavlin 807 if ( rec('700','a') && ! rec('700','b') ) {
167     marc_indicators('100', 0, ' ');
168     } else {
169     marc_indicators('100', 1, ' ');
170     }
171    
172 dpavlin 792 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 dpavlin 802 # ovo vrijedi za FFSFB
183 dpavlin 792
184     if ( rec('710','f') ) {
185    
186     marc_indicators('111', 2, ' ');
187    
188 dpavlin 802 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 dpavlin 792 );
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 dpavlin 802 }
209 dpavlin 792
210    
211     ### 245 indikatori
212 dpavlin 816 # i1 = 0 za anonimne publikacije, i1 = 1 ako postoji 700 ili 710
213 dpavlin 792 # 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 dpavlin 816 my $i1;
217 dpavlin 792
218 dpavlin 816 if ( rec('700') || rec('710') ) {
219     $i1 = 1;
220    
221     } else {
222     $i1 = 0;
223     }
224    
225     marc_indicators('245', $i1, 0);
226    
227 dpavlin 758 if ( ( rec('200','a') =~ m/^Die /) ||
228     ( rec('200','a') =~ m/^Das /) ||
229 dpavlin 824 ( rec('200','a') =~ m/^Der /) ||
230 dpavlin 758 ( rec('200','a') =~ m/^The /) ) {
231 dpavlin 816 marc_indicators('245', $i1, 4);
232 dpavlin 783 }
233 dpavlin 751
234 dpavlin 807 if ( ( rec('200','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
235 dpavlin 816 marc_indicators('245', $i1, 2);
236 dpavlin 783 }
237    
238 dpavlin 807 if ( ( rec('200','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
239 dpavlin 816 marc_indicators('245', $i1, 2);
240 dpavlin 807 }
241    
242 dpavlin 792 ### 245
243 dpavlin 816 # redoslijed polja va¾an
244     # podpolja i interpunkcije pripremljeni u modify
245 dpavlin 783
246 dpavlin 751 #_debug(3);
247 dpavlin 816
248 dpavlin 751 marc_compose('245',
249     'a', suffix(
250 dpavlin 824 ( ! rec('200','p') && ( rec('200','f') || rec('200','c') ) ) ? ' / ' :
251     ( rec('200','p') && rec('200','c') ) ? ' : ' :
252     '',
253 dpavlin 816 rec('200','a'),
254 dpavlin 751 ),
255     'b', suffix(
256 dpavlin 824 ( rec('200','p') && rec('200','f') ) ? ' / ' :
257     ( rec('200','p') && rec('200','c') ) ? '. ' :
258     '',
259     rec('200','p'),
260 dpavlin 751 ),
261 dpavlin 816 'c', suffix(
262     ( rec('200','f') && rec('200','c') ) ? '. ' :
263 dpavlin 824 '',
264 dpavlin 816 rec('200','f'),
265 dpavlin 751 ),
266 dpavlin 816 '+', rec('200','c'),
267     );
268 dpavlin 751
269 dpavlin 816 #_debug(0);
270 dpavlin 783
271 dpavlin 816 #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 dpavlin 751
308    
309 dpavlin 783
310    
311    
312 dpavlin 792 ### 250
313 dpavlin 783
314 dpavlin 824 marc_compose('250',
315     'a',suffix(
316     rec('205','f') ? ' / ' :
317     ' ',
318 dpavlin 751 rec('205','a')
319 dpavlin 824 ),
320     'b', rec('205','f'),
321 dpavlin 751 );
322    
323 dpavlin 824 #marc('250','b',
324     # rec('205','f')
325     #);
326 dpavlin 751
327 dpavlin 792
328     ### 260
329 dpavlin 751 # ponovljiva potpolja u originalnom redosljedu
330 dpavlin 773
331 dpavlin 751 marc_original_order('260', '210');
332    
333    
334 dpavlin 792 ### 300
335 dpavlin 751 # provjeriti interpunkcije !!
336 dpavlin 758
337 dpavlin 751 marc('300','a',
338     suffix(
339 dpavlin 783 rec('215','c') ? ' : ' :
340     rec('215','d') ? ' ; ' :
341     rec('215','e') ? ' + ' :
342 dpavlin 751 ' ',
343     rec('215','a')
344     )
345     );
346    
347     marc('300','b',
348     suffix(
349 dpavlin 783 ( rec('215','c') && rec('215','d') ) ? ' ; ' :
350     ( rec('215','c') && rec('215','e') ) ? ' + ' :
351 dpavlin 816 ' ',
352 dpavlin 751 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 dpavlin 792 ### 440
370     # 2.ind. prema jeziku i èlanu
371 dpavlin 758
372 dpavlin 783 marc_indicators('440', ' ', '0');
373 dpavlin 751
374 dpavlin 816 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 dpavlin 824 #_debug(3);
389    
390     marc('440',
391     'a', suffix( rec('225','f'),
392     rec('225','a'),
393     ),
394 dpavlin 816 );
395 dpavlin 751
396 dpavlin 824 # 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 dpavlin 792 marc('440','n',
407 dpavlin 783 rec('225','h')
408     );
409    
410     marc('440','p',
411     rec('225','i')
412     );
413    
414     marc('440','v',
415 dpavlin 816 rec('225','v'),
416 dpavlin 783 );
417    
418     marc('440','x',
419     rec('225','x')
420     );
421    
422 dpavlin 792
423     ### 490
424     #
425     #marc('490','a',
426     # rec('225','a')
427 dpavlin 751 #);
428    
429 dpavlin 792
430 dpavlin 816 ### 50x
431 dpavlin 792
432 dpavlin 751 marc('500','a',
433     rec('300')
434     );
435    
436     marc('500','a',
437 dpavlin 773 rec('305')
438     );
439    
440     marc('500','a',
441     rec('307')
442     );
443    
444     marc('500','a',
445 dpavlin 751 rec('314')
446     );
447    
448 dpavlin 795 ### 502 - bilje¹ka o disertacijama
449     # odgovarajuæeg polja nema u originalnim podacima. mo¾da se mo¾e pretpostaviti?
450    
451 dpavlin 792 ### 504
452    
453 dpavlin 751 marc('504','a',
454     rec('320')
455     );
456    
457 dpavlin 758 ## napomene uz konverziju polja 327 (sadrzaj):
458 dpavlin 751 # 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 dpavlin 792 ## 505
463 dpavlin 758 ## FFPS 327 - sadrzaj
464 dpavlin 792
465 dpavlin 758 if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) {
466 dpavlin 773 marc_indicators('505', '0', ' ');
467 dpavlin 758 marc('505','a',
468     regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
469     rec('327')
470     )
471     );
472     }
473 dpavlin 751
474 dpavlin 816 if ( config() =~ m/ffan/ ) {
475     marc_indicators('505', '0', ' ');
476     marc('505','a',
477     regex('s/[<>]//g',
478     rec('330')
479     )
480     );
481     }
482 dpavlin 751
483 dpavlin 792
484 dpavlin 816
485 dpavlin 758 ## napomene uz konverziju polja 330:
486 dpavlin 751 # NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
487    
488    
489 dpavlin 792 ### 520
490     # mo¾da i polje 520y - jezik napomene ako je uvijek isti jezik
491    
492 dpavlin 758 # 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 dpavlin 751
501 dpavlin 816 ### 526 - STUDY PROGRAM INFORMATION NOTE
502 dpavlin 751
503 dpavlin 816 marc_indicators('526', 8, ' ');
504 dpavlin 792
505 dpavlin 816 marc('526','a',
506     rec('996')
507     );
508 dpavlin 792
509 dpavlin 816 ### 538 - zahtjevi sustava
510    
511 dpavlin 773 marc('538','a',
512     rec('337','a')
513     );
514 dpavlin 758
515 dpavlin 773
516 dpavlin 792 ### 246
517 dpavlin 751
518 dpavlin 758 marc_indicators('246', 1, 3);
519     marc('246','a',
520     rec('532')
521     );
522    
523 dpavlin 792 ### 655
524    
525 dpavlin 751 marc_indicators('655', ' ', 4);
526     marc('655','a',
527     rec('608')
528     );
529    
530 dpavlin 792 ### 653
531    
532 dpavlin 758 marc_indicators('653', 0, ' ');
533 dpavlin 751 marc('653','a',
534     rec('610')
535     );
536    
537 dpavlin 792 #_debug(2);
538 dpavlin 751
539    
540 dpavlin 792 ### 700
541 dpavlin 751
542     marc_indicators('700', 1, ' ');
543    
544     if ( rec('701') ) {
545     marc('700','4',
546     'aut'
547     );
548     }
549    
550     marc('700','a',
551 dpavlin 758 join_with(', ',
552     rec('701', 'a'),
553     rec('701', 'b')
554     )
555 dpavlin 751 );
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 dpavlin 758 # ako je u originalu ponovljivo polje treba biti i konvertirano u ponovljivo !!
585 dpavlin 751
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 dpavlin 758 ## 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 dpavlin 792 #
610 dpavlin 751 # 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 dpavlin 792 ### 740
642 dpavlin 751
643 dpavlin 792 marc_indicators('740', 0, ' ');
644 dpavlin 751
645 dpavlin 792 # if ( ! rec('464') ) {
646     # marc('740','a',
647     # rec('200','c')
648     # );
649 dpavlin 751
650 dpavlin 807 marc('740','a',
651     rec('200','k')
652     );
653 dpavlin 751
654 dpavlin 792 # } else {
655 dpavlin 751
656 dpavlin 792 #marc('740','a',
657     # rec('464','a')
658     #);
659 dpavlin 751
660 dpavlin 792 # };
661 dpavlin 751
662 dpavlin 792 ### generiranje zapisa o nakladnièkoj cjelini i povezivanje podreðenog zapisa s nadreðenim
663 dpavlin 751
664 dpavlin 824 if (
665     rec('225','a') # da li je nakladnicka cjelina?
666     ) {
667 dpavlin 751
668 dpavlin 824 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 dpavlin 792 my $series_key = join_with('',
694     rec('225','a'),
695     rec('210','a'),
696     rec('210','b'),
697     );
698 dpavlin 751
699 dpavlin 792 if ($series_key) {
700 dpavlin 751
701 dpavlin 792 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 dpavlin 751
727    
728 dpavlin 816 ## 852 - lokacija
729 dpavlin 783
730 dpavlin 816 marc_indicators('852', 4, ' ');
731 dpavlin 773
732 dpavlin 816 marc('852','j',
733     join_with(' ',
734     rec('990')
735     )
736     );
737 dpavlin 783
738 dpavlin 816 ## 876 - item information - basic bibliographic unit
739 dpavlin 783
740 dpavlin 816 marc('876','a',
741     rec('991'),
742     );
743 dpavlin 783
744 dpavlin 816 ## 886 - former marc
745 dpavlin 783
746 dpavlin 816 marc_indicators('886', 2, ' ');
747 dpavlin 783
748 dpavlin 816 marc('886','2',
749     'ffmarc'
750     );
751 dpavlin 792
752 dpavlin 816 marc('886','a',
753     '994'
754     );
755 dpavlin 792
756 dpavlin 816 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 dpavlin 792
770    
771 dpavlin 795 } # polje 200a

  ViewVC Help
Powered by ViewVC 1.1.26