more robust xpath for author extraction
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 18 Dec 2006 16:46:49 +0000 (16:46 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 18 Dec 2006 16:46:49 +0000 (16:46 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@6706 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm

index 15251ff..af20bef 100644 (file)
@@ -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}); 
        }