1 #########################################################################
3 ## Ova datoteka sadr¾i pravila za generiranje MARC21 ISO 2709 izlazne ##
4 ## datoteke. Ulazni format je CDS/ISIS sa zapisima u UNIMARC-u. ##
6 ##########################################################################
8 # konvertira se ako postoji polje 200^a
10 if ( rec('200','a') ) {
14 # u nekim knji¾nicama koristi se 999a i 999b, a u nekima samo 999
16 if ( rec('999') && first(rec('999')) =~ m/(pregledan|P)/i) {
17 marc_leader('05','c');
19 marc_leader('05','n');
22 marc_leader('06','a');
23 marc_leader('07','m');
24 marc_leader('18','i');
27 marc_leader('19','r');
35 # Privemeno koristimo 035$6 umjesto 035$9, zato ¹to marclint prijavljuje 9 kao gre¹ku.
36 # marc 035a - System Number - NSK zapisuje Voyagerov ID (001) - kako?
37 # kako mora izgledati polje 035$9? mo¾e li sadr¾avati slova i razmake?
42 # config('input normalize path'),
46 # config('input name'),
55 # postoji modify -> drugi ISBN poèinje prefixom "ISBN" koji se mièe (sfb)
81 # pretpostavke o indikatorima:
83 # 1. Ako postoji polje 300 i prvo pojavljivanje tog polja sadr¾i /Prijevod/ , i1 = 1
84 # (Da li je napomena uvijek pisana?)
86 # 2. Podatak o prevodiocu u 200g. Problem: razlièiti oblici rijeèi, razlièiti jezici.
88 # 3. Ako u UDK oznaci postoji "=", bez zagrada, onda je to prijevod
89 # (ako postoje zagrade pr. 94(=411.16) onda su to pomoæne oznake)
90 # pr. 821.111-2=163.42 je prijevod engleske drame na HR.
91 # to ima samo za knji¾evna djela, eseje....
94 #if ( rec('675') =~ m/\d=\d/ ) {
95 if ( first(rec('300')) =~ m/Prijevod/ || first(rec('300')) =~ m/Izv. stv. nasl./ ) {
96 marc_indicators('041', 1, ' ');
98 marc_indicators('041', 0, ' ');
103 # ponovljivo polje konvertira se u ponovljivo potpolje
106 marc_repeatable_subfield('041','a',
113 # 675 podpolja b, c, d ... - ¹to s njima ???
120 ### 084 - other classification (R)
121 # NSK ga koristi za struènu oznaku NSK iz polja 681
122 # NSK definira i prelazak polja 686 u 084, u skladu s LOC konv. tablicom
123 # polje 686 koristi FFPS
131 # I1 = 0 ako je pseudonim (ima 700a, nema 700b)
133 if ( rec('700','a') && ! rec('700','b') ) {
134 marc_indicators('100', 0, ' ');
136 marc_indicators('100', 1, ' ');
148 # provjeriti ispise naslova iz svake baze - moguæe su gre¹ke.
149 # ovo vrijedi za FFSFB
151 if ( rec('710','f') ) {
153 marc_indicators('111', 2, ' ');
166 marc_indicators('110', 2, ' ');
179 # i1 = 1 za sve zapise
180 # i2 = pretpostavlja se na temelju èlana na poèetku naslova i jezika
181 # treba nadopuniti i dati podatke na verifikaciju knji¾nièarima
183 marc_indicators('245', 1, 0);
185 if ( ( rec('200','a') =~ m/^Die /) ||
186 ( rec('200','a') =~ m/^Das /) ||
187 ( rec('200','a') =~ m/^The /) ) {
188 marc_indicators('245', 1, 4);
191 if ( ( rec('200','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
192 marc_indicators('245', 1, 2);
195 if ( ( rec('200','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
196 marc_indicators('245', 1, 2);
205 rec('200','b') ? '. ' :
206 rec('200','k') ? ' ; ' :
207 rec('200','d') ? ' = ' :
208 rec('200','e') ? ' : ' :
209 rec('200','f') ? ' / ' :
213 # 'h', rec('200','b'),
215 ( rec('200','k') && rec('200','f') ) ? ' / ' :
222 ( rec('200','d') && rec('200','f') ) ? ' / ' :
227 ( rec('200','e') && rec('200','f') ) ? ' / ' :
236 # append to last subfield
251 rec('205','f') ? ' / ' :
263 # ponovljiva potpolja u originalnom redosljedu
265 marc_original_order('260', '210');
269 # provjeriti interpunkcije !!
273 rec('215','c') ? ' : ' :
274 rec('215','d') ? ' ; ' :
275 rec('215','e') ? ' + ' :
283 ( rec('215','c') && rec('215','d') ) ? ' ; ' :
284 ( rec('215','c') && rec('215','e') ) ? ' + ' :
292 rec('215','e') ? ' + ' :
304 # 2.ind. prema jeziku i èlanu
306 marc_indicators('440', ' ', '0');
367 ### 502 - bilje¹ka o disertacijama
368 # odgovarajuæeg polja nema u originalnim podacima. mo¾da se mo¾e pretpostaviti?
376 ## napomene uz konverziju polja 327 (sadrzaj):
377 # NSK konvertira 327 (NP) u 501 (R)
378 # u LOC konv. tablici stoji 327 (NP) u 505 (NR)
379 # standard i validacije dopu¹taju 501 (R) i 505 (R)
382 ## FFPS 327 - sadrzaj
384 if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) {
385 marc_indicators('505', '0', ' ');
387 regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
395 ## napomene uz konverziju polja 330:
396 # NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
400 # mo¾da i polje 520y - jezik napomene ako je uvijek isti jezik
402 # FFPS 330 (NP) - sa¾etak
403 if ( config() =~ m/ffps/ ) {
405 regex('s/[\\r\\n]+/. /g',
412 if ( config() =~ m/fftu/ ) {
428 marc_indicators('246', 1, 3);
435 marc_indicators('655', ' ', 4);
442 marc_indicators('653', 0, ' ');
452 marc_indicators('700', 1, ' ');
494 # ako je u originalu ponovljivo polje treba biti i konvertirano u ponovljivo !!
518 ## 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?
553 marc_indicators('740', 0, ' ');
555 # if ( ! rec('464') ) {
572 ### generiranje zapisa o nakladnièkoj cjelini i povezivanje podreðenog zapisa s nadreðenim
575 my $series_key = join_with('',
583 marc_indicators('760', 0, ' ');
592 # my $dup_key = join_with('',
603 # marc_indicators('776', 0, ' ');
612 ##################################
614 ## pomoæni ispisi - privremeno! ##
616 ##################################
618 if ( ! rec('464') && rec('200','c') ) {
624 if ( ! rec('464') && rec('200','k') ) {
630 if ( ! ( rec('200','c') || rec('200','k') ) && rec('464') ) {
632 'ima-464-nema-200c-ili-200k'
640 if ( rec('200') =~ m/prev/ ) {