-
Notifications
You must be signed in to change notification settings - Fork 0
/
htb_build_hierarchy_top_down_MIT_KRYPTONACHLASS
106 lines (94 loc) · 3.31 KB
/
htb_build_hierarchy_top_down_MIT_KRYPTONACHLASS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/perl
use strict;
use FindBin;
use lib ( "$FindBin::Bin/../htb");
use HierarchyToolbox;
use Getopt::Long;
# htb_build_hierarchy_top_down_MIT_KRYPTONACHLASS
#
# Kryptonachlässe sind Nachlässe, die in anderen Nachlässen enthalten sind.
# In Aleph sind solche Aufnahmen codiert mit
# - Feld 909 "ubnl..." (= Top-Level Nachlass)
# - Feld 490 mit Uplink (als Teil eines anderen Nachlasses)
#
# Das Skript "htb_build_hierarchy_top_down" erlaubt das eigentlich nicht,
# darum wird dem Kryptonachlass eine fiktive Systemnummer (mit vorangestelltem "K")
# zugeteilt. Diese muss nach dem Aufbau der Hierarchiedateien wieder gelöscht werden
# (17.11.2008/ava)
#
# Das Skript liess bis anhin nur einen Aktenbildner je Aufnahme zu, es gibt jedoch
# mehrere UB-Nachlässe mit mehreren Aktenbildnern (z.B. Nachlass Karl Schwarber).
# Damit die identische Hierarchie unter mehreren Top-Leveln aufgebaut werden kann,
# wurde dieses Skript ergänzt um die Verarbeitung des aus 'extract-top-info.xsl'
# stammenden Hash-Markers der Form '\n[KN]' ergänzt.
# (14.03.2011/osc)
sub usage {
print STDERR<<EOD;
usage: $0 <options>
options:
--toplist=filename CSV file with top level sysno
--list490=filename CSV file with recno/uplink_recno/sortform of children
--outfile=filename name of hierarchy XML file (default: stdout)
--sortkey add <sortkey> to <data>
--help show this text and exit
EOD
exit;
}
my($toplist,$list490,$outfile,$add_sortkey,$help);
GetOptions(
"toplist=s" => \$toplist,
"list490=s" => \$list490,
"outfile=s" => \$outfile,
"sortkey" => \$add_sortkey,
"help" => \$help,
) or usage;
( $help ) and usage;
( $toplist ) or usage;
( $list490 ) or usage;
$outfile ||= '-';
my $Tree = alephxtree->new(mode => 'top-down', outfile => $outfile);
# -- create lookup-hash for all potential 490 children
my $Lookup;
open(LIST,"<$list490") or die "cannot read $list490: $!";
$_ = <LIST>; # skip header
while ( <LIST> ) {
chomp;
my($current,$uplink,$sort)=split /\t/;
$Lookup->{$uplink}->{$current} = $sort;
}
close LIST;
# -- follow the top elements and create top-down-list
open(TOP,"<$toplist") or die "cannot read $toplist: $!";
while ( <TOP> ) {
chomp;
my($sysno,$sort,$data,$marker) = split /\t/; #vierte Variable ist '\d*[KN]', wobei 'K'=Kryptonachlass und 'N'=Nicht-Kryptonachlass
$sort = escape_xml($sort);
$sort = HierarchyToolbox::make_sort_string($sort);
if ( $add_sortkey ) {
$data = "<sortkey>$sort</sortkey>" .$data;
}
if ( $marker ) {
$sysno = "$marker$sysno";
}
$Tree->add($sysno,0,$sort,$data);
add_children($sysno);
}
close TOP;
sub add_children {
my($parent)=shift;
(my $parent_sysno = $parent ) =~ s/\d*[KN]//; # Kryptonachlässe haben ein 'K' vor der Systemnummer, andere ein 'N', vorher 1-n Ziffern, abschneiden aus $marker
if ( defined $Lookup->{$parent_sysno} ) {
my $ref = $Lookup->{$parent_sysno};
foreach my $child ( keys %$ref ) {
my $sort = HierarchyToolbox::make_sort_string($ref->{$child});
my $data = $ref->{$child};
if ( $add_sortkey ) {
$data = "<sortkey>$sort</sortkey>" .$data;
}
$Tree->add($child,$parent,$sort,$data);
add_children($child);
}
}
}
close TOP;
$Tree->serialize;