diff --git a/lib/Alma/MARC_Extractor.pm b/lib/Alma/MARC_Extractor.pm index 1cfe8be7442ef4872e7dc55ecad667b46f67392d..ff12f78fb43e8b535230e0d12c73a28fcf5884f8 100644 --- a/lib/Alma/MARC_Extractor.pm +++ b/lib/Alma/MARC_Extractor.pm @@ -11,6 +11,7 @@ sub new my $self= { fields => $fields, + mex_ot2ut => 1, }; bless ($self, $class); @@ -35,7 +36,9 @@ sub extract_identifiers $rec->{marc_record}= 'marc_data_found'; # print __LINE__, " mrd: ", Dumper($mrd); - my ($df_urn, $val_urn, $df_doi, $val_doi, $df_othes, $val_othes, $df_utheses, $val_utheses); + my ($df_urn, $val_urn, $df_doi, $val_doi, $df_hdl, $val_hdl, + $df_othes, $val_othes, $df_utheses, $val_utheses, + $df_phaidra, $val_phaidra); foreach my $cf (@{$mrd->{controlfield}}) { @@ -49,7 +52,7 @@ sub extract_identifiers { foreach my $sf (@{$df->{subfield}}) { - if ($sf->{content} =~ m#urn:nbn#) + if ($sf->{content} =~ m#urn:nbn:at:ubw#) { $df_urn= join(':', (map { $df->{$_} } qw(tag ind1 ind2)), $sf->{code}); $val_urn= $sf->{content}; @@ -59,6 +62,11 @@ sub extract_identifiers $df_doi= join(':', (map { $df->{$_} } qw(tag ind1 ind2)), $sf->{code}); $val_doi= $sf->{content}; } + elsif ($sf->{content} =~ m#11353/#) + { + $df_hdl= join(':', (map { $df->{$_} } qw(tag ind1 ind2)), $sf->{code}); + $val_hdl= $sf->{content}; + } elsif ($sf->{content} =~ m#othes\.univie#) { $df_othes= join(':', (map { $df->{$_} } qw(tag ind1 ind2)), $sf->{code}); @@ -69,16 +77,85 @@ sub extract_identifiers $df_utheses= join(':', (map { $df->{$_} } qw(tag ind1 ind2)), $sf->{code}); $val_utheses= $sf->{content}; } + elsif ($sf->{content} =~ m#phaidra\.univie#) + { + $df_phaidra= join(':', (map { $df->{$_} } qw(tag ind1 ind2)), $sf->{code}); + $val_phaidra= $sf->{content}; + } } } $rec->{ df_urn}= $df_urn; $rec->{val_urn}= $val_urn; $rec->{ df_doi}= $df_doi; $rec->{val_doi}= $val_doi; - $rec->{ df_othes}= $df_othes; - $rec->{val_othes}= $val_othes; - $rec->{ df_utheses}= $df_utheses; - $rec->{val_utheses}= $val_utheses; + $rec->{ df_hdl}= $df_hdl; + $rec->{val_hdl}= $val_hdl; + + if ($self->{mex_ot2ut}) + { + $rec->{ df_othes}= $df_othes; + $rec->{val_othes}= $val_othes; + $rec->{ df_utheses}= $df_utheses; + $rec->{val_utheses}= $val_utheses; + } + + if ($self->{mex_phaidra}) + { + $rec->{ df_phaidra_url}= $df_phaidra; + $rec->{val_phaidra_url}= $val_phaidra; + } + + $rec; +} + +sub extract_identifiers2 +{ + my $self= shift; + + my $marc= shift; # MARC record to select data from + my $rec= shift; # record to fill extracted data into + + foreach my $f (@{$self->{fields}}) { $rec->{$f}= $marc->{$f}; } + + my $mrd= $marc->{xmlref}->{records}->[0]->{record}->[0]->{recordData}->[0]->{record}->[0]; + unless (defined ($mrd)) + { + $rec->{marc_record}= 'marc_data_not_found'; + next MARC; + } + $rec->{marc_record}= 'marc_data_found'; + + foreach my $cf (@{$mrd->{controlfield}}) + { + if ($cf->{tag} eq '005') + { + $rec->{ts_marc}= $cf->{content}; + } + } + + foreach my $df (@{$mrd->{datafield}}) + { + foreach my $sf (@{$df->{subfield}}) + { + my $match; + + if ($sf->{content} =~ m#urn:nbn:at:ubw#) { $match= 'urn'; } + elsif ($sf->{content} =~ m#10\.25365#) { $match= 'doi'; } + elsif ($sf->{content} =~ m#11353/#) { $match= 'hdl'; } + elsif ($sf->{content} =~ m#othes\.univie#) { $match= 'othes' } + elsif ($sf->{content} =~ m#utheses\.univie#) { $match= 'utheses' } + elsif ($sf->{content} =~ m#phaidra\.univie#) { $match= 'phaidra' } + + if (defined ($match)) + { + push (@{$rec->{mex}->{$match}}, + [ + join(':', (map { $df->{$_} } qw(tag ind1 ind2)), $sf->{code}), + $sf->{content} + ]); + } + } + } $rec; }