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 # 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');
27 # pojasniti upotrebu 19 lidera!
30 marc_leader('19','r');
36 # Pojasniti upotrebu polja
39 # pojasniti upotrebu polja
41 marc_fixed('007',00,'ta');
44 # ¹to zapisati u polje kad datum nije poznat?
46 if ( rec('994','c') ) {
47 marc_fixed('008','00',
65 marc_fixed('008','35',
66 first( lc(rec('101')) )
71 # postoji modify -> drugi ISBN poèinje prefixom "ISBN" koji se mièe (sfb)
81 # Privemeno koristimo 035$6 umjesto 035$9, zato ¹to marclint prijavljuje 9 kao gre¹ku.
82 # marc 035a - System Number - Voyagerov ID (001)
83 # polje 035$9 mo¾e sadr¾avati slova i razmake
87 # config('input normalize path'),
91 # config('input name'),
100 # treba utvrditi toènu oznaku za ustanovu
119 # pretpostavke o indikatorima:
121 # 1. Ako postoji polje 300 i ono sadr¾i /Prijevod/ ili /Izv. stv. nasl./, i1 = 1
122 # (Da li je napomena uvijek pisana?)
124 # 2. Podatak o prevodiocu u 200g. Problem: razlièiti oblici rijeèi, razlièiti jezici.
126 # 3. Ako u UDK oznaci postoji "=", bez zagrada, onda je to prijevod
127 # (ako postoje zagrade pr. 94(=411.16) onda su to pomoæne oznake)
128 # pr. 821.111-2=163.42 je prijevod engleske drame na HR.
129 # to ima samo za knji¾evna djela, eseje....
133 #if ( rec('675') =~ m/\d=\d/ ) {
134 if ( grep( m/prijevod/i, rec('300')) || grep( m/prevedeno/i, rec('300')) || grep( m/izv.*stv.*nasl/i, rec('300')) || grep( m/izvornik/i, rec('300')) || grep( m/preve/i, rec('200','f')) || grep( m/preve/i, rec('200','g')) || grep( m/prijevod/i, rec('200','f')) || grep( m/prijevod/i, rec('200','g')) ) {
135 marc_indicators('041', 1, ' ');
137 marc_indicators('041', 0, ' ');
142 # ponovljivo polje konvertira se u ponovljivo potpolje
146 marc_repeatable_subfield('041','a',
156 # 675 podpolja b, c, d ... - ¹to s njima ???
175 ### 084 - other classification (R)
176 # NSK ga koristi za struènu oznaku NSK iz polja 681
177 # NSK konvertira polje 686 u 084, u skladu s LOC konv. tablicom
178 # polje 686 koristi FFPS. jo¹ netko?
186 # I1 = 0 ako je pseudonim (ima 700a, nema 700b)
188 if ( rec('700','a') && ! rec('700','b') ) {
189 marc_indicators('100', 0, ' ');
191 marc_indicators('100', 1, ' ');
203 # provjeriti ispise naslova iz svake baze - moguæe su gre¹ke.
204 # ovo vrijedi za FFSFB
206 if ( rec('710','d') || rec('710','e') || rec('710','f') ) {
208 marc_indicators('111', 2, ' ');
212 rec('710','b') ? '.' :
218 rec('710','d') ? '(' :
223 ( ! rec('710','d') ) ? '(' :
224 ( ! rec('710','e') ) ? '(' :
229 ( rec('710','e') && ( rec('710','d') || rec('710','f') ) ) ? '; ' :
230 ( ! rec('710','d') && ! rec('710','f') ) ? '(' :
240 marc_indicators('110', 2, ' ');
250 if ( rec('710','c') ) {
252 surround('(', ')', rec('710','c'))
263 # i1 = 0 za anonimne publikacije, i1 = 1 ako postoji 700 ili 710
264 # i2 = pretpostavlja se na temelju èlana na poèetku naslova i jezika
265 # treba nadopuniti i dati podatke na verifikaciju knji¾nièarima
269 if ( rec('700') || rec('710') ) {
276 marc_indicators('245', $i1, 0);
278 if ( ( rec('200','a') =~ m/^Die /) ||
279 ( rec('200','a') =~ m/^Das /) ||
280 ( rec('200','a') =~ m/^Der /) ||
281 ( rec('200','a') =~ m/^The /) ) {
282 marc_indicators('245', $i1, 4);
285 if ( ( rec('200','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
286 marc_indicators('245', $i1, 2);
289 if ( ( rec('200','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
290 marc_indicators('245', $i1, 2);
293 # podpolja i interpunkcije pripremljeni u modify
299 ( ! ( rec('200','d') || rec('200','e') || rec('200','k') ) ) && ( rec('200','f') ) ? ' / ' :
300 ( rec('200','d') ) ? ' = ' :
301 ( rec('200','e') ) ? ' : ' :
302 ( rec('200','k') ) ? ' ; ' :
307 ( rec('200','d') && rec('200','f') ) ? ' / ' :
308 ( rec('200','d') && rec('200','c') ) ? '. ' :
313 ( rec('200','e') && rec('200','f') ) ? ' / ' :
314 ( rec('200','e') && rec('200','c') ) ? '. ' :
319 ( rec('200','k') && rec('200','f') ) ? ' / ' :
320 ( rec('200','k') && rec('200','c') ) ? '. ' :
325 ( rec('200','f') && rec('200','c') ) ? '. ' :
334 # ( ! rec('200','p') && ( rec('200','f') || rec('200','c') ) ) ? ' / ' :
335 # ( ! rec('200','p') && rec('200','c') ) ? ' : ' :
340 # ( rec('200','p') && rec('200','f') ) ? ' / ' :
341 # ( rec('200','p') && rec('200','c') ) ? '. ' :
346 # ( rec('200','f') && rec('200','c') ) ? '. ' :
350 # '+', rec('200','c'),
357 # rec('200','b') ? '. ' :
358 # rec('200','k') ? ' ; ' :
359 # rec('200','d') ? ' = ' :
360 # rec('200','e') ? ' : ' :
361 # rec('200','f') ? ' / ' :
365 ## 'h', rec('200','b'),
367 # ( rec('200','k') && rec('200','f') ) ? ' / ' :
374 # ( rec('200','d') && rec('200','f') ) ? ' / ' :
379 # ( rec('200','e') && rec('200','f') ) ? ' / ' :
385 # 'c', rec('200','f'),
386 ## append to last subfield
397 # zapisima koji nemaju potpolje, dodaje se ^a u modify - provjeriti
401 rec('205','f') ? ' / ' :
411 # ponovljiva potpolja u originalnom redosljedu
413 marc_original_order('260', '210');
417 # urediti interpunkcije za sve kombinacije
421 rec('215','c') ? ' : ' :
422 rec('215','d') ? ' ; ' :
423 rec('215','e') ? ' + ' :
431 ( rec('215','c') && rec('215','d') ) ? ' ; ' :
432 ( rec('215','c') && rec('215','e') ) ? ' + ' :
440 rec('215','e') ? ' + ' :
451 # brojèani podaci za nakladnièku cjelinu
455 # 2.ind. prema jeziku i èlanu
457 marc_indicators('440', ' ', '0');
459 if ( ( rec('225','a') =~ m/^Die /) ||
460 ( rec('225','a') =~ m/^Das /) ||
461 ( rec('225','a') =~ m/^The /) ) {
462 marc_indicators('440', ' ', 4);
465 if ( ( rec('225','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
466 marc_indicators('440', ' ', 2);
469 if ( ( rec('225','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
470 marc_indicators('440', ' ', 2);
475 marc_original_order('440','225');
480 # rec('225','i') ? '. ' :
485 # ( ! rec('225','x') && rec('225','i') && rec('225','v') ) ? ' ; ' :
486 # ( rec('225','i') && rec('225','x') ) ? ', ' :
491 # ( rec('225','x') && rec('225','v') ) ? ' ; ' :
495 # 'v', rec('225','v'),
498 ## ovo radi samo kad 225 nije ponovljivo
504 # sub { rec('225','a') }
510 # ( rec('225','x') ) ? ', ' :
511 # ( rec('225','v') || rec('225','w') ) ? ' ; ' :
512 # ( rec('225','h') || rec('225','i') ) ? '. ' :
526 # ( rec('225','x') && rec('225','v') ) ? ' ; ' :
527 # ( rec('225','x') && ( rec('225','h') || rec('225','i') ) ) ? '. ' :
532 # ( rec('225','v') && rec('225','h') || rec('225','i') ) ? '. ' :
539 # ( rec('225','h') && rec('225','p') || rec('225','y') ) ? ', ' :
544 # ( rec('225','i') && rec('225','x') ) ? ', ' :
545 # ( rec('225','i') && rec('225','v') ) ? ' ; ' :
550 # ( rec('225','y') && rec('225','v') ) ? ' ; ' :
554 # 'v', rec('225','w'),
557 # marc_compose('440',
559 # rec('225','k') ? ' ; ' :
571 # marc_compose('440',
573 # rec('225','s') ? ' ; ' :
586 #if ( rec('225','i') ) {
594 #if ( rec('225','v') ) {
623 ### 502 - bilje¹ka o disertacijama
624 # odgovarajuæeg polja nema u originalnim podacima. mo¾da se mo¾e pretpostaviti?
632 ## napomene uz konverziju polja 327 (sadrzaj):
633 # NSK konvertira 327 (NP) u 501 (R)
634 # u LOC konv. tablici stoji 327 (NP) u 505 (NR)
635 # standard i validacije dopu¹taju 501 (R) i 505 (R)
640 if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) {
641 marc_indicators('505', '0', ' ');
643 regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
649 if ( config() =~ m/ffan/ ) {
650 marc_indicators('505', '0', ' ');
659 # NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
663 # mo¾da i polje 520y - jezik napomene ako je uvijek isti jezik?
665 # FFPS 330 (NP) - sa¾etak
666 if ( config() =~ m/ffps/ ) {
668 regex('s/[\\r\\n]+/. /g',
674 ### 526 - STUDY PROGRAM INFORMATION NOTE
675 # provjeriti za svaku bazu sta je tocno u 996?
677 marc_indicators('526', 8, ' ');
683 ### 538 - zahtjevi sustava
692 marc_indicators('246', 1, 3);
699 marc_indicators('655', ' ', 4);
706 marc_indicators('653', 0, ' ');
716 marc_indicators('700', 1, ' ');
761 # ako je u originalu ponovljivo polje treba biti i konvertirano u ponovljivo !!
790 marc_indicators('740', 0, ' ');
792 # if ( ! rec('464') ) {
809 # generiranje zapisa o nakladnièkoj cjelini i povezivanje podreðenog zapisa s nadreðenim
812 rec('225','a') # da li je nakladnièka cjelina?
822 my $series = get( $series_key );
828 $series = join_with('',
834 set( $series_key => $series );
837 } # nakladnièka cjelina
839 my $series_key = join_with('',
847 marc_indicators('760', 0, ' ');
855 # my $dup_key = join_with('',
866 # marc_indicators('776', 0, ' ');
876 marc_indicators('852', 4, ' ');
884 ### 876 - item information - basic bibliographic unit
890 ### 886 - former marc
892 marc_indicators('886', 2, ' ');