From: miker Date: Mon, 18 Dec 2006 17:15:30 +0000 (+0000) Subject: * backporting MODS author extraction fix from head * X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=12fbf39fc1a86a1e58947bd28355372b6909c2be;p=Evergreen.git * backporting MODS author extraction fix from head * This makes the extraction more stable across MODS versions and gives a more sane order of retrieval. git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_0@6707 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm b/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm index 15251ffab1..af20befea6 100644 --- a/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm +++ b/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm @@ -49,13 +49,28 @@ my $xpathset = { author => { corporate => "//mods:mods/mods:name[\@type='corporate']/*[local-name()='namePart']". - "[../mods:role/mods:text[text()='creator']][1]", + "[../mods:role/mods:text[text()='creator']". + " or ../mods:role/mods:roleTerm[". + " \@type='text'". + " and \@authority='marcrelator'". + " and text()='creator']". + "][1]", personal => "//mods:mods/mods:name[\@type='personal']/*[local-name()='namePart']". - "[../mods:role/mods:text[text()='creator']][1]", + "[../mods:role/mods:text[text()='creator']". + " or ../mods:role/mods:roleTerm[". + " \@type='text'". + " and \@authority='marcrelator'". + " and text()='creator']". + "][1]", conference => "//mods:mods/mods:name[\@type='conference']/*[local-name()='namePart']". - "[../mods:role/mods:text[text()='creator']][1]", + "[../mods:role/mods:text[text()='creator']". + " or ../mods:role/mods:roleTerm[". + " \@type='text'". + " and \@authority='marcrelator'". + " and text()='creator']". + "][1]", other => "//mods:mods/mods:name[\@type='personal']/*[local-name()='namePart']", any => @@ -65,7 +80,12 @@ my $xpathset = { subject => { topic => - "//mods:mods/mods:subject/*[local-name()='geographic' or local-name()='name' or local-name()='temporal' or local-name()='topic']/parent::mods:subject", + "//mods:mods/mods:subject/*[". + " local-name()='geographic'". + " or local-name()='name'". + " or local-name()='temporal'". + " or local-name()='topic'". + "]/parent::mods:subject", # geographic => # "//mods:mods/*[local-name()='subject']/*[local-name()='geographic']", @@ -255,9 +275,9 @@ sub mods_values_to_mods_slim { if(!$tmp) { $author = ""; } else { ($author = $tmp->{personal}) || - ($author = $tmp->{other}) || ($author = $tmp->{corporate}) || ($author = $tmp->{conference}) || + ($author = $tmp->{other}) || ($author = $tmp->{any}); }