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

  ViewVC Help
Powered by ViewVC 1.1.26