Mit dieser Option kann vor dem Verarbeiten des Dokumentes ein Skript abearbeitet werden. Dies ist z.B. dann sinnvoll, wenn es darum geht, dass Dateien nur unter bestimmten Umständen ins Archiv gelangen sollen. Ebenfalls denkbar ist, dass die eingestellte Datei zur Beschlagwortung einer anderen Datei dient.
Bei der Verarbeitung wird die interne Job-Nummer sowie der Dateiname der zu verarbeitenden Datei übermittelt. Mit der internen Job-Nummer kann beispielsweise festgestellt werden, in welche Datenbank der Import erfolgen soll. Nachfolgend ein Beispiel eines Skripts:
Das obige Beispiel dient dazu, die Beschlagwortung für bei der Schweizer Mediendatenbank (siehe swissdox.ch) heruntergeladene Artikel zu beschlagworten. Dabei wird zunächst die PDF-Datei bezogen und mit dem Namen xxxx.pdf erstellt. Diese wird ins Archiv hochgeladen. Danach wird die zum Artikel passende html-Datei mit dem Namen xxxx.html (bzw. xxxx.htm) heruntergeladen und ebenfalls hochgeladen. Das Skript überpüft nun, ob zur HTML-Datei eine gleichlautende PDF-Datei existiert. Ist dies der Fall, werden die wichtigsten Informationen für die Beschlagwortung aufbereitet. Konkret sind dies der Titel, das Datum, das Medium (z.B. NZZ) sowie die Seite, auf welcher der Artikel publiziert wurde.
#!/usr/bin/perl
use strict;
use lib qw(/home/cvs/archivista/jobs);
use AVJobs;
my $jid = shift;
my $jname = shift;
logit("$0 with $jid and $jname started");
my $dbh = MySQLOpen();
if ($dbh) {
if (HostIsSlave($dbh)==0) {
my $sql = "select db from archivista.jobs where id=$jid";
my @rows = $dbh->selectrow_array($sql);
my $db = $rows[0];
if ($db ne "") {
$sql = "select value from archivista.jobs_data where ".
"jid=$jid and param='WEB_FILE'";
@rows = $dbh->selectrow_array($sql);
my @parts = split(/\//,$rows[0]);
my $fname = pop @parts;
@parts = split(/\./,$fname);
my $ext = lc(pop @parts);
my $base = join('.',@parts);
if (($ext eq "html" || $ext eq "htm") && $base ne "") {
my $fpdf = $base.".pdf";
$sql = "select Laufnummer from $db.archiv where ".
"MediaName=".$dbh->quote($fpdf)." and (Titel=” or Titel is null)";
@rows = $dbh->selectrow_array($sql);
my $lnr = $rows[0];
if ($lnr>0) {
my $cont = "";
readFile2($jname,\$cont);
foreach my $part ("header","footer","script") {
my $hbeg = "<$part";
my $hend = "</$part>";
my $hto = "<$part></$part>";
$cont =~ s/($hbeg)(.*?)($hend)/$hto/sm;
}
my $cl = "<div class=\"";
my $hbeg = "LayoutSc__StyledSidebar";
my $hend = "LayoutSc__Main";
$cont =~ s/($cl)($hbeg)(.*?)($cl)($hend)/$cl$hend/sm;
my $title="";
my $date="";
my $medium="";
my $page="";
my $start="ArticleContentSc__Headline";
$cont =~ /($start)(.*?)(>)(.*?)(<\/div>)/s;
$title = $4 if $1 eq $start && $4 ne "";
if ($title ne "") {
logit("$title for $lnr in $db found, so it is meta file");
$title=optimizer($title);
$sql = "Titel=".$dbh->quote($title);
my $id = 0;
$cont =~ /(<article\sdata-id=\")([0-9]+)(\">)/;
$sql .= ",swissdoxID=".$dbh->quote(optimizer($2)) if $2>0;
foreach my $val ("newspaper","date","page") {
my $start = "ArticleMetaSc__Item";
$cont =~ /($start)(.*?)($val\">)(.*?)(<\/div>)/;
if ($1 eq $start && $4 ne "") {
if ($val eq "newspaper") {
$medium = optimizer($4);
$sql.=",Medium=".$dbh->quote($medium);
} elsif ($val eq "date") {
$date = optimizer($4);
my $date1 = $date;
$date1 =~ s/(\s.*?)$//;
@parts = split(/\./,$date1);
my $year = pop @parts;
my $month = sprintf("%02d",pop @parts);
my $day = sprintf("%02d",pop @parts);
$sql.=",Datum='$year-$month-$day 00:00:00'";
} elsif ($val eq "page") {
$page = optimizer($4);
}
}
}
my $sql1 = "";
$sql1 = "$medium" if $medium ne "";
$sql1 .= "; $title" if $title ne "";
$sql1 .= "; $date" if $date ne "";
$sql1 .= "; $page" if $page ne "";
$sql .= ",Bibliographie=".$dbh->quote($sql1);
$sql = "update $db.archiv set $sql where Laufnummer=$lnr";
logit($sql);
$dbh->do($sql);
unlink "$jname" if -e "$jname";
}
}
}
}
}
}
sub optimizer {
my ($cont) = @_;
$cont =~ s/<.*?>//g;
$cont = fromUTF8($cont);
return $cont;
}
Bitte beachten: Das obige Skript erwartet die Felder 'swissdoxID','Medium' und 'Bibliographie' als Felder. Ebenfalls müssen die multimedialen Felder (siehe 25.7.14) aktiviert sein. Das Skript selber kann über WebAdmin über 'Jobs administrieren' (21) auf die Box übermittelt werden. Alternativ kann es auch im Ordner
/home/data/archivista/cust/autofields
abgelegt werden (Rechte müssen auf Ausführen gesetzt sein).