=head1 SYNOPSIS
-mods2marc.pl mods.xml export.marc
+mods2marc.pl export.marc mods.xml [mods2.xml ... ]
=head1 DESCRIPTION
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;
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"});
'name',
'classification',
'topic',
+ 'relatedItem',
+ 'partNumber',
],
KeyAttr => {
'namePart' => 'type',
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";
}
}
}
- 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);
+ }
}
}
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}}) {