|
Lines 697-705
sub marc_records_to_documents {
Link Here
|
| 697 |
$altscript = 1; |
697 |
$altscript = 1; |
| 698 |
} |
698 |
} |
| 699 |
} |
699 |
} |
|
|
700 |
|
| 700 |
# Handle references to GEOGR_NAME authorities |
701 |
# Handle references to GEOGR_NAME authorities |
| 701 |
if ($marcflavour eq 'marc21' && $tag eq '651') { |
702 |
if ( $marcflavour eq 'marc21' && $tag eq '651' ) { |
| 702 |
$self->embed_geographic_name($field, $record_document, $data_fields_rules); |
703 |
$self->embed_geographic_name( $field, $record_document, $data_fields_rules ); |
| 703 |
} |
704 |
} |
| 704 |
|
705 |
|
| 705 |
my $data_field_rules = $data_fields_rules->{$tag}; |
706 |
my $data_field_rules = $data_fields_rules->{$tag}; |
|
Lines 983-990
sub marc_records_to_documents {
Link Here
|
| 983 |
return \@record_documents; |
984 |
return \@record_documents; |
| 984 |
} |
985 |
} |
| 985 |
|
986 |
|
|
|
987 |
=head2 embed_geographic_name($field, $record_document, $rules) |
| 988 |
|
| 989 |
$self->embed_geographic_name( $field, $record_document, $data_fields_rules ); |
| 990 |
|
| 991 |
Extract geographic fields from an authority linked to a given record |
| 992 |
|
| 993 |
=over 4 |
| 994 |
|
| 995 |
=item C<$field> |
| 996 |
|
| 997 |
MARC::Field refering to the GEOGR_NAME authority |
| 998 |
|
| 999 |
=item C<$record_document> |
| 1000 |
|
| 1001 |
Hashref representing the Elasticsearch document on which mappings should be |
| 1002 |
applied. |
| 1003 |
|
| 1004 |
=item C<$rules> |
| 1005 |
|
| 1006 |
MARC mapping rules for the provided field. |
| 1007 |
|
| 1008 |
=back |
| 1009 |
|
| 1010 |
=cut |
| 1011 |
|
| 986 |
sub embed_geographic_name { |
1012 |
sub embed_geographic_name { |
| 987 |
my ($self, $field, $record_document, $rules) = @_; |
1013 |
my ( $self, $field, $record_document, $rules ) = @_; |
| 988 |
|
1014 |
|
| 989 |
my $authid = $field->subfield('9'); |
1015 |
my $authid = $field->subfield('9'); |
| 990 |
return unless $authid; |
1016 |
return unless $authid; |
|
Lines 993-1014
sub embed_geographic_name {
Link Here
|
| 993 |
|
1019 |
|
| 994 |
my $tag = '034'; |
1020 |
my $tag = '034'; |
| 995 |
|
1021 |
|
| 996 |
my $auth_marc = $authority->record; |
1022 |
my $auth_marc = $authority->record; |
| 997 |
my @coordinate_fields = $auth_marc->field($tag); |
1023 |
my @coordinate_fields = $auth_marc->field($tag); |
| 998 |
|
1024 |
|
| 999 |
for my $field (@coordinate_fields) { |
1025 |
for my $field (@coordinate_fields) { |
| 1000 |
my $data_field_rules = $rules->{$tag}; |
1026 |
my $data_field_rules = $rules->{$tag}; |
| 1001 |
if ($data_field_rules) { |
1027 |
if ($data_field_rules) { |
| 1002 |
my $subfields_mappings = $data_field_rules->{subfields}; |
1028 |
my $subfields_mappings = $data_field_rules->{subfields}; |
| 1003 |
my $wildcard_mappings = $subfields_mappings->{'*'}; |
1029 |
my $wildcard_mappings = $subfields_mappings->{'*'}; |
| 1004 |
foreach my $subfield ($field->subfields()) { |
1030 |
foreach my $subfield ( $field->subfields() ) { |
| 1005 |
my ($code, $data) = @{$subfield}; |
1031 |
my ( $code, $data ) = @{$subfield}; |
| 1006 |
my $mappings = $subfields_mappings->{$code} // []; |
1032 |
my $mappings = $subfields_mappings->{$code} // []; |
| 1007 |
if (@{$mappings}) { |
1033 |
if ( @{$mappings} ) { |
| 1008 |
$self->_process_mappings($mappings, $data, $record_document, { |
1034 |
$self->_process_mappings( |
|
|
1035 |
$mappings, |
| 1036 |
$data, |
| 1037 |
$record_document, |
| 1038 |
{ |
| 1009 |
data_source => 'subfield', |
1039 |
data_source => 'subfield', |
| 1010 |
code => $code, |
1040 |
code => $code, |
| 1011 |
field => $field |
1041 |
field => $field |
| 1012 |
} |
1042 |
} |
| 1013 |
); |
1043 |
); |
| 1014 |
} |
1044 |
} |
| 1015 |
- |
|
|