--- trunk/conf/normalize/ff-libri.pl 2007/04/05 21:48:41 816 +++ trunk/conf/normalize/ff-libri.pl 2007/10/10 21:00:48 903 @@ -19,21 +19,29 @@ 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 +### 003 +# Pojasniti upotrebu polja + ### 007 +# pojasniti upotrebu polja marc_fixed('007',00,'ta'); ### 008 +# što zapisati u polje kad datum nije poznat? if ( rec('994','c') ) { marc_fixed('008','00', @@ -54,26 +62,32 @@ #) #); -## FIXME treba velika slova pretvoriti u mala - marc_fixed('008','35', - first( rec('101') ) + 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? -# kako mora izgledati polje 035$9? može li sadržavati slova i razmake? - +# marc 035a - System Number - Voyagerov ID (001) +# polje 035$9 može 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'), @@ -81,19 +95,9 @@ ) ); - -### 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' @@ -108,7 +112,10 @@ ); -### 041 indikatori +### 041 + +# indikatori +# # pretpostavke o indikatorima: # # 1. Ako postoji polje 300 i ono sadrži /Prijevod/ ili /Izv. stv. nasl./, i1 = 1 @@ -124,7 +131,7 @@ #if ( rec('675') =~ m/\d=\d/ ) { -if ( grep( m/Prijevod/, rec('300')) || grep( m/Izv. stv. nasl./, rec('300') ) ) { +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, ' '); @@ -135,11 +142,15 @@ # ponovljivo polje konvertira se u ponovljivo potpolje #_debug(2); + marc_repeatable_subfield('041','a', rec('101') ); + #_debug(0); +### 044 + ### 080 # 675 podpolja b, c, d ... - što s njima ??? @@ -148,18 +159,30 @@ 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 -# NSK definira i prelazak polja 686 u 084, u skladu s LOC konv. tablicom -# polje 686 koristi FFPS - +# NSK konvertira polje 686 u 084, u skladu s LOC konv. tablicom +# polje 686 koristi FFPS. još netko? marc('084','a', rec('686') ); ### 100 + # I1 = 0 ako je pseudonim (ima 700a, nema 700b) if ( rec('700','a') && ! rec('700','b') ) { @@ -180,34 +203,63 @@ # 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_compose('111', - 'a', rec('710','a'), + 'a', suffix( + rec('710','b') ? '.' : + '', + rec('710','a'), + ), 'e', rec('710','b'), - 'n', rec('710','d'), - 'd', rec('710','f'), - 'c', rec('710','e'), + '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','c', - rec('710','c') +marc('110','b', + rec('710','b') ); + if ( rec('710','c') ) { + marc('110','c', + surround('(', ')', rec('710','c')) + ); + } + } -### 245 indikatori +### 245 + +# indikatori +# # 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 @@ -225,6 +277,7 @@ if ( ( rec('200','a') =~ m/^Die /) || ( rec('200','a') =~ m/^Das /) || + ( rec('200','a') =~ m/^Der /) || ( rec('200','a') =~ m/^The /) ) { marc_indicators('245', $i1, 4); } @@ -237,31 +290,66 @@ marc_indicators('245', $i1, 2); } -### 245 -# redoslijed polja važan # podpolja i interpunkcije pripremljeni u modify #_debug(3); marc_compose('245', 'a', suffix( - ( ! rec('200','b') && ( rec('200','f') || rec('200','c') ) ) ? ' / ' : ' ', + ( ! ( rec('200','d') || rec('200','e') || rec('200','k') ) ) && ( rec('200','f') ) ? ' / ' : + ( rec('200','d') ) ? ' = ' : + ( rec('200','e') ) ? ' : ' : + ( rec('200','k') ) ? ' ; ' : + '', rec('200','a'), ), 'b', suffix( - ( rec('200','b') && rec('200','f') ) ? ' / ' : - ( rec('200','b') && rec('200','c') ) ? '. ' : - ' ', - rec('200','b'), + ( rec('200','d') && rec('200','f') ) ? ' / ' : + ( rec('200','d') && rec('200','c') ) ? '. ' : + '', + rec('200','d'), + ), + 'b', suffix( + ( rec('200','e') && rec('200','f') ) ? ' / ' : + ( rec('200','e') && rec('200','c') ) ? '. ' : + '', + rec('200','e'), + ), + 'b', suffix( + ( rec('200','k') && rec('200','f') ) ? ' / ' : + ( rec('200','k') && rec('200','c') ) ? '. ' : + '', + rec('200','k'), ), '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', @@ -295,7 +383,7 @@ # ), # ), # 'c', rec('200','f'), -### append to last subfield +## append to last subfield # '+', prefix('. ', # rec('200','c') # ), @@ -306,18 +394,17 @@ ### 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 @@ -327,7 +414,7 @@ ### 300 -# provjeriti interpunkcije !! +# urediti interpunkcije za sve kombinacije marc('300','a', suffix( @@ -360,6 +447,9 @@ rec('215','e') ); +### 362 +# brojčani podaci za nakladničku cjelinu +# ??? ### 440 # 2.ind. prema jeziku i članu @@ -380,32 +470,136 @@ marc_indicators('440', ' ', 2); } -marc('440','a', - rec('225','a'), -); +#_debug(3); -marc('440','n', - rec('225','h') -); +marc_original_order('440','225'); -marc('440','p', - rec('225','i') -); -marc('440','v', - rec('225','v'), -); +#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'), +#); -marc('440','x', - rec('225','x') -); +## ovo radi samo kad 225 nije ponovljivo +#if ( +# count( lookup( +# sub { 1 }, +# 'ffps','libri', +# sub { rec('225','a') } +# ) ) > 1 +#) { -### 490 +#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); ### 50x @@ -441,7 +635,7 @@ # standard i validacije dopuštaju 501 (R) i 505 (R) ## 505 -## FFPS 327 - sadrzaj +# FFPS 327 - sadrzaj if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) { marc_indicators('505', '0', ' '); @@ -462,13 +656,11 @@ } - -## napomene uz konverziju polja 330: # NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica ### 520 -# možda i polje 520y - jezik napomene ako je uvijek isti jezik +# možda i polje 520y - jezik napomene ako je uvijek isti jezik? # FFPS 330 (NP) - sažetak if ( config() =~ m/ffps/ ) { @@ -480,6 +672,7 @@ } ### 526 - STUDY PROGRAM INFORMATION NOTE +# provjeriti za svaku bazu sta je tocno u 996? marc_indicators('526', 8, ' '); @@ -558,7 +751,10 @@ marc('700','a', - rec('702','a'), + join_with(', ', + rec('702', 'a'), + rec('702', 'b') + ) ); @@ -586,39 +782,9 @@ ) ); -## 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? -# -# marc('700','a', -# rec('330','a') -# ); -# -# -# marc('700','a', -# rec('330','b') -# ); -# -# marc('700','a', -# rec('330','c') -# ); -# -# -# marc('700','a', -# rec('330','d') -# ); -# -# marc('700','a', -# rec('330','e') -# ); -# -# marc('700','a', -# rec('330','f') -# ); - #_debug(0); - - ### 740 marc_indicators('740', 0, ' '); @@ -640,8 +806,35 @@ # }; -### generiranje zapisa o nakladničkoj cjelini i povezivanje podređenog zapisa s nadređenim +# 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'), @@ -657,7 +850,6 @@ get( $series_key ) ); } - ### testing # # my $dup_key = join_with('', @@ -679,7 +871,7 @@ # -## 852 - lokacija +### 852 - lokacija marc_indicators('852', 4, ' '); @@ -689,13 +881,13 @@ ) ); -## 876 - item information - basic bibliographic unit +### 876 - item information - basic bibliographic unit marc('876','a', rec('991'), ); -## 886 - former marc +### 886 - former marc marc_indicators('886', 2, ' ');