From 5d3d4347c649d3ec7935cfbfb363409809b447b9 Mon Sep 17 00:00:00 2001 From: dbs Date: Mon, 11 Jan 2010 19:17:05 +0000 Subject: [PATCH] Get consistent about "title : subtitle" in mods_slim By teaching get_field_value() to prepend " : " to our incoming value if the element name is "subTitle", we can ensure that records with a title / subtitle structure have a consistent structure. Academics love subtitles, so this was pretty glaring at Conifer. This has a bonus effect of not appending colons after leading articles (nonSort elements), which was annoying for "Der schutz" and the like. Academics have a number of non-English / non-French / non-Spanish titles; the MODS transform honours the non-filing indicator so this is a more consistent method of generating the appropriate result. git-svn-id: svn://svn.open-ils.org/ILS/trunk@15299 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm b/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm index 731b84d221..5c37ce2d0b 100644 --- a/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm +++ b/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm @@ -110,7 +110,7 @@ sub new { return bless( {}, shift() ); } sub get_field_value { - my( $self, $mods, $xpath ) = @_; + my( $self, $mods, $xpath, $type) = @_; my @string; @@ -126,6 +126,12 @@ sub get_field_value { my @children = $value->childNodes(); my @child_text; for my $child (@children) { + # MODS strips the punctuation from 245abc, which often + # results in "title subtitle" rather than "title : subtitle"; + # this hack gets it back for us + if ($type eq 'title' && $child->nodeName =~ m/subTitle/) { + push(@child_text, " : "); + } next unless( $child->nodeType != 3 ); if($child->childNodes) { @@ -194,7 +200,7 @@ sub modsdoc_to_values { my $class = "title"; $data->{$class} = {}; for my $type(keys %{$xpathset->{$class}}) { - my @value = $self->get_field_value( $mods, $xpathset->{$class}->{$type} ); + my @value = $self->get_field_value( $mods, $xpathset->{$class}->{$type}, "title" ); for my $arr (@value) { if( ref($arr) ) { $data->{$class}->{$type} = shift @$arr; @@ -207,7 +213,6 @@ sub modsdoc_to_values { } for my $t (@$arr) { - $data->{$class}->{$type} .= ' : ' if ($data->{$class}->{$type} =~ /\w\s*$/o); $data->{$class}->{$type} .= " $t"; } } else { -- 2.11.0