From 713a2feb35ec9a8745e623536e835efb54cbcaee Mon Sep 17 00:00:00 2001
From: Andreas Romeyke <art1@andreas-romeyke.de>
Date: Fri, 22 Apr 2022 14:48:36 +0200
Subject: [PATCH] - refactoring, extracted common xpath subexpression - bugfix
 in xpath expressions to handle correct delete/purge events

---
 perl/exit_strategy.pl | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/perl/exit_strategy.pl b/perl/exit_strategy.pl
index ebd984e..49886a5 100644
--- a/perl/exit_strategy.pl
+++ b/perl/exit_strategy.pl
@@ -365,11 +365,12 @@ sub check_if_db_conform ($string, $filename) {
   my $str_local_reps = "$str_local_record/*[local-name()=\'key\' and \@id=\'label\' and (. = \'LOCAL\'  or . = \'LZA_INTERN\' or . = \'LZA\')]";
   my $str_repid_old = "/mets:mets/mets:amdSec[starts-with(\@ID, \'REP\') and $str_local_reps]/\@ID";
   my $compiled_xpath_repid_old = XML::LibXML::XPathExpression->new($str_repid_old);
-#  my $compiled_xpath_ifpurged_event = XML::LibXML::XPathExpression->new('/mets:mets/mets:amdSec[@ID="ie-amd"]/mets:digiprovMD[@ID="ie-amd-digiprov"]/mets:mdWrap/mets:xmlData/dnx:dnx/dnx:section[@id="event"]/dnx:record[starts-with(dnx:key[@id="eventIdentifierValue"],"27")]/dnx:key[@id="eventDescription"]/text()');
-  my $compiled_xpath_ifpurged_event = XML::LibXML::XPathExpression->new('/mets:mets/mets:amdSec[@ID="ie-amd"]/mets:digiprovMD[@ID="ie-amd-digiprov"]/mets:mdWrap/mets:xmlData/dnx:dnx/dnx:section[@id="event"]/dnx:record[dnx:key[@id="eventIdentifierValue"][. >= 272][. <= 274]]/dnx:key[@id="eventDescription"]/text()');
-  my $compiled_xpath_purged_event_date = XML::LibXML::XPathExpression->new('/mets:mets/mets:amdSec[@ID="ie-amd"]/mets:digiprovMD[@ID="ie-amd-digiprov"]/mets:mdWrap/mets:xmlData/dnx:dnx/dnx:section[@id="event"]/dnx:record[dnx:key[@id="eventIdentifierValue"][. >= 272][. <= 274]]/dnx:key[@id="eventDateTime"]/text()');
-  my $compiled_xpath_purged_event_authorized_by = XML::LibXML::XPathExpression->new('/mets:mets/mets:amdSec[@ID="ie-amd"]/mets:digiprovMD[@ID="ie-amd-digiprov"]/mets:mdWrap/mets:xmlData/dnx:dnx/dnx:section[@id="event"]/dnx:record[dnx:key[@id="eventIdentifierValue"][. >= 272][. <= 274]]/dnx:key[@id="linkingAgentIdentifierValue1"]/text()');
-  my $compiled_xpath_purged_event_reason = XML::LibXML::XPathExpression->new('/mets:mets/mets:amdSec[@ID="ie-amd"]/mets:digiprovMD[@ID="ie-amd-digiprov"]/mets:mdWrap/mets:xmlData/dnx:dnx/dnx:section[@id="event"]/dnx:record[dnx:key[@id="eventIdentifierValue"][. >= 272][. <= 274]]/dnx:key[@id="eventOutcomeDetail1"]/text()');
+  #  only event 272 or 274 should be used, next line uses a multiple-predicate hack for XPATH 1.0
+  my $xpath_if_purged_expr = '/mets:mets/mets:amdSec[@ID="ie-amd"]/mets:digiprovMD[@ID="ie-amd-digiprov"]/mets:mdWrap/mets:xmlData/dnx:dnx/dnx:section[@id="event"]/dnx:record[dnx:key[@id="eventIdentifierValue"][. >= 272][. != 273][. <= 274]]/';
+  my $compiled_xpath_ifpurged_event = XML::LibXML::XPathExpression->new($xpath_if_purged_expr . 'dnx:key[@id="eventDescription"]/text()');
+  my $compiled_xpath_purged_event_date = XML::LibXML::XPathExpression->new($xpath_if_purged_expr .'dnx:key[@id="eventDateTime"]/text()');
+  my $compiled_xpath_purged_event_authorized_by = XML::LibXML::XPathExpression->new($xpath_if_purged_expr . 'dnx:key[@id="linkingAgentIdentifierValue1"]/text()');
+  my $compiled_xpath_purged_event_reason = XML::LibXML::XPathExpression->new($xpath_if_purged_expr . 'dnx:key[@id="eventOutcomeDetail1"]/text()');
   ############################################################
   sub get_title ($xp, $dmd){
     # get title
-- 
GitLab