--- trunk/conf/normalize/ff-libri.pl 2006/11/03 20:41:12 773 +++ trunk/conf/normalize/ff-libri.pl 2007/04/01 12:26:25 807 @@ -1,15 +1,19 @@ -# ne konvertira se ako nema polje 200^a +######################################################################### +## ## +## 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 +### LEADER # raspraviti 17,18 -# -# u nekim knjižnicama koristi se 999a i 999b -# -# vrijedi za ffan... +# 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'); @@ -23,15 +27,18 @@ marc_leader('19','r'); } -# 001 polje - Voyager -# -# privemeno koristimo 0356 umjesto 0359, zato što marclint 9 prijavljuje kao grešku -# u marc 035a - System Number - ?? -# NSK zapisuje Voyagerov ID (001) - kako ??? +### 001 - Voyager + +### 008 + +### 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('035','6', -join_with('', +join_with(' ', # config('input normalize path'), # config('name'), config(), @@ -44,15 +51,18 @@ ); -# u FFSF bazama postoji nekoliko zaredanih ISBN, odvojenih s '. - ' +### 020 +# postoji modify -> drugi ISBN počinje prefixom "ISBN" koji se miče (sfb) marc('020','a', - rec('10') + regex('s/ ISBN //g', + rec('10') + ) ); -# u polje 040a - prefiks HR ? -# NSK ima HR NSB (možda u novijim zapisima ima NSK?) +### 040 +# za sve je isti marc('040','a', 'HR FFZG' @@ -66,30 +76,130 @@ 'HR PPIAK' ); -if ( rec('300') && first(rec('300')) =~ m/Prijevod/) { + +### 041 indikatori +# pretpostavke o indikatorima: +# +# 1. Ako postoji polje 300 i prvo pojavljivanje tog polja sadrži /Prijevod/ , i1 = 1 +# (Da li je napomena uvijek pisana?) +# +# 2. Podatak o prevodiocu u 200g. Problem: različiti oblici riječi, različiti jezici. +# +# 3. Ako u UDK oznaci postoji "=", bez zagrada, onda je to prijevod +# (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./ ) { marc_indicators('041', 1, ' '); } else { marc_indicators('041', 0, ' '); } -## naći primjer u NSK +### 041 +# ponovljivo polje konvertira se u ponovljivo potpolje + +#_debug(2); marc_repeatable_subfield('041','a', rec('101') ); +#_debug(0); + + +### 080 +# 675 podpolja b, c, d ... - što s njima ??? + +marc('080','a', + rec('675','a') +); + + +### 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 + + +marc('084','a', + rec('686') +); + +### 100 +# I1 = 0 ako je pseudonim (ima 700a, nema 700b) -# indikatori za članove. treba uvjetovati prema jezicima !! +if ( rec('700','a') && ! rec('700','b') ) { + marc_indicators('100', 0, ' '); +} else { + marc_indicators('100', 1, ' '); +} + +marc('100','a', + join_with(', ', + rec('700', 'a'), + rec('700', 'b') + ) +); + + +### 111 i 110 +# provjeriti ispise naslova iz svake baze - moguće su greške. +# ovo vrijedi za FFSFB + +if ( rec('710','f') ) { + +marc_indicators('111', 2, ' '); + +marc_compose('111', + 'a', rec('710','a'), + 'e', rec('710','b'), + 'n', rec('710','d'), + 'd', rec('710','f'), + 'c', rec('710','e'), +); + + +} else { + +marc_indicators('110', 2, ' '); +marc('110','a', + rec('710','a') +); + +marc('110','c', + rec('710','c') +); + +} + + +### 245 indikatori +# i1 = 1 za sve zapise +# 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); if ( ( rec('200','a') =~ m/^Die /) || ( rec('200','a') =~ m/^Das /) || ( rec('200','a') =~ m/^The /) ) { - marc_indicators('245', 0, 4); -} else { - marc_indicators('245', 0, 0); -} + marc_indicators('245', 1, 4); +} -#_debug(3); +if ( ( rec('200','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) { + marc_indicators('245', 1, 2); +} + +if ( ( rec('200','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) { + marc_indicators('245', 1, 2); +} +### 245 +# redoslijed polja + +#_debug(3); marc_compose('245', 'a', suffix( rec('200','b') ? '. ' : @@ -100,7 +210,7 @@ '.', rec('200','a') ), - 'h', rec('200','b'), +# 'h', rec('200','b'), 'b', suffix( ( rec('200','k') && rec('200','f') ) ? ' / ' : ' ', @@ -121,18 +231,21 @@ ), ), -# ovo trenutno radi za slučaj kad f nije ponovljivo i kad uvijek postoje c i f u paru !!! - 'c', join_with('. ', - rec('200','f'), - rec('200','c'), + 'c', rec('200','f'), + +# append to last subfield + '+', prefix('. ', + rec('200','c') ), -# FIXME append to last subfield -# '+', prefix('. ', rec('200','c') ), ); + #_debug(0); + +### 250 + marc('250','a', suffix( rec('205','f') ? ' / ' : @@ -145,19 +258,21 @@ rec('205','f') ); + +### 260 # ponovljiva potpolja u originalnom redosljedu marc_original_order('260', '210'); +### 300 # provjeriti interpunkcije !! -# u NSK nesto ne stima marc('300','a', suffix( - rec('215','c') ? ' : ' : - rec('215','d') ? ' ; ' : - rec('215','e') ? ' + ' : + rec('215','c') ? ' : ' : + rec('215','d') ? ' ; ' : + rec('215','e') ? ' + ' : ' ', rec('215','a') ) @@ -165,8 +280,8 @@ marc('300','b', suffix( - ( rec('215','c') && rec('215','d') ) ? ' ; ' : - ( rec('215','c') && rec('215','e') ) ? ' + ' : + ( rec('215','c') && rec('215','d') ) ? ' ; ' : + ( rec('215','c') && rec('215','e') ) ? ' + ' : ' ', rec('215','c') ) @@ -185,45 +300,53 @@ ); -# provjeriti +### 440 +# 2.ind. prema jeziku i članu -marc_indicators('490', 0, ' '); +marc_indicators('440', ' ', '0'); + +marc('440','a', + join_with(' : ', + rec('225','a'), + join_with(' / ', + rec('225','e'), + rec('225','f') + ) + ) +) ; -marc('490','a', - rec('225','a') +marc('440','n', + rec('225','h') ); -marc('490','v', +marc('440','p', + rec('225','i') +); + +marc('440','v', join_with(', ', rec('225','v'), rec('225','w') ), ); -marc('490','x', +marc('440','x', rec('225','x') ); +marc('440','a', + rec('225','b'), +); + + +### 490 +# #marc('490','a', -# join_with(' : ', -# rec('225','a'), -# join_with(" = ", -# rec('225','d'), -# join_with(" / ", -# rec('225','e'), -# rec('225','f') -# ) -# ) -# ) +# rec('225','a') #); -#marc('490','v', -# join2_with(225, 'v', ' , ', 225,'w'); -# join_with(', ', -# rec('225','v'), -# rec('225','w') -# ) -#); + +### 500 marc('500','a', rec('300') @@ -241,6 +364,11 @@ rec('314') ); +### 502 - bilješka o disertacijama +# odgovarajućeg polja nema u originalnim podacima. možda se može pretpostaviti? + +### 504 + marc('504','a', rec('320') ); @@ -250,7 +378,9 @@ # u LOC konv. tablici stoji 327 (NP) u 505 (NR) # standard i validacije dopuštaju 501 (R) i 505 (R) +## 505 ## FFPS 327 - sadrzaj + if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) { marc_indicators('505', '0', ' '); marc('505','a', @@ -261,10 +391,14 @@ } + ## 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 + # FFPS 330 (NP) - sažetak if ( config() =~ m/ffps/ ) { marc('520','a', @@ -281,53 +415,39 @@ ); } + +### 538 + marc('538','a', rec('337','a') ); -# možda i polje 520y - jezik napomene ako je uvijek isti jezik +### 246 marc_indicators('246', 1, 3); marc('246','a', rec('532') ); +### 655 + marc_indicators('655', ' ', 4); marc('655','a', rec('608') ); +### 653 + marc_indicators('653', 0, ' '); marc('653','a', rec('610') ); -# 675 podpolja c, d ... - što s njima ??? - -marc('080','a', - rec('675','a') -); - -# 084 je 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 - -marc('084','a', - rec('686') -); +#_debug(2); -marc_indicators('100', 1, ' '); -marc('100','a', - join_with(', ', - rec('700', 'a'), - rec('700', 'b') - ) -); -#_debug(2); +### 700 marc_indicators('700', 1, ' '); @@ -396,8 +516,7 @@ ); ## 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') # ); @@ -427,217 +546,105 @@ #_debug(0); -if ( 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') -); - - -} else { - -marc_indicators('110', 2, ' '); -marc('110','a', - rec('710','a') -); - -marc('110','c', - rec('710','c') -); - -}; +### 740 marc_indicators('740', 0, ' '); -if ( ! rec('464') ) { -marc('740','a', - rec('200','c') -); +# if ( ! rec('464') ) { +# marc('740','a', +# rec('200','c') +# ); marc('740','a', rec('200','k') ); -} else { -marc('740','a', - rec('464','a') -); -}; - +# } else { +#marc('740','a', +# rec('464','a') +#); -## višerazinci +# }; -if ( rec('230') ) { +### generiranje zapisa o nakladničkoj cjelini i povezivanje podređenog zapisa s nadređenim - marc_duplicate(); - marc_remove('035'); - marc('035','6', - join_with('', - config(), - rec('000'), - '-', - id(), - ) - ); +my $series_key = join_with('', + rec('225','a'), + rec('210','a'), + rec('210','b'), +); +if ($series_key) { - marc_remove('245'); + marc_indicators('760', 0, ' '); - 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'), - ), + marc('760','w', + get( $series_key ) ); - - } 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'); - -# marc_original_order('260', '250'); +} - marc('260','c', - rec1('251') - ); +### testing +# +# my $dup_key = join_with('', +# rec('200','a'), +#); +# +#if ($dup_key) { +# marc('995','a', +# get( $dup_key ) +# ); +#} +# +# +# marc_indicators('776', 0, ' '); +# +# marc('776','a', +# rec('452','1') +# ); +# -# marc('260','a', -# rec('251','a') -# ); -# marc('260','b', -# rec('251','c') -# ); -# marc('260','c', -# rec('251','d'), -# rec1('251') -# ); - marc_remove('300'); - marc('300','a', - rec('260') +################################## +## ## +## pomoćni ispisi - privremeno! ## +## ## +################################## + +if ( ! rec('464') && rec('200','c') ) { + marc('002', + 'ima-200c-nema-464' ); +} - marc_remove('490'); - marc('490','a', - rec('270') +if ( ! rec('464') && rec('200','k') ) { + marc('003', + 'ima-200k-nema-464' ); +} - marc_remove('500'); - marc('500','a', - rec('280') +if ( ! ( rec('200','c') || rec('200','k') ) && rec('464') ) { + marc('004', + 'ima-464-nema-200c-ili-200k' ); +} - marc_remove('020'); - marc('020','a', - rec('290') - ); - marc_indicators('774', 0, ' '); - marc('774','g', - rec('230','v') - ); - - marc('774','t', - rec('200','a') - ); - - marc('774','w', - join_with('', - config(), - rec('000') - ) - ); - -}; +#_debug(2); -marc_indicators('776', 0, ' '); +if ( rec('200') =~ m/prev/ ) { + marc('005', + 'prijevod' + ); +} -marc('776','a', - rec('452','1') -); +#_debug(0); -marc('900','a', - lookup( - sub { rec('000') }, - 'ffps','libri', - sub { rec('200','a') }, - ) -); -marc('901','a', - lookup( - sub { 'NSK' }, - 'nsk','baza', - sub { rec('200','a') }, - ) -); -} +} # polje 200a