command line parametars are now working (xml files are at end, so that shell
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 15 May 2004 19:52:01 +0000 (19:52 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 15 May 2004 19:52:01 +0000 (19:52 +0000)
glob will work), misc improvements

git-svn-id: file:///home/dpavlin/private/svn/webpac/trunk@328 13eb9ef6-21d5-0310-b721-a9d68796d827

tools/mods2unimarc.pl

index d87a6fa..634c1f1 100755 (executable)
@@ -6,7 +6,7 @@ mods2marc.pl - convert MODS XML back to MARC (ISO2709)
 
 =head1 SYNOPSIS
 
-mods2marc.pl mods.xml export.marc
+mods2marc.pl export.marc mods.xml [mods2.xml ... ]
 
 =head1 DESCRIPTION
 
@@ -44,10 +44,8 @@ use Text::Iconv;
 
 use Data::Dumper;
 
-my $xml_file = "/data/tehnika/fer/all.xml";
-$xml_file = "/data/tehnika/fer/modsFER_1.xml";
-$xml_file = "/data/tehnika/fer/mods-small.xml";
-my $marc_file = "fer.marc";
+my $marc_file = shift @ARGV || die "$0: need MARC export file";
+die "$0: need at least one MODS XML file" if (! @ARGV);
 
 $|=1;
 my $nr = 0;
@@ -63,10 +61,14 @@ my $twig=XML::Twig->new(
 
 my $utf2iso = Text::Iconv->new("UTF8", $ENCODING);
 
-print "$xml_file: ";
-$twig->parsefile($xml_file);
-$twig->purge;
-print "$nr\nSaving MARC file...\n";
+foreach my $xml_file (@ARGV) {
+       print "$xml_file: ";
+       $twig->parsefile($xml_file);
+       $twig->purge;
+       print "$nr\n";
+}
+
+print "Saving MARC file...\n";
 
 $marc->output({file=>"> $marc_file",'format'=>"usmarc"});
 
@@ -79,6 +81,8 @@ sub mods {
                        'name',
                        'classification',
                        'topic',
+                       'relatedItem',
+                       'partNumber',
                ],
                KeyAttr => {
                        'namePart' => 'type',
@@ -213,6 +217,8 @@ sub mods {
                        marc_add_rep($m_cache,'010','a',$ref->{identifier}->{content});
                } elsif ($type eq "issn") {
                        marc_add_rep($m_cache,'011','a',$ref->{identifier}->{content});
+               } elsif ($type eq "uri") {
+                       marc_add_rep($m_cache,'856','u',$ref->{identifier}->{content});
                } else {
                        die "unknown identifier type $type";
                }
@@ -250,16 +256,19 @@ sub mods {
                }
        }
 
-       my $related = $ref->{relatedItem}->{type};
-       if ($related) {
-               if ($related eq "series") {
-                       marc_add($m_cache,'225','a',$ref->{relatedItem}->{titleInfo}->{title});
-                       marc_add($m_cache,'999','a',$ref->{relatedItem}->{titleInfo}->{partNumber});
-                       marc_rep($m_cache,'225','999');
-               } elsif ($related eq "preceding") {
-                       marc_add_rep($m_cache,'430','a',$ref->{relatedItem}->{titleInfo}->{title});
-               } else {
-                       die "can't parse related item type $related" if ($related);
+       foreach my $ri (@{$ref->{relatedItem}}) {
+               my $related = $ri->{type};
+               if ($related) {
+                       if ($related eq "series") {
+                               marc_add_rep($m_cache,'225','a',$ri->{titleInfo}->{title});
+                               foreach my $pn (@{$ri->{titleInfo}->{partNumber}}) {
+                                       marc_add_rep($m_cache,'999','a',$pn);
+                               }
+                       } elsif ($related eq "preceding") {
+                               marc_add_rep($m_cache,'430','a',$ri->{titleInfo}->{title});
+                       } else {
+                               die "can't parse related item type $related" if ($related);
+                       }
                }
        }
 
@@ -284,7 +293,9 @@ sub mods {
        print "$nr " if ($nr % 100 == 0);
 
        # dump record
-       my $m=$marc->createrecord({leader=>"00000nam  2200000 a 4500"});
+       my $bib_level = "m";
+       $bib_level = "s" if ($journal);
+       my $m=$marc->createrecord({leader=>"00000na".$bib_level."  2200000 a 4500"});
 
        foreach my $fld (keys %{$m_cache->{array}}) {
                foreach my $arr (@{$m_cache->{array}->{$fld}}) {