[open-ils-commits] r15299 - trunk/Open-ILS/src/perlmods/OpenILS/Utils (dbs)
svn at svn.open-ils.org
svn at svn.open-ils.org
Mon Jan 11 14:17:10 EST 2010
Author: dbs
Date: 2010-01-11 14:17:05 -0500 (Mon, 11 Jan 2010)
New Revision: 15299
Modified:
trunk/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm
Log:
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.
Modified: trunk/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm
===================================================================
--- trunk/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm 2010-01-11 16:55:39 UTC (rev 15298)
+++ trunk/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm 2010-01-11 19:17:05 UTC (rev 15299)
@@ -110,7 +110,7 @@
sub get_field_value {
- my( $self, $mods, $xpath ) = @_;
+ my( $self, $mods, $xpath, $type) = @_;
my @string;
@@ -126,6 +126,12 @@
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 @@
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 @@
}
for my $t (@$arr) {
- $data->{$class}->{$type} .= ' : ' if ($data->{$class}->{$type} =~ /\w\s*$/o);
$data->{$class}->{$type} .= " $t";
}
} else {
More information about the open-ils-commits
mailing list