--- trunk/conf/normalize/ff-libri.pl 2007/01/30 18:23:53 792 +++ trunk/conf/normalize/ff-libri.pl 2007/08/23 19:21:23 876 @@ -1,41 +1,92 @@ +######################################################################### +## ## +## Ova datoteka sadrži pravila za generiranje MARC21 ISO 2709 izlazne ## +## datoteke. Ulazni format je CDS/ISIS sa zapisima u UNIMARC-u. ## +## ## +########################################################################## + # konvertira se ako postoji polje 200^a if ( rec('200','a') ) { ### LEADER # raspraviti 17,18 -# u nekim knjižnicama koristi se 999a i 999b +# u nekim knjižnicama koristi se 999a i 999b, a u nekima samo 999 -if ( rec('999') && first(rec('999')) =~ m/pregledan/i) { +if ( rec('999') && first(rec('999')) =~ m/(pregledan|P)/i) { marc_leader('05','c'); } else { marc_leader('05','n'); } +# moguća je i oznaka "m" u 06 - odrediti kriterije marc_leader('06','a'); marc_leader('07','m'); marc_leader('18','i'); +# pojasniti upotrebu 19 lidera! + if ( rec('230') ) { marc_leader('19','r'); } ### 001 - Voyager +### Pojasniti upotrebu polja 006 + +### 007 +### pojasniti upotrebu polja + +marc_fixed('007',00,'ta'); + ### 008 +if ( rec('994','c') ) { + marc_fixed('008','00', + regex('s/^\d\d//', + rec('994','c') + ), + ); +} else { + marc_fixed('008', 00, + '000101' + ); +} + +#warn( dump( +# regex('s/^\d\d//', +# rec('994','c') +# ), +#) +#); + + +marc_fixed('008','35', + first( lc(rec('101')) ) +); + + +### 020 +# postoji modify -> drugi ISBN počinje prefixom "ISBN" koji se miče (sfb) + +marc('020','a', + regex('s/ ISBN //g', + rec('10') + ) +); + + ### 035$6 # Privemeno koristimo 035$6 umjesto 035$9, zato što marclint prijavljuje 9 kao grešku. -# marc 035a - System Number - NSK zapisuje Voyagerov ID (001) - kako? +# marc 035a - System Number - NSK zapisuje Voyagerov ID (001) # kako mora izgledati polje 035$9? može li sadržavati slova i razmake? - marc('035','6', -join_with(' ', +join_with('', # config('input normalize path'), # config('name'), config(), - 'L', + ' L', # config('input name'), # id(), # rec('994','a'), @@ -44,18 +95,10 @@ ); -### 020 -# postoji modify -> drugi ISBN počinje prefixom "ISBN" koji se miče (sfb) - -marc('020','a', - regex('s/ ISBN //g', - rec('10') - ) -); - ### 040 # za sve je isti +# treba utvrditi točnu oznaku za ustanovu marc('040','a', 'HR FFZG' @@ -73,7 +116,7 @@ ### 041 indikatori # pretpostavke o indikatorima: # -# 1. Ako postoji polje 300 i prvo pojavljivanje tog polja sadrži /Prijevod/ , i1 = 1 +# 1. Ako postoji polje 300 i ono sadrži /Prijevod/ ili /Izv. stv. nasl./, i1 = 1 # (Da li je napomena uvijek pisana?) # # 2. Podatak o prevodiocu u 200g. Problem: različiti oblici riječi, različiti jezici. @@ -82,10 +125,11 @@ # (ako postoje zagrade pr. 94(=411.16) onda su to pomoćne oznake) # pr. 821.111-2=163.42 je prijevod engleske drame na HR. # to ima samo za književna djela, eseje.... +# ???? -if ( rec('675') =~ m/\d=\d/ ) { -#if ( first(rec('300')) =~ m/Prijevod/ || first(rec('300')) =~ m/Izv. stv. nasl./ ) { +#if ( rec('675') =~ m/\d=\d/ ) { +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')) ) { marc_indicators('041', 1, ' '); } else { marc_indicators('041', 0, ' '); @@ -101,14 +145,28 @@ ); #_debug(0); +### 044 + ### 080 -# 675 podpolja c, d ... - što s njima ??? +# 675 podpolja b, c, d ... - što s njima ??? marc('080','a', rec('675','a') ); +marc('080','a', + rec('675','b') +); + +marc('080','a', + rec('675','c') +); + +marc('080','a', + rec('675','d') +); + ### 084 - other classification (R) # NSK ga koristi za stručnu oznaku NSK iz polja 681 @@ -123,7 +181,12 @@ ### 100 # I1 = 0 ako je pseudonim (ima 700a, nema 700b) -marc_indicators('100', 1, ' '); +if ( rec('700','a') && ! rec('700','b') ) { + marc_indicators('100', 0, ' '); +} else { + marc_indicators('100', 1, ' '); +} + marc('100','a', join_with(', ', rec('700', 'a'), @@ -134,124 +197,207 @@ ### 111 i 110 # provjeriti ispise naslova iz svake baze - moguće su greške. +# ovo vrijedi za FFSFB -if ( rec('710','f') ) { +if ( rec('710','d') || rec('710','e') || rec('710','f') ) { marc_indicators('111', 2, ' '); -marc('111','a', - rec('710','a') -); - -marc('111','c', - rec('710','e') -); - -marc('111','d', - rec('710','f') -); -marc('111','e', - rec('710','b') -); - -marc('111','n', - rec('710','d') +marc_compose('111', + 'a', suffix( + rec('710','b') ? '.' : + '', + rec('710','a'), + ), + 'e', rec('710','b'), + 'n', prefix( + rec('710','d') ? '(' : + '', + rec('710','d') + ), + 'd', prefix( + ( ! rec('710','d') ) ? '(' : + ( ! rec('710','e') ) ? '(' : + '; ', + rec('710','f'), + ), + 'c', prefix( + ( rec('710','e') && ( rec('710','d') || rec('710','f') ) ) ? '; ' : + ( ! rec('710','d') && ! rec('710','f') ) ? '(' : + '', + rec('710','e'), + ), + '+',')', ); } else { marc_indicators('110', 2, ' '); + marc('110','a', rec('710','a') ); +marc('110','b', + rec('710','b') +); +if ( rec('710','c') ) { marc('110','c', - rec('710','c') + surround('(', ')', rec('710','c')) ); +} -}; +} ### 245 indikatori -# i1 = 1 za sve zapise +# i1 = 0 za anonimne publikacije, i1 = 1 ako postoji 700 ili 710 # i2 = pretpostavlja se na temelju člana na početku naslova i jezika # treba nadopuniti i dati podatke na verifikaciju knjižničarima -marc_indicators('245', 1, 0); +my $i1; + +if ( rec('700') || rec('710') ) { + $i1 = 1; + +} else { + $i1 = 0; +} + +marc_indicators('245', $i1, 0); if ( ( rec('200','a') =~ m/^Die /) || ( rec('200','a') =~ m/^Das /) || + ( rec('200','a') =~ m/^Der /) || ( rec('200','a') =~ m/^The /) ) { - marc_indicators('245', 1, 4); + marc_indicators('245', $i1, 4); } -if ( ( rec('200','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) - { - marc_indicators('245', 1, 2); +if ( ( rec('200','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) { + marc_indicators('245', $i1, 2); +} + +if ( ( rec('200','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) { + marc_indicators('245', $i1, 2); } ### 245 -# redoslijed polja +# podpolja i interpunkcije pripremljeni u modify #_debug(3); + marc_compose('245', 'a', suffix( - rec('200','b') ? '. ' : - rec('200','k') ? ' ; ' : - rec('200','d') ? ' = ' : - rec('200','e') ? ' : ' : - rec('200','f') ? ' / ' : - '.', - rec('200','a') + ( ! ( rec('200','d') || rec('200','e') || rec('200','k') ) ) && ( rec('200','f') ) ? ' / ' : + ( rec('200','d') ) ? ' = ' : + ( rec('200','e') ) ? ' : ' : + ( rec('200','k') ) ? ' ; ' : + '', + rec('200','a'), ), -# 'h', rec('200','b'), 'b', suffix( - ( rec('200','k') && rec('200','f') ) ? ' / ' : - ' ', - join_with(' ; ', - rec('200','k'), - ), + ( rec('200','d') && rec('200','f') ) ? ' / ' : + ( rec('200','d') && rec('200','c') ) ? '. ' : + '', + rec('200','d'), ), 'b', suffix( - ( rec('200','d') && rec('200','f') ) ? ' / ' : - ' ', - rec('200','d'), + ( rec('200','e') && rec('200','f') ) ? ' / ' : + ( rec('200','e') && rec('200','c') ) ? '. ' : + '', + rec('200','e'), ), 'b', suffix( - ( rec('200','e') && rec('200','f') ) ? ' / ' : - ' ', - join_with(' : ', - rec('200','e'), - ), + ( rec('200','k') && rec('200','f') ) ? ' / ' : + ( rec('200','k') && rec('200','c') ) ? '. ' : + '', + rec('200','k'), ), - - 'c', rec('200','f'), - -# append to last subfield - '+', prefix('. ', - rec('200','c') + 'c', suffix( + ( rec('200','f') && rec('200','c') ) ? '. ' : + '', + rec('200','f'), ), + '+', rec('200','c'), ); - +#marc_compose('245', +# 'a', suffix( +# ( ! rec('200','p') && ( rec('200','f') || rec('200','c') ) ) ? ' / ' : +# ( ! rec('200','p') && rec('200','c') ) ? ' : ' : +# '', +# rec('200','a'), +# ), +# 'b', suffix( +# ( rec('200','p') && rec('200','f') ) ? ' / ' : +# ( rec('200','p') && rec('200','c') ) ? '. ' : +# '', +# rec('200','p'), +# ), +# 'c', suffix( +# ( rec('200','f') && rec('200','c') ) ? '. ' : +# '', +# rec('200','f'), +# ), +# '+', rec('200','c'), +#); #_debug(0); +#marc_compose('245', +# 'a', suffix( +# rec('200','b') ? '. ' : +# rec('200','k') ? ' ; ' : +# rec('200','d') ? ' = ' : +# rec('200','e') ? ' : ' : +# rec('200','f') ? ' / ' : +# '.', +# rec('200','a') +# ), +## 'h', rec('200','b'), +# 'b', suffix( +# ( rec('200','k') && rec('200','f') ) ? ' / ' : +# ' ', +# join_with(' ; ', +# rec('200','k'), +# ), +# ), +# 'b', suffix( +# ( rec('200','d') && rec('200','f') ) ? ' / ' : +# ' ', +# rec('200','d'), +# ), +# 'b', suffix( +# ( rec('200','e') && rec('200','f') ) ? ' / ' : +# ' ', +# join_with(' : ', +# rec('200','e'), +# ), +# ), +# 'c', rec('200','f'), +### append to last subfield +# '+', prefix('. ', +# rec('200','c') +# ), +#); + + + + ### 250 +## zapisima koji nemaju potpolje, dodaje se ^a u modify - provjeriti -marc('250','a', - suffix( - rec('205','f') ? ' / ' : - ' '. +marc_compose('250', + 'a',suffix( + rec('205','f') ? ' / ' : + ' ', rec('205','a') - ) + ), + 'b', rec('205','f'), ); -marc('250','b', - rec('205','f') -); ### 260 @@ -261,7 +407,7 @@ ### 300 -# provjeriti interpunkcije !! +# urediti interpunkcije za sve kombinacije marc('300','a', suffix( @@ -277,7 +423,7 @@ suffix( ( rec('215','c') && rec('215','d') ) ? ' ; ' : ( rec('215','c') && rec('215','e') ) ? ' + ' : - ' ', + ' ', rec('215','c') ) ); @@ -294,51 +440,161 @@ rec('215','e') ); +### 362 +# brojčani podaci za nakladničku cjelinu ### 440 # 2.ind. prema jeziku i članu marc_indicators('440', ' ', '0'); -marc('440','a', - join_with(' : ', - rec('225','a'), - rec('225','e') - ) -) ; +if ( ( rec('225','a') =~ m/^Die /) || + ( rec('225','a') =~ m/^Das /) || + ( rec('225','a') =~ m/^The /) ) { + marc_indicators('440', ' ', 4); +} -marc('440','n', - rec('225','h') -); +if ( ( rec('225','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) { + marc_indicators('440', ' ', 2); +} -marc('440','p', - rec('225','i') -); +if ( ( rec('225','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) { + marc_indicators('440', ' ', 2); +} -marc('440','v', - join_with(', ', - rec('225','v'), - rec('225','w') - ), -); +#_debug(3); -marc('440','x', - rec('225','x') -); +marc_original_order('440','225'); -marc('440','a', - rec('225','b'), -); +#marc_compose('440', +# 'a', suffix( +# rec('225','i') ? '. ' : +# '', +# rec('225','a'), +# ), +# 'p', suffix( +# ( ! rec('225','x') && rec('225','i') && rec('225','v') ) ? ' ; ' : +# ( rec('225','i') && rec('225','x') ) ? ', ' : +# '', +# rec('225','i'), +# ), +# 'x', suffix( +# ( rec('225','x') && rec('225','v') ) ? ' ; ' : +# '', +# rec('225','x'), +# ), +# 'v', rec('225','v'), +#); -### 490 +## ovo radi samo kad 225 nije ponovljivo + +#if ( +# count( lookup( +# sub { 1 }, +# 'ffps','libri', +# sub { rec('225','a') } +# ) ) > 1 +#) { + +#marc_compose('440', +# 'a', suffix( +# ( rec('225','x') ) ? ', ' : +# ( rec('225','v') || rec('225','w') ) ? ' ; ' : +# ( rec('225','h') || rec('225','i') ) ? '. ' : +# '', +# join_with(' / ', +# join_with(' : ', +# join_with(' = ', +# rec('225','a'), +# rec('225','d'), +# ), +# rec('225','e'), +# ), +# rec('225','f'), +# ), +# ), +# 'x', suffix( +# ( rec('225','x') && rec('225','v') ) ? ' ; ' : +# ( rec('225','x') && ( rec('225','h') || rec('225','i') ) ) ? '. ' : +# '', +# rec('225','x'), +# ), +# 'v', suffix( +# ( rec('225','v') && rec('225','h') || rec('225','i') ) ? '. ' : +# '', +# join_with('; ', +# rec('225','v'), +# ) +# ), +# 'n', suffix( +# ( rec('225','h') && rec('225','p') || rec('225','y') ) ? ', ' : +# '', +# rec('225','h'), +# ), +# 'p', suffix( +# ( rec('225','i') && rec('225','x') ) ? ', ' : +# ( rec('225','i') && rec('225','v') ) ? ' ; ' : +# '', +# rec('225','i'), +# ), +# 'x', suffix( +# ( rec('225','y') && rec('225','v') ) ? ' ; ' : +# '', +# rec('225','y'), +# ), +# 'v', rec('225','w'), +# ); +# +# marc_compose('440', +# 'a', suffix( +# rec('225','k') ? ' ; ' : +# '', +# join_with(' / ', +# rec('225','b'), +# rec('225','j') +# ), +# ), +# 'v', +# rec('225','k'), +# ); +# +# +# marc_compose('440', +# 'a', suffix( +# rec('225','s') ? ' ; ' : +# '', +# join_with(' / ', +# rec('225','c'), +# rec('225','r') +# ), +# ), +# 'v', +# rec('225','s'), +# ); + +#} + +#if ( rec('225','i') ) { +# marc('440','p', +# prefix('. ', +# rec('225','i') +# ), +# ); +#} # -#marc('490','a', -# rec('225','a') -#); +#if ( rec('225','v') ) { +# marc('440','v', +# prefix(' ; ', +# rec('225','v'), +# ), +# ); +#} + +#_debug(0); -### 500 +### 50x marc('500','a', rec('300') @@ -356,6 +612,9 @@ rec('314') ); +### 502 - bilješka o disertacijama +# odgovarajućeg polja nema u originalnim podacima. možda se može pretpostaviti? + ### 504 marc('504','a', @@ -379,6 +638,15 @@ ); } +if ( config() =~ m/ffan/ ) { + marc_indicators('505', '0', ' '); + marc('505','a', + regex('s/[<>]//g', + rec('330') + ) +); +} + ## napomene uz konverziju polja 330: @@ -397,15 +665,15 @@ ); } -# FFTU 330 - ??? -if ( config() =~ m/fftu/ ) { - marc('520','a', - rec('330') - ); -} +### 526 - STUDY PROGRAM INFORMATION NOTE + +marc_indicators('526', 8, ' '); +marc('526','a', + rec('996') +); -### 538 +### 538 - zahtjevi sustava marc('538','a', rec('337','a') @@ -476,7 +744,10 @@ marc('700','a', - rec('702','a'), + join_with(', ', + rec('702', 'a'), + rec('702', 'b') + ) ); @@ -546,9 +817,9 @@ # rec('200','c') # ); - marc('740','a', - rec('200','k') - ); +marc('740','a', + rec('200','k') +); # } else { @@ -560,6 +831,33 @@ ### generiranje zapisa o nakladničkoj cjelini i povezivanje podređenog zapisa s nadređenim +if ( + rec('225','a') # da li je nakladnička cjelina? +) { + +my $series_key = +join_with('', + rec('225','a'), + rec('210','a'), + rec('210','b'), +); + +my $series = get( $series_key ); + +if ($series) { + warn "nije novi"; +} else { + +$series = join_with('', + config(), + 'LS', + rec('000') +); + +set( $series_key => $series ); + +} # $series +} # nakladnička cjelina my $series_key = join_with('', rec('225','a'), @@ -574,9 +872,7 @@ marc('760','w', get( $series_key ) ); - } - ### testing # # my $dup_key = join_with('', @@ -598,178 +894,47 @@ # -### višerazinci -# odvojiti u posebnu datoteku i dokumentirati - - -if ( rec('230') ) { - - marc_duplicate(); - - marc_remove('035'); - marc('035','6', - join_with('', - config(), - rec('000'), - '-', - id(), - ) - ); - - - marc_remove('245'); - - if ( rec('230','a') ) { - marc_compose('245', - 'a', suffix( - rec('230','b') ? '. ' : - rec('230','k') ? ' ; ' : - rec('230','d') ? ' = ' : - rec('230','e') ? ' : ' : - rec('230','f') ? ' / ' : - '.', - rec('230','a') - ), - 'b', - join_with(' ; ', - rec('230','k'), - ), - 'b', rec('230','d'), - 'b', - join_with(' : ', - rec('230','e'), - ), - 'c', - join_with(' ; ', - rec('230','f'), - ), - ); - - } else { - - marc_compose('245', - 'a', suffix( - rec('230','b') ? '. ' : - rec('230','k') ? ' ; ' : - rec('230','d') ? ' = ' : - rec('230','e') ? ' : ' : - rec('230','f') ? ' / ' : - '.', - rec('200','a') - ), - 'b', - join_with(' ; ', - rec('230','k'), - ), - 'b', rec('230','d'), - 'b', - join_with(' : ', - rec('230','e'), - ), - 'c', - join_with(' ; ', - rec('230','f'), - ), - 'n', rec('230','v'), - ); - - } - - marc_remove('260'); +## 852 - lokacija -# marc_original_order('260', '250'); +marc_indicators('852', 4, ' '); - marc('260','c', - rec1('251') - ); +marc('852','j', + join_with(' ', + rec('990') + ) +); +## 876 - item information - basic bibliographic unit -# marc('260','a', -# rec('251','a') -# ); -# marc('260','b', -# rec('251','c') -# ); -# marc('260','c', -# rec('251','d'), -# rec1('251') -# ); +marc('876','a', + rec('991'), +); - marc_remove('300'); - marc('300','a', - rec('260') - ); +## 886 - former marc - marc_remove('440'); - marc('440','a', - rec('270') - ); +marc_indicators('886', 2, ' '); - marc_remove('500'); - marc('500','a', - rec('280') - ); +marc('886','2', + 'ffmarc' +); - marc_remove('020'); - marc('020','a', - rec('290') - ); +marc('886','a', + '994' +); - marc_indicators('774', 0, ' '); - marc('774','g', - rec('230','v') - ); - - marc('774','t', - rec('200','a') - ); - - marc('774','w', +marc('886','b', + join_with(''. + '##^a', join_with('', - config(), - rec('000') + prefix('^a', + rec('994','a'), + ), + prefix('^b', + rec('994','b') + ) ) - ); - - -} - -################################## -## ## -## pomoćni ispisi - privremeno! ## -## ## -################################## - -if ( ! rec('464') && rec('200','c') ) { - marc('002', - 'ima-200c-nema-464' - ); -} - -if ( ! rec('464') && rec('200','k') ) { - marc('003', - 'ima-200k-nema-464' - ); -} - -if ( ! ( rec('200','c') || rec('200','k') ) && rec('464') ) { - marc('004', - 'ima-464-nema-200c-ili-200k' - ); -} - - - -#_debug(2); - -if ( rec('200') =~ m/prev/ ) { - marc('005', - 'prijevod' - ); -} - -#_debug(0); - + ) +); -} +} # polje 200a