From 59e21537fe244056d6d006454284af24ecd5a392 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 5 Jul 2006 00:12:08 +0000 Subject: [PATCH] rec and join_with now return '' if there are no results, so they are safe to use inside marc_compose git-svn-id: svn+ssh://mjesec/home/dpavlin/svn/webpac2/trunk@583 07558da8-63fa-0310-ba24-9fe276d99e06 --- conf/normalize/mapping.pl | 168 +++++++++++++++++++++++++++++++------- lib/WebPAC/Normalize.pm | 16 +++- 2 files changed, 151 insertions(+), 33 deletions(-) diff --git a/conf/normalize/mapping.pl b/conf/normalize/mapping.pl index 3a0d9fb..48e664a 100644 --- a/conf/normalize/mapping.pl +++ b/conf/normalize/mapping.pl @@ -1,5 +1,7 @@ # Leader - + +if ( rec('200','a') ) { + if ( rec('999') && first(rec('999')) =~ m/pregledan/i) { marc_leader('05','c'); } else { @@ -17,17 +19,36 @@ if ( rec('230') ) { } +# 001 polje dodaje Voyager + +# polje 035 je u NSK ponovljivo. za¹to ??? -# gre¹ka! - 000 se ne zapisuje u marc: -marc('001', - rec('000') +marc('035','6', + prefix( + rec('994','a'), + rec('000') + ) ); +# u marc 035a treba dodati System Number - +# NSK zapisuje Voyagerov ID (001) - kako ??? + marc('020','a', rec('010') ); +# u polje 040a mo¾da jo¹ dodati prefiks HR +# NSK ima HR NSB (mo¾da u novijim zapisima ima NSK) + +marc('040','a', + rec('801') +); + +marc('040','b', + 'hrv' +); + if (rec('300') && first(rec('300')) =~ m/prijevod/i) { marc_indicators('041', 1, ' '); } else { @@ -39,23 +60,39 @@ marc_repeatable_subfield('041','a', ); marc_indicators('245', 0, 0); -marc('245','a', - rec('200','a') -); -marc('245','b', +marc_compose('245', + 'a', rec('200','a'), + 'h', rec('200','b'), + 'b', join_with(' : ', rec('200','d'), rec('200','e') - ) -); - -marc('245','c', + ), + 'c', join_with(' ; ', rec('200','f'), rec('200','g') - ) -); + ), +); + +# marc('245','a', +# rec('200','a') +# ); +# +# marc('245','b', +# join_with(' : ', +# rec('200','d'), +# rec('200','e') +# ) +# ); +# +# marc('245','c', +# join_with(' ; ', +# rec('200','f'), +# rec('200','g') +# ) +# ); marc('250','a', rec('205','a') @@ -118,12 +155,31 @@ marc('504','a', rec('320') ); -marc('501','a', - rec('327') +# napomene uz konverziju polja sa sadr¾ajem: +# NSK konvertira 327 (NP) u 501 (R) +# u LOC konv. tablici stoji 327 (NP) u 505 (NR) +# standard i validacije dopu¹taju 501 (R) i 505 (R) +# FFPS koristi 327 (P) +# FFIZ koristi 327 + + +marc_indicators('505', '0', ' '); +marc('505','a', + regex('s/\\r\\n\\r\\n|\\r\\n/ ; /g', + rec('327') + ) ); +# napomene uz konverziju polja 330: +# NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica +# FFIZ koristi 330 (P) - kljuène rijeèi, dijelovi sadr¾aja, sa¾eci +# FFFO koristi 330 (P) - kljuène rijeèi, dijelovi sadr¾aja +# FFPS koristi 330 (NP) - sa¾etak + marc('520','a', - rec('330') + regex('s/\\r\\n\\r\\n|\\r\\n/. /g', + rec('330') + ) ); # mo¾da i polje 520y - jezik napomene ako je uvijek isti jezik @@ -138,11 +194,17 @@ marc('653','a', rec('610') ); +# 675 podpolja c, d ... - ¹to s njima ??? + marc('080','a', rec('675','a') ); -# podpolja c, d ... - ¹to s njima? +# 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') @@ -158,6 +220,13 @@ marc('100','a', marc_indicators('700', 1, ' '); + +if ( rec('701') ) { +marc('700','4', + 'aut' +); +} + marc('700','a', join_with(', ', rec('701', 'a'), @@ -165,11 +234,26 @@ marc('700','a', ) ); -if ( rec('701') ) { -marc('700','4', - 'aut' -); -} +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', join_with(', ', @@ -178,13 +262,27 @@ marc('700','a', ) ); -# podesiti podpolje 4 na editore nije dobra ideja -# -# if ( rec('702') ) { -# marc('700','4', -# '340' -# ); -# } +marc('700','a', + join_with(', ', + rec('702','c'), + rec('702','d') + ) +); + +marc('700','a', + join_with(', ', + rec('702','e'), + rec('702','f') + ) +); + +marc('700','a', + join_with(', ', + rec('702','g'), + rec('702','h') + ) +); + if ( rec('710','f') ) { @@ -235,6 +333,14 @@ marc('245','a', rec('230','a') ); +if ( ! rec('230','a') ) { + +marc('245','a', + rec('200','a') +); + +} + marc('245','b', rec('230','e') ); @@ -248,3 +354,5 @@ marc('245','n', ); } + +} diff --git a/lib/WebPAC/Normalize.pm b/lib/WebPAC/Normalize.pm index 272a69b..07b8d24 100644 --- a/lib/WebPAC/Normalize.pm +++ b/lib/WebPAC/Normalize.pm @@ -504,6 +504,8 @@ sub marc_compose { my ($i1,$i2) = defined($marc_indicators->{$f}) ? @{ $marc_indicators->{$f} } : (' ',' '); my $m = [ $f, $i1, $i2 ]; + warn "### marc_compose input subfields = ", dump(@_),$/ if ($debug > 2); + while (@_) { my $sf = shift or die "marc_compose $f needs subfield"; my $v = shift; @@ -660,10 +662,16 @@ syntaxtic sugar for =cut sub rec { + my @out; if ($#_ == 0) { - return rec1(@_); + @out = rec1(@_); } elsif ($#_ == 1) { - return rec2(@_); + @out = rec2(@_); + } + if (@out) { + return @out; + } else { + return ''; } } @@ -769,7 +777,9 @@ Joins walues with some delimiter sub join_with { my $d = shift; - return join($d, grep { defined($_) && $_ ne '' } @_); + my $v = join($d, grep { defined($_) && $_ ne '' } @_); + return '' unless defined($v); + return $v; } =head2 split_rec_on -- 2.20.1