8 use KiokuDB::TypeMap::Entry::Naive;
10 use Text::Tradition::Stemma;
12 # Make a KiokuDB store from the traditions data we have.
14 my $kdb = KiokuDB->connect( "dbi:SQLite:dbname=db/traditions.db",
16 typemap => KiokuDB::TypeMap->new(
18 "Graph" => KiokuDB::TypeMap::Entry::Naive->new,
19 "Graph::AdjacencyMap" => KiokuDB::TypeMap::Entry::Naive->new,
25 'florilegium.xml' => 'stemma_a.dot',
26 'besoin.xml' => 'stemma_b.dot',
27 'heinrichi.xml' => 'stemma_h.dot',
28 'parzival.xml' => 'stemma_p.dot',
29 's158.xml' => 'stemma_s.dot',
35 opendir( DIR, $dir ) or die "Could not open directory $dir";
36 while( readdir DIR ) {
38 print STDERR "Looking at $_\n";
39 my $tradition = Text::Tradition->new(
45 if( exists $stemma_map{$_} ) {
46 my $stemmafile = "$dir/" . $stemma_map{$_};
47 open my $stemma_fh, '<', $stemmafile or die "Could not read stemma file $stemmafile";
48 $stemma = Text::Tradition::Stemma->new(
49 'collation' => $tradition->collation,
54 my $scope = $kdb->new_scope;
55 my $tid = $kdb->store( $tradition );
56 my $sid = $kdb->store( $stemma ) if $stemma;
57 print STDERR "Stored tradition for " . $tradition->name . " at $tid\n";
58 print STDERR "\tand stemma at $sid\n" if $stemma;
62 # Now try reading the objects from the DB.
64 my $scope = $kdb->new_scope;
66 my $stream = $kdb->root_set;
67 until( $stream->is_done ) {
68 foreach my $t ( $stream->items ) {
69 print STDERR "*** Object " . $kdb->object_to_id( $t ) . " ***\n";
70 if( ref( $t ) eq 'Text::Tradition' ) {
71 print STDERR "Got tradition " . $t->name . " out of the database\n";
72 my @wits = map { $_->sigil } $t->witnesses;
73 print STDERR "...with witnesses @wits\n";
74 my $c = $t->collation;
75 print STDERR "Collation has " . scalar( $c->readings ) . " readings\n";
76 print STDERR "Collation has " . scalar( $c->paths ) . " paths\n";
77 print STDERR "Collation has " . scalar( $c->relationships ) . " relationship links\n";
78 } elsif( ref( $t ) eq 'Text::Tradition::Stemma' ) {
79 print STDERR "Got stemma for tradition " . $t->collation->tradition->name
80 . " out of the database\n";
81 print STDERR "Stemma graph is " . $t->graph . "\n";
83 print STDERR "Got unexpected object of type " . ref( $t )
84 . " out of the database\n";