rec and join_with now return '' if there are no results, so they are safe to
authorDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 5 Jul 2006 00:12:08 +0000 (00:12 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 5 Jul 2006 00:12:08 +0000 (00:12 +0000)
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
lib/WebPAC/Normalize.pm

index 3a0d9fb..48e664a 100644 (file)
@@ -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',
 );
 
 }
+
+}
index 272a69b..07b8d24 100644 (file)
@@ -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