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');
43 ### 008 - All materials
45 # ¹to zapisati u polje kad datum nije poznat?
47 if ( rec('994','c') ) {
48 marc_fixed('008','00',
66 marc_fixed('008','06', 't'); # 06 - Type of date/Publication status
67 marc_fixed('008','07',
70 # marc_fixed('008','11', ' '); # 11-14 - Date 2
71 marc_fixed('008','15',
73 ); # 15-17 - Place of publication, production, or execution
74 marc_fixed('008','35',
75 first( lc(rec('101')) ) # 35-37 - Language
77 marc_fixed('008','38', '|'); # 38 - Modified record
78 marc_fixed('008','39','d'); # 39 - Cataloging source
83 # 18-21 - Illustrations
84 # 22 - Target audience
86 # 24-27 - Nature of contents
87 # 28 - Government publication
88 # 29 - Conference publication
97 # postoji modify -> drugi ISBN poèinje prefixom "ISBN" koji se mièe (sfb)
100 regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
107 # Privemeno koristimo 035$6 umjesto 035$9, zato ¹to marclint prijavljuje 9 kao gre¹ku.
108 # marc 035a - System Number - Voyagerov ID (001)
109 # polje 035$9 mo¾e sadr¾avati slova i razmake
113 # config('input normalize path'),
117 # config('input name'),
126 # treba utvrditi toènu oznaku za ustanovu
143 # pretpostavke o indikatorima:
145 # 1. Ako postoji polje 300 i ono sadr¾i /Prijevod/ ili /Izv. stv. nasl./, i1 = 1
146 # (Da li je napomena uvijek pisana?)
148 # 2. Podatak o prevodiocu u 200g. Problem: razlièiti oblici rijeèi, razlièiti jezici.
150 # 3. Ako u UDK oznaci postoji "=", bez zagrada, onda je to prijevod
151 # (ako postoje zagrade pr. 94(=411.16) onda su to pomoæne oznake)
152 # pr. 821.111-2=163.42 je prijevod engleske drame na HR.
153 # to ima samo za knji¾evna djela, eseje....
157 #if ( rec('675') =~ m/\d=\d/ ) {
158 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')) ) {
159 marc_indicators('041', 1, ' ');
161 marc_indicators('041', 0, ' ');
166 # ponovljivo polje konvertira se u ponovljivo potpolje
170 marc_repeatable_subfield('041','a',
177 ## kako dobiti zemlju izdavanja?
180 # 675 podpolja b, c, d ... - ¹to s njima ???
199 ### 084 - other classification (R)
200 # NSK ga koristi za struènu oznaku NSK iz polja 681
201 # NSK konvertira polje 686 u 084, u skladu s LOC konv. tablicom
202 # polje 686 koristi FFPS. jo¹ netko?
210 # I1 = 0 ako je pseudonim (ima 700a, nema 700b)
212 if ( rec('700','a') && ! rec('700','b') ) {
213 marc_indicators('100', 0, ' ');
215 marc_indicators('100', 1, ' ');
229 # provjeriti ispise naslova iz svake baze - moguæe su gre¹ke.
231 # ovo vrijedi za FFSFB
232 if ( rec('710','d') || rec('710','e') || rec('710','f') ) {
234 marc_indicators('111', 2, ' ');
238 rec('710','b') ? '.' :
244 rec('710','d') ? '(' :
249 ( ! rec('710','d') ) ? '(' :
250 ( ! rec('710','e') ) ? '(' :
255 ( rec('710','e') && ( rec('710','d') || rec('710','f') ) ) ? '; ' :
256 ( ! rec('710','d') && ! rec('710','f') ) ? '(' :
266 marc_indicators('110', 2, ' ');
276 if ( rec('710','c') ) {
278 surround('(', ')', rec('710','c'))
286 # treba nadopuniti i dati podatke na verifikaciju knji¾nièarima
288 # i1 = 0 za anonimne publikacije, i1 = 1 ako postoji 700 ili 710
289 # i2 = pretpostavlja se na temelju èlana na poèetku naslova i jezika
293 if ( rec('700') || rec('710') ) {
300 marc_indicators('245', $i1, 0);
302 if ( ( rec('200','a') =~ m/^Die /) ||
303 ( rec('200','a') =~ m/^Das /) ||
304 ( rec('200','a') =~ m/^Der /) ||
305 ( rec('200','a') =~ m/^The /) ) {
306 marc_indicators('245', $i1, 4);
309 if ( ( rec('200','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
310 marc_indicators('245', $i1, 2);
313 if ( ( rec('200','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
314 marc_indicators('245', $i1, 2);
318 # podpolja i interpunkcije pripremljeni u modify
324 ( ! ( rec('200','d') || rec('200','e') || rec('200','k') ) ) && ( rec('200','f') ) ? ' /' :
325 ( rec('200','d') ) ? ' =' :
326 ( rec('200','e') ) ? ' :' :
327 ( rec('200','k') ) ? ' ;' :
332 ( rec('200','d') && rec('200','f') ) ? ' /' :
333 ( rec('200','d') && rec('200','c') ) ? '.' :
338 ( rec('200','e') && rec('200','f') ) ? ' /' :
339 ( rec('200','e') && rec('200','c') ) ? '.' :
344 ( rec('200','k') && rec('200','f') ) ? ' /' :
345 ( rec('200','k') && rec('200','c') ) ? '.' :
350 ( rec('200','f') && rec('200','c') ) ? '.' :
361 # ( ! rec('200','p') && ( rec('200','f') || rec('200','c') ) ) ? ' / ' :
362 # ( ! rec('200','p') && rec('200','c') ) ? ' : ' :
367 # ( rec('200','p') && rec('200','f') ) ? ' / ' :
368 # ( rec('200','p') && rec('200','c') ) ? '. ' :
373 # ( rec('200','f') && rec('200','c') ) ? '. ' :
377 # '+', rec('200','c'),
384 # rec('200','b') ? '. ' :
385 # rec('200','k') ? ' ; ' :
386 # rec('200','d') ? ' = ' :
387 # rec('200','e') ? ' : ' :
388 # rec('200','f') ? ' / ' :
392 ## 'h', rec('200','b'),
394 # ( rec('200','k') && rec('200','f') ) ? ' / ' :
401 # ( rec('200','d') && rec('200','f') ) ? ' / ' :
406 # ( rec('200','e') && rec('200','f') ) ? ' / ' :
412 # 'c', rec('200','f'),
413 ## append to last subfield
421 # zapisima koji nemaju potpolje, dodaje se ^a u modify - provjeriti
425 rec('205','f') ? ' / ' :
433 # ponovljiva potpolja u originalnom redosljedu
435 marc_original_order('260', '210');
439 # urediti interpunkcije za sve kombinacije
443 rec('215','c') ? ' : ' :
444 rec('215','d') ? ' ; ' :
445 rec('215','e') ? ' + ' :
453 ( rec('215','c') && rec('215','d') ) ? ' ; ' :
454 ( rec('215','c') && rec('215','e') ) ? ' + ' :
462 rec('215','e') ? ' + ' :
473 # brojèani podaci za nakladnièku cjelinu
477 # 2.ind. prema jeziku i èlanu, provjeriri
479 marc_indicators('440', ' ', '0');
481 if ( ( rec('225','a') =~ m/^Die /) ||
482 ( rec('225','a') =~ m/^Das /) ||
483 ( rec('225','a') =~ m/^The /) ) {
484 marc_indicators('440', ' ', 4);
487 if ( ( rec('225','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
488 marc_indicators('440', ' ', 2);
491 if ( ( rec('225','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
492 marc_indicators('440', ' ', 2);
499 marc_original_order('440','225');
503 # rec('225','i') ? '. ' :
508 # ( ! rec('225','x') && rec('225','i') && rec('225','v') ) ? ' ; ' :
509 # ( rec('225','i') && rec('225','x') ) ? ', ' :
514 # ( rec('225','x') && rec('225','v') ) ? ' ; ' :
518 # 'v', rec('225','v'),
521 ## ovo radi samo kad 225 nije ponovljivo
527 # sub { rec('225','a') }
533 # ( rec('225','x') ) ? ', ' :
534 # ( rec('225','v') || rec('225','w') ) ? ' ; ' :
535 # ( rec('225','h') || rec('225','i') ) ? '. ' :
549 # ( rec('225','x') && rec('225','v') ) ? ' ; ' :
550 # ( rec('225','x') && ( rec('225','h') || rec('225','i') ) ) ? '. ' :
555 # ( rec('225','v') && rec('225','h') || rec('225','i') ) ? '. ' :
562 # ( rec('225','h') && rec('225','p') || rec('225','y') ) ? ', ' :
567 # ( rec('225','i') && rec('225','x') ) ? ', ' :
568 # ( rec('225','i') && rec('225','v') ) ? ' ; ' :
573 # ( rec('225','y') && rec('225','v') ) ? ' ; ' :
577 # 'v', rec('225','w'),
580 # marc_compose('440',
582 # rec('225','k') ? ' ; ' :
594 # marc_compose('440',
596 # rec('225','s') ? ' ; ' :
609 #if ( rec('225','i') ) {
617 #if ( rec('225','v') ) {
646 ### 502 - bilje¹ka o disertacijama
647 # odgovarajuæeg polja nema u originalnim podacima. mo¾da se mo¾e pretpostaviti?
655 ## napomene uz konverziju polja 327 (sadrzaj):
656 # NSK konvertira 327 (NP) u 501 (R)
657 # u LOC konv. tablici stoji 327 (NP) u 505 (NR)
658 # standard i validacije dopu¹taju 501 (R) i 505 (R)
663 if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) {
664 marc_indicators('505', '0', ' ');
666 regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
672 if ( config() =~ m/ffan/ ) {
673 marc_indicators('505', '0', ' ');
682 # NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
686 # mo¾da i polje 520y - jezik napomene ako je uvijek isti jezik?
688 # FFPS 330 (NP) - sa¾etak
689 if ( config() =~ m/ffps/ ) {
691 regex('s/[\\r\\n]+/. /g',
697 ### 526 - STUDY PROGRAM INFORMATION NOTE
698 # provjeriti za svaku bazu sta je tocno u 996?
700 marc_indicators('526', 8, ' ');
706 ### 538 - zahtjevi sustava
715 marc_indicators('246', 1, 3);
722 marc_indicators('655', ' ', 4);
729 marc_indicators('653', 0, ' ');
739 marc_indicators('700', 1, ' ');
784 # ako je u originalu ponovljivo polje treba biti i konvertirano u ponovljivo !!
813 marc_indicators('740', 0, ' ');
815 # if ( ! rec('464') ) {
832 # generiranje zapisa o nakladnièkoj cjelini i povezivanje podreðenog zapisa s nadreðenim
835 rec('225','a') # da li je nakladnièka cjelina?
845 my $series = get( $series_key );
851 $series = join_with('',
857 set( $series_key => $series );
860 } # nakladnièka cjelina
862 my $series_key = join_with('',
870 marc_indicators('760', 0, ' ');
878 # my $dup_key = join_with('',
889 # marc_indicators('776', 0, ' ');
899 marc_indicators('852', 4, ' ');
907 ### 876 - item information - basic bibliographic unit
913 ### 886 - former marc
915 marc_indicators('886', 2, ' ');