Changeset 16692 for gsdl/trunk/perllib/plugins/MARCPlugin.pm
- Timestamp:
- 2008-08-11T10:44:04+12:00 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
gsdl/trunk/perllib/plugins/MARCPlugin.pm
r16104 r16692 31 31 use unicode; 32 32 use util; 33 use marcmapping; 33 34 34 35 use strict; … … 42 43 my $arguments = 43 44 [ { 'name' => "metadata_mapping", 44 'desc' => "{ MARCPlugin.metadata_mapping}",45 'desc' => "{common.deprecated} {MARCPlugin.metadata_mapping}", 45 46 'type' => "string", 46 'deft' => " marctodc.txt",47 'deft' => "", 47 48 'hiddengli' => "yes", # deprecated in favour of 'metadata_mapping_file' 48 49 'reqd' => "no" }, … … 50 51 'desc' => "{MARCXMLPlugin.metadata_mapping_file}", 51 52 'type' => "string", 52 'deft' => " ",53 'deft' => "marctodc.txt", 53 54 'reqd' => "no" }, 54 55 { 'name' => "process_exp", … … 99 100 # preference 100 101 101 if ($self->{'metadata_mapping _file'} eq"") {102 # If nothing set in the new version, use the old version103 # that defaults to 'marctodc.txt'102 if ($self->{'metadata_mapping'} ne "") { 103 print STDERR "MARCPlugin WARNING:: the metadata_mapping option is set but has been deprecated. Please use metadata_mapping_file option instead\n"; 104 # If the old version is set, use it. 104 105 $self->{'metadata_mapping_file'} = $self->{'metadata_mapping'}; 105 106 } 106 107 $self->{'metadata_mapping'} = undef; 107 108 $self->{'type'} = ""; 108 109 … … 114 115 my ($verbosity, $outhandle, $failhandle) = @_; 115 116 116 my @metadata_mapping = (); 117 118 # read in the metadata mapping file 119 120 my $mm_file = &util::locate_config_file($self->{'metadata_mapping_file'}); 121 122 if (!defined $mm_file) 123 { 124 117 ## the mapping file has already been loaded 118 if (defined $self->{'metadata_mapping'} ){ 119 $self->SUPER::init(@_); 120 return; 121 } 122 123 # read in the metadata mapping files 124 my $mm_files = &util::locate_config_files($self->{'metadata_mapping_file'}); 125 126 if (scalar(@$mm_files)==0) 127 { 125 128 my $msg = "MARCPlugin ERROR: Can't locate mapping file \"" . 126 $self->{'metadata_mapping_file'} . "\".\n " .129 $self->{'metadata_mapping_file'} . "\".\n " . 127 130 " No marc files can be processed.\n"; 128 131 … … 133 136 # If we exit here, then pluginfo.pl will exit too! 134 137 } 135 elsif (open(MMIN, "<$mm_file")) 136 { 137 my $l=1; 138 my $line; 139 while (defined($line=<MMIN>)) 140 { 141 chomp $line; 142 if ($line =~ m/^(\d+)\s*->\s*([\w\^]+)$/) 143 { 144 my $marc_info = $1; 145 my $gsdl_info = $2; 146 my $mapping = { 'marc' => $marc_info, 'gsdl' => $gsdl_info }; 147 push(@metadata_mapping,$mapping); 148 } 149 elsif ($line !~ m/^\#/ # allow comments (# in first column) 150 && $line !~ m/^\s*$/) # allow blank lines 151 { 152 print $outhandle "Parse error on line $l of $mm_file:\n"; 153 print $outhandle " \"$line\"\n"; 154 } 155 $l++ 156 } 157 close(MMIN); 158 159 $self->{'metadata_mapping'} = \@metadata_mapping; 160 } 161 else 162 { 163 print STDERR "Unable to open $mm_file: $!\n"; 164 } 165 166 138 else { 139 $self->{'metadata_mapping'} = &marcmapping::parse_marc_metadata_mapping($mm_files, $outhandle); 140 } 141 142 ##map { print STDERR $_."=>".$self->{'metadata_mapping'}->{$_}."\n"; } keys %{$self->{'metadata_mapping'}}; 167 143 168 144 $self->SUPER::init(@_); 169 145 } 170 146 147 171 148 172 149 sub get_default_process_exp { … … 340 317 341 318 342 sub extract_metadata 319 sub extract_metadata 343 320 { 344 321 my $self = shift (@_); 322 345 323 my ($marc, $metadata, $encoding, $doc_obj, $section) = @_; 346 324 my $outhandle = $self->{'outhandle'}; … … 350 328 } 351 329 352 my $metadata_mapping = $self->{'metadata_mapping'}; 353 my $mm; 354 355 foreach $mm ( @$metadata_mapping ) 356 { 357 my $marc_field = $mm->{'marc'}; 358 359 my @metavalues = $marc->field($marc_field); 360 361 if (scalar(@metavalues)>0) 362 { 363 my $metaname = $mm->{'gsdl'}; 364 my $metavalue; 365 foreach $metavalue ( @metavalues ) 330 my $metadata_mapping = $self->{'metadata_mapping'};; 331 332 foreach my $marc_field ( keys %$metadata_mapping ) 333 { 334 my $gsdl_field = $metadata_mapping->{$marc_field}; 335 my $meta_value = undef; 336 337 # have we got a subfield? 338 my $subfield = undef; 339 if ($marc_field =~ /(\d\d\d)(?:\$|\^)?(\w)/){ 340 $marc_field = $1; 341 $subfield = $2; 342 } 343 if (defined $subfield) { 344 $meta_value = $marc->subfield($marc_field, $subfield); 345 if (defined $meta_value) { 346 ## escape [ and ] 347 $meta_value =~ s/\[/\\\[/g; 348 $meta_value =~ s/\]/\\\]/g; 349 my $metavalue_str = $self->to_utf8($encoding, $meta_value); 350 $doc_obj->add_utf8_metadata ($section, $gsdl_field, $metavalue_str); 351 } 352 } else { 353 354 my @metavalues = $marc->field($marc_field); 355 356 if (scalar(@metavalues)>0) 366 357 { 367 my $metavalue_str = $self->to_utf8($encoding,$metavalue->as_string()); 368 $doc_obj->add_utf8_metadata ($section, $metaname, $metavalue_str); 369 } 370 } 371 } 372 } 358 my $metavalue = undef; 359 foreach $metavalue ( @metavalues ) 360 { 361 my $metavalue_str = $self->to_utf8($encoding,$metavalue->as_string()); 362 $doc_obj->add_utf8_metadata ($section, $gsdl_field, $metavalue_str); 363 } 364 } 365 } 366 } 367 } 368 373 369 374 370 sub extract_ascii_metadata 375 371 { 376 372 my $self = shift (@_); 373 377 374 my ($text, $metadata,$doc_obj, $section) = @_; 378 375 my $outhandle = $self->{'outhandle'}; … … 386 383 $field =~ /^(\d\d\d)\s/; 387 384 my $code = $1; 388 $field = $'; 385 $field = $'; #' 389 386 ##get subfields 390 387 my @subfields = split(/\$/,$field); … … 403 400 ##print STDERR "$1=>$'\n"; 404 401 push(@{$marc_mapping->{$code}},$1); 405 push(@{$marc_mapping->{$code}},$'); 402 push(@{$marc_mapping->{$code}},$'); #' 406 403 } 407 404 } … … 410 407 411 408 412 foreach my $mm ( @$metadata_mapping ) 413 { 414 my $marc_field = $mm->{'marc'}; 409 foreach my $marc_field ( keys %$metadata_mapping ) 410 { 415 411 416 412 my $matched_field = $marc_mapping->{$marc_field}; … … 422 418 $subfield = $1; 423 419 } 424 my $metaname = $m m->{'gsdl'};420 my $metaname = $metadata_mapping->{$marc_field}; 425 421 426 422 my $metavalue;
Note:
See TracChangeset
for help on using the changeset viewer.