From 4a358f49898d475cfeb2db346dae3445b74230dd Mon Sep 17 00:00:00 2001 From: miker Date: Mon, 18 Dec 2006 16:46:49 +0000 Subject: [PATCH] more robust xpath for author extraction git-svn-id: svn://svn.open-ils.org/ILS/trunk@6706 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm | 30 +++++++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) 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}); } -- 2.11.0