--- trunk/conf/normalize/ff-libri.pl 2006/10/25 11:02:36 758 +++ trunk/conf/normalize/ff-libri.pl 2007/02/04 12:37:42 795 @@ -1,14 +1,18 @@ -if ( rec('200','a') ) { +################################################################################## +## Ova datoteka sadrži pravila za generiranje MARC21 ISO 2709 izlazne datoteke. ## +## Ulazni format je CDS/ISIS sa zapisima u UNIMARC-u. ## +################################################################################## -# Leader -# raspraviti 17,18 -# u nekim knjižnicama koristi se 999a i 999b +# konvertira se ako postoji polje 200^a +if ( rec('200','a') ) { -# vrijedi za ffan... +### LEADER +# raspraviti 17,18 +# 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'); @@ -22,13 +26,18 @@ marc_leader('19','r'); } +### 001 - Voyager -# 001 polje - 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? -# privemeno koristimo 0356 umjesto 0359, zato što marclint 9 prijavljuje kao grešku marc('035','6', -join_with('', +join_with(' ', # config('input normalize path'), # config('name'), config(), @@ -40,17 +49,19 @@ ) ); -# u marc 035a treba dodati System Number - -# NSK zapisuje Voyagerov ID (001) - kako ??? -# 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 možda još dodati prefiks HR -# NSK ima HR NSB (možda u novijim zapisima ima NSK?) + +### 040 +# za sve je isti marc('040','a', 'HR FFZG' @@ -64,29 +75,132 @@ '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, ' '); } -## naci 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 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) + +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. + +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') +); + +}; + + +### 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); +} +### 245 +# redoslijed polja + +#_debug(3); marc_compose('245', 'a', suffix( rec('200','b') ? '. ' : @@ -97,7 +211,7 @@ '.', rec('200','a') ), - 'h', rec('200','b'), +# 'h', rec('200','b'), 'b', suffix( ( rec('200','k') && rec('200','f') ) ? ' / ' : ' ', @@ -118,18 +232,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') ? ' / ' : @@ -142,19 +259,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') ) @@ -162,8 +281,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') ) @@ -182,54 +301,75 @@ ); -# provjeriti +### 440 +# 2.ind. prema jeziku i članu + +marc_indicators('440', ' ', '0'); -marc_indicators('490', 0, ' '); +marc('440','a', + join_with(' : ', + rec('225','a'), + join_with(' / ', + rec('225','e'), + rec('225','f') + ) + ) +) ; + +marc('440','n', + rec('225','h') +); -marc('490','a', - rec('225','a') +marc('440','p', + rec('225','i') ); -marc('490','v', +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') ); marc('500','a', + rec('305') +); + +marc('500','a', + rec('307') +); + +marc('500','a', 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') ); @@ -239,9 +379,11 @@ # 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', '1', ' '); + marc_indicators('505', '0', ' '); marc('505','a', regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g', rec('327') @@ -250,10 +392,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', @@ -271,48 +417,38 @@ } -# možda i polje 520y - jezik napomene ako je uvijek isti jezik +### 538 + +marc('538','a', + rec('337','a') +); + + +### 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, ' '); @@ -381,8 +517,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') # ); @@ -412,195 +547,106 @@ #_debug(0); -if ( rec('710','f') ) { -marc_indicators('111', 2, ' '); -marc('111','a', - rec('710','a') -); -marc('111','c', - rec('710','e') -); +### 740 -marc('111','d', - rec('710','f') -); - -marc('111','e', - rec('710','b') -); - -marc('111','n', - rec('710','d') -); +marc_indicators('740', 0, ' '); +# if ( ! rec('464') ) { +# marc('740','a', +# rec('200','c') +# ); -} else { - -marc_indicators('110', 2, ' '); -marc('110','a', - rec('710','a') -); + marc('740','a', + rec('200','k') + ); -marc('110','c', - rec('710','c') -); +# } else { -}; +#marc('740','a', +# rec('464','a') +#); +# }; -marc_indicators('740', 0, ' '); +### generiranje zapisa o nakladničkoj cjelini i povezivanje podređenog zapisa s nadređenim -if ( ! rec('464') ) { -marc('740','a', - rec('200','c') -); -marc('740','a', - rec('200','k') +my $series_key = join_with('', + rec('225','a'), + rec('210','a'), + rec('210','b'), ); -} else { -marc('740','a', - rec('464','a') -); -}; +if ($series_key) { + marc_indicators('760', 0, ' '); + + marc('760','w', + get( $series_key ) + ); +} -## višerazinci +### 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') +# ); +# -if ( rec('230') ) { - marc_duplicate(); - marc_remove('035'); - marc('035','6', - join_with('', - config(), - rec('000'), - '-', - id(), - ) +################################## +## ## +## pomoćni ispisi - privremeno! ## +## ## +################################## + +if ( ! rec('464') && rec('200','c') ) { + marc('002', + 'ima-200c-nema-464' ); +} - - 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'), - ), +if ( ! rec('464') && rec('200','k') ) { + marc('003', + 'ima-200k-nema-464' ); - - } 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') +if ( ! ( rec('200','c') || rec('200','k') ) && rec('464') ) { + marc('004', + 'ima-464-nema-200c-ili-200k' ); +} -# 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') - ); - marc_remove('490'); - marc('490','a', - rec('270') - ); +#_debug(2); - marc_remove('500'); - marc('500','a', - rec('280') +if ( rec('200') =~ m/prev/ ) { + marc('005', + 'prijevod' ); +} - marc_remove('020'); - marc('020','a', - rec('290') - ); +#_debug(0); - marc_indicators('774', 0, ' '); - marc('774','g', - rec('230','v') - ); - - marc('774','t', - rec('200','a') - ); - - marc('774','w', - join_with('', - config(), - rec('000') - ) - ); - -}; -} +} # polje 200a