--- trunk/conf/normalize/ff-libri.pl 2008/10/26 15:57:37 1118 +++ trunk/conf/normalize/ff-libri.pl 2008/10/26 15:58:55 1119 @@ -4,55 +4,48 @@ # UNIMARC formatu, sa višestrukim odstupanjima od standarda. -## lookup rezultat za sabrana djela -my $sabrana; +## lookup rezultat za sabrana djela (probna procedura za filozofiju od koje se odustalo) +# my $sabrana; -## konvertira se ako postoji polje 200^a +## sve skupa se konvertira tek ako postoji polje 200^a if ( rec('200','a') ) { ### LEADER -## LDR 05 - c = pregledan ; n = new -## provjeriti za svaku bazu koje polje koristi -## 999^aP - SFM - -if ( rec('999','a') && rec('999','a') =~ m/(pregledan|P)/i) { - marc_leader('05','c'); -} else { - marc_leader('05','n'); -} +## LDR 05 - n - new +marc_leader('05','n'); ## LDR 06 - a - language material - - marc_leader('06','a'); +marc_leader('06','a'); ## LDR 07 - m - Monograph/item +marc_leader('07','m'); -if ( config() =~ m/fffi/ ) { - $sabrana = - lookup( - sub{ rec('A') }, - 'fffi','sabrana', - sub { rec('B') }, - sub { rec('000') } - ); -} - -if ( ! $sabrana ) { - marc_leader('07','m'); -} else { - marc_leader('07','c'); -} +# ovo je bila proba za filozofiju +# if ( config() =~ m/fffi/ ) { +# $sabrana = +# lookup( +# sub{ rec('A') }, +# 'fffi','sabrana', +# sub { rec('B') }, +# sub { rec('000') } +# ); +# } +# +# if ( ! $sabrana ) { +# marc_leader('07','m'); +# } else { +# marc_leader('07','c'); +# } -## LDR 17 - Encoding level ; 7 - minimal level - marc_leader('17','7'); +## LDR 17 - Encoding level ; 7 - minimal level, u - unknown +marc_leader('17','u'); ## LDR 18 - i - isbd - marc_leader('18','i'); +marc_leader('18','i'); -## LDR 19 -# # - Not specified or not applicable; a - Set; b - Part with independent title; c - Part with dependent title +## LDR 19 - Multipart resource record level ; # - Not specified or not applicable, a - Set, b - Part with independent title, c - Part with dependent title #if ( ( ! $sabrana ) && ( rec('230') || rec('231') || rec('232') || rec('233') ) ) { # marc_leader('19','a'); @@ -73,12 +66,12 @@ ), ); } elsif ( rec('994','c') =~ m/\d{6}/ ) { - marc_fixed('008', 00, + marc_fixed('008','00', regex('s/^\d\d//', rec('994','c') ), ); - marc_fixed('008', '04', + marc_fixed('008','04', '01' ); } elsif ( rec('994','c') =~ m/\d{4}/ ) { @@ -87,9 +80,13 @@ rec('994','c') ), ); - marc_fixed('008', '02', + marc_fixed('008','02', '0101' ); +} else { + marc_fixed('008','00', + '010101' + ); } #warn( dump( @@ -101,30 +98,15 @@ ## 008 06 - Type of date/Publication status -## 008 07-10 - Date 1 - -## srediti sve moguće oznake za godine (06) +## 008 07-10 - Date 1 +## 008 11-14 - Date 2 ## 210d kroz modify postaje 210c if ( rec('210','c') ) { my $d1 = ''; my $d2 = ''; - if ( rec('210','c') =~ m/(\?)/ ) { - marc_fixed('008','06','q'); - if ( rec('210','c') =~ m/(\d{2})(--|__)/ ) { - $d1 = $1.'uu'; - } - if ( rec('210','c') =~ m/(\d{3})(-|_)/ ) { - $d1 = $1.'u'; - } - if ( rec('210','c') =~ m/(\d{4})/ ) { - $d1 = $1; - } - } elsif ( rec('210','c') =~ m/(\d{4})-/ ) { - if ( $sabrana ) { - marc_fixed('008','06','i'); - } else { - marc_fixed('008','06','m'); - } + if ( rec('210','c') =~ m/(\d{4})-/ ) { + marc_fixed('008','06','m'); if ( rec('210','c') =~ m/(\d{4})-/ ) { $d1 = $1; $d2 = '9999'; @@ -137,7 +119,45 @@ if ( rec('210','c') =~ m/(\d{4})/ ) { $d1 = $1; } + if ( rec('210','c') =~ m/(\d{2})(--|__)/ ) { + $d1 = $1.'uu'; + } + if ( rec('210','c') =~ m/(\d{3})(-|_)/ ) { + $d1 = $1.'u'; + } } + +# if ( rec('210','c') =~ m/(\?)/ ) { +# marc_fixed('008','06','q'); +# if ( rec('210','c') =~ m/(\d{2})(--|__)/ ) { +# $d1 = $1.'uu'; +# } +# if ( rec('210','c') =~ m/(\d{3})(-|_)/ ) { +# $d1 = $1.'u'; +# } +# if ( rec('210','c') =~ m/(\d{4})/ ) { +# $d1 = $1; +# } +# } elsif ( rec('210','c') =~ m/(\d{4})-/ ) { +# if ( $sabrana ) { +# marc_fixed('008','06','i'); +# } else { +# marc_fixed('008','06','m'); +# } +# marc_fixed('008','06','m') +# if ( rec('210','c') =~ m/(\d{4})-/ ) { +# $d1 = $1; +# $d2 = '9999'; +# } +# if ( rec('210','c') =~ m/-(\d{4})/ ) { +# $d2 = $1; +# } +# } else { +# marc_fixed('008','06','s'); +# if ( rec('210','c') =~ m/(\d{4})/ ) { +# $d1 = $1; +# } +# } marc_fixed('008','07',$d1); # 07-10 - Date 1 marc_fixed('008','11',$d2); # 07-10 - Date 1 @@ -148,12 +168,9 @@ } -## 008 11-14 - Date 2 -## 008 15-17 - Place of publication, production, or execution - što ako nema 102? -## raspraviti - -marc_fixed('008','15','xx'); +## 008 15-17 - Place of publication, production, or execution - ako nema 102, popunjava se s | +marc_fixed('008','15','|||'); #marc_fixed('008','15', # lc ( rec('102') ) @@ -178,7 +195,7 @@ lc( frec('101')) ); -## 008 38 - Modified record - razjasniti +## 008 38 - Modified record marc_fixed('008','38','|'); ## 008 39 - Cataloging source - d (other) @@ -194,6 +211,7 @@ marc_fixed('008','22','|'); ## 008 23 - Form of item +marc_fixed('008','23','|'); ## 008 24-27 - Nature of contents marc_fixed('008','24','||||'); @@ -218,9 +236,8 @@ marc_fixed('008','34','|'); ### 020 -## modify za polje 10 -> drugi ISBN počinje prefixom "ISBN" koji se miče (pr. u sfb) - -if ( frec('10') ne ( frec('290') ) ) { +## postoji modify za polje 10 -> drugi ISBN počinje prefixom "ISBN" koji se miče (pr. u sfb) +#if ( frec('10') ne ( frec('290') ) ) { if ( rec('10','a') !~ /pogre/ ) { marc('020','a', # isbn_13( @@ -241,7 +258,7 @@ marc('020','z', rec('10','z') ); -} +#} #warn( # dump( @@ -251,7 +268,8 @@ ### 035$ ## marc 035a - System Number -## polje može sadržavati slova i razmake, problem u pretraživanju ako ima zagrade, kako bi trebalo po standardu +## polje može sadržavati slova i razmake +## moguć problem u pretraživanju ako ima zagrade, kako bi trebalo po standardu marc('035','a', join_with('', @@ -259,7 +277,7 @@ # config('name'), 'HR-ZaFF ', config(), - 'L-', + 'L', # config('input name'), # id(), # rec('994','a'), @@ -292,6 +310,7 @@ ## (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.... +## ovo treba kasnije ispravljati #if ( rec('675') =~ m/\d=\d/ ) ? @@ -316,19 +335,18 @@ ); } - ### 041 - ## ponovljivo polje (101) konvertira se u ponovljivo potpolje (041a) - ## polje se koristi kad ima više od jednog jezika, ili kad se radi o prijevodu - #_debug(2); - -#_debug(0); +### 041 +## ponovljivo polje (101) konvertira se u ponovljivo potpolje (041a) +## koristi se kad ima više od jednog jezika, ili kad se radi o prijevodu +## nadopuniti ### 044 -## kako dobiti zemlju izdavanja? +## koristi se kad ima više zemalja izdavanja ### 080 ## 675 podpolja b, c, d ... - što s njima? - provjeriti za svaku bazu ## fi: abcd +## sk: ima \r\n na kraju marc('080','a', rec('675','a') @@ -352,6 +370,9 @@ ## NSK konvertira polje 686 u 084, u skladu s LOC konv. tablicom ## polje 686 koristi FFPS. još netko? +marc('084','2', + 'APA CC' +); marc('084','a', rec('686') ); @@ -375,7 +396,8 @@ ### formalna odrednica - iz 503 u 110, i1=0, i2=1 ### 111 i 110 -## konverzija u 110 ili 111 ovisno o postojanju/nepostojanju nekih polja - provjeriti ispise naslova iz svake baze - moguće su greške. +## provjeriti za svaku bazu +## konverzija u 110 ili 111 ovisno o postojanju/nepostojanju nekih polja - provjeriti ispise naslova iz svake zbirke - moguće su greške. ## popraviti interpunkciju # ovo vrijedi za FFSFB @@ -429,36 +451,36 @@ ## i2 = pretpostavlja se na temelju člana na početku naslova i jezika ## treba provjeriti -my $i1; +my $titleind1; if ( rec('700') || rec('710') ) { - $i1 = 1; + $titleind1 = 1; } else { - $i1 = 0; + $titleind1 = 0; } -marc_indicators('245', $i1, 0); +marc_indicators('245', $titleind1, 0); if ( rec('200','a') =~ m/^Einen / ) { - marc_indicators('245', $i1, 6); + marc_indicators('245', $titleind1, 6); } if ( rec('200','a') =~ m/^Eine / ) { - marc_indicators('245', $i1, 5); + marc_indicators('245', $titleind1, 5); } if ( rec('200','a') =~ m/^(Die|Das|Der|Ein|Les|Los|The) / ) { - marc_indicators('245', $i1, 4); + marc_indicators('245', $titleind1, 4); } if ( rec('200','a') =~ m/^(Um|Un|An|La|Le|Lo|Il) / ) { - marc_indicators('245', $i1, 3); + marc_indicators('245', $titleind1, 3); } if ( ( rec('101') =~ m/ENG/ ) && ( rec('200','a') =~ m/^A / ) ) { - marc_indicators('245', $i1, 2); -} + marc_indicators('245', $titleind1, 2); +} if ( rec('200','a') =~ m/^L / ) { - marc_indicators('245', $i1, 2); + marc_indicators('245', $titleind1, 2); } if ( rec('200','a') =~ m/^L'/ ) { - marc_indicators('245', $i1, 2); + marc_indicators('245', $titleind1, 2); } @@ -519,19 +541,17 @@ #_debug(0); ### 246 -## i1=1 ukoliko pravilo nalaze napomenu, ali napomenu necemo pisati ponovo u 500 -## i1=3 ako pravlo na nalze napomenu +## i1=1 ukoliko pravilo nalaže napomenu, ali napomenu necemo pisati ponovo u 500 +## i1=3 ako pravlo na nalaže napomenu ## vidi na wiki ## i2 - pogledati za svaku bazu sto su ti naslovi, pa onda oderditi indikatoda oderditi indikatoree - marc_indicators('246', 3, ' '); marc('246','a', rec('532') ); ### 250 -## zapisima koji nemaju potpolje, dodaje se ^a u modify - provjeriti - +## zapisima koji nemaju potpolje, dodaje se ^a u modify - provjeriti za svaku bazu marc_compose('250', 'a',suffix( rec('205','f') ? ' / ' : @@ -543,13 +563,11 @@ ### 260 ## ponovljiva potpolja u originalnom redosljedu - priprema u modify - - marc_original_order('260', '210'); +marc_original_order('260', '210'); ### 300 ## urediti interpunkcije za sve kombinacije - marc('300','a', suffix( rec('215','c') ? ' : ' : @@ -579,7 +597,9 @@ ); ### 362 - brojčani podaci za nakladničku cjelinu - to mi nemamo, polje se koristi samo za časopise - +## i1 = 0 - formalizirani oblik navoda +## i1 = 1 - neformalizirani +## i2 nema # if ( ! rec('225','z') ) { @@ -879,67 +899,66 @@ } ### 526 - STUDY PROGRAM INFORMATION NOTE -## provjeriti za svaku bazu sta je u 996? - +## u nekim bazame je to u 996 - provjeriti za svaku bazu sta je u 996? marc_indicators('526', 8, ' '); - marc('526','a', rec('996') ); ### 538 - zahtjevi sustava - marc('538','a', rec('337','a') ); -### 655 - -marc_indicators('655', ' ', 4); -marc('655','a', - rec('608') -); - -### 653 +### 653 - Index Term-Uncontrolled ## da li ponovljivo polje ili potpolje, pogledati u Koha tags - marc_indicators('653', ' ', ' '); marc('653','a', rec('610') ); +### 655 - Index Term-Genre/Form +marc_indicators('655', ' ', 4); +marc('655','a', + rec('608') +); + #_debug(2); ### 700 ## ako je u originalu ponovljivo polje treba bioti i konvertirano u ponovljivo !! -## ako ima samo podpolje a onda je pseudonim - popraviti indikator - -marc_indicators('700', 1, ' '); +## ako ima samo podpolje a onda je pseudonim - nakon konverzije treba provjeriti +if ( rec('701','a') =~ m/, / ) { + marc_indicators('700', 1, ' '); +} else { + marc_indicators('700', 0, ' '); +} marc('700','a', rec('701', 'a'), ); + marc('700','a', join_with(', ', rec('701', 'c'), rec('701', 'd') - ) + ), ); marc('700','a', join_with(', ', rec('701', 'e'), rec('701', 'f') - ) + ), ); marc('700','a', join_with(', ', rec('701', 'g'), rec('701', 'h') - ) + ), ); marc('700','a', - rec('702', 'a'), + rec('702','a'), ); marc('700','a', join_with(', ', @@ -962,10 +981,13 @@ #_debug(0); +## eventualno nadopuniti 710 i 711 - provjetiti da li u podacima postoji u ISIS-u -### 740 - sta s tim? -marc_indicators('740', 0, ' '); +### 740 - Added Entry - Uncontrolled Related/Analytical Title +## raspraviti +## nadopuniti prvi indikator prema članovima +marc_indicators('740', '0', ' '); # if ( ! rec('464') ) { # marc('740','a', @@ -984,8 +1006,7 @@ # }; -# ------------------------------------------------------------------- -### 760 w +### 760 w --------------------------------------------- ## generiranje zapisa o nakladničkoj cjelini i povezivanje podređenog zapisa s nadređenim #if ( @@ -1119,37 +1140,39 @@ # rec('293'), # ) #); -# + + ### 852 - ne koristimo, koristimo 942 i 952 -### 876 - item information - basic bibliographic unit +### 876 - item information - basic bibliographic unit (R) +## da li ovdje zapisati stare inventarne brojeve? #marc('876','a', # rec('991','t'), #); ### 886 - former marc # inicijale treba prebaciti u neko lokalno polje, a ovo polje nam ne treba - -marc_indicators('886', 2, ' '); -marc('886','2', - 'ffmarc' -); -marc('886','a', - '994' -); -marc('886','b', - join_with(''. - '##^a', - join_with('', - prefix('^a', - rec('994','a'), - ), - prefix('^b', - rec('994','b') - ) - ) - ) -); +# +# marc_indicators('886', 2, ' '); +# marc('886','2', +# 'ffmarc' +# ); +# marc('886','a', +# '994' +# ); +# marc('886','b', +# join_with(''. +# '##^a', +# join_with('', +# prefix('^a', +# rec('994','a'), +# ), +# prefix('^b', +# rec('994','b') +# ) +# ) +# ) +#); ### KOHA items @@ -1157,7 +1180,6 @@ 'LIB' ); - if ( grep( m/Posebni otisak/, rec('300') ) ) { marc('942','c', 'SEP' @@ -1168,48 +1190,70 @@ ); } +## 990 u sk ima \r\n na kraju + marc('942','d', join_with(' | ', rec('990') ) ); -if ( config() =~ m/ffan/ ) { - my $novasig1 = - lookup( - sub { rec('C') }, - 'ffan','mapirano', - sub { rec('B') }, - sub { rec('990') } - ); - my $novasig2 = - lookup( - sub { rec('C') . ' ' . rec('D') }, - 'ffan','starasig', - sub { rec('A') }, - sub { rec('000') }, - ); - marc('942','h', - $novasig1 +my $novasig1 = + lookup( + sub { rec('C') }, + 'ffiz','mapirano', + sub { rec('B') }, + sub { rec('990') } ); - marc('942','i', - $novasig2 +my $novasig2 = + lookup( + sub { rec('C') . ' ' . rec('D') }, + 'ffiz','starasig', + sub { rec('A') }, + sub { rec('000') }, ); -} +marc('942','h', + $novasig1 +); + +marc('942','i', + $novasig2 +); -if ( config() =~ m/ffsf|ffpo|fffi/ ) { - my $sig1 = +if ( config() =~ m/ffar/ ) { + my $novasig1 = lookup( - sub { rec('C') }, - 'fffi','signature', - sub { rec('B') }, - sub { frec('990') }, + sub { rec('E') }, + 'ffar','mapirano', + sub { rec('A') }, + sub { rec('000') } ); - if ( rec('700','a') ) { + if ( $novasig1 ) { marc('942','h', - $sig1, + $novasig1 ); + } else { + marc('942','h', + 'ARH' + ); + } + + +} + +if ( config() =~ m/ffsf|ffpo|fffi|ffar|ffsk/ ) { +# my $sig1 = +# lookup( +# sub { rec('C') }, +# 'fffi','signature', +# sub { rec('B') }, +# sub { frec('990') }, +# ); + if ( rec('700','a') ) { +# marc('942','h', +# $sig1, +# ); if ( rec('200','a') =~ m/^(The|Die|Das|Der|Ein|Les) / ) { marc('942','i', join_with(' ', @@ -1278,9 +1322,9 @@ ); } } elsif ( rec('710','a') ) { - marc('942','h', - $sig1, - ); +# marc('942','h', +# $sig1, +# ); if ( rec('200','a') =~ m/^(The|Die|Das|Der|Ein|Les) / ) { marc('942','i', join_with(' ', @@ -1349,9 +1393,9 @@ ); } } elsif ( rec('200','a') =~ m/^(The|Die|Das|Der|Ein|Les) / ) { - marc('942','h', - $sig1, - ); +# marc('942','h', +# $sig1, +# ); marc('942','i', regex('s/^.{4}(.{3}).*/$1/', uc ( rec('200','a') ) @@ -1359,19 +1403,19 @@ ); } else { - marc('942','h', - $sig1, - ); +# marc('942','h', +# $sig1, +# ); marc('942','i', regex('s/(^\w{3}).*/$1/', uc ( rec('200','a') ) ) ) } -} # if config() +} # if config() za oznaku primjerka if ( ( rec('230') || rec('231') || rec('232') || rec('233') ) ) { - warn "nema primjeraka"; + warn "skupni zapis - nema primjeraka"; } else { marc('952','8', rec('991','8') @@ -1392,5 +1436,15 @@ rec('991','y') ); } + +### LOKALNA POLJA +## 1. da li je zapis pregledan ili nije i datum kad je pregledan +## provjeriti za svaku bazu koje polje koristi +## SFM: 999^aP +## AN: 999 Pregledan +## raspraviti + + + } # polje 200a # } sig