From: Tara L Andrews Date: Wed, 22 Feb 2012 14:13:51 +0000 (+0100) Subject: abandon 'collated' relationship removal X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=3d14b48ee0a2081fb622df2e5fa67c1dbeae3dd7;p=scpubgit%2Fstemmatology.git abandon 'collated' relationship removal --- diff --git a/lib/Text/Tradition/Collation.pm b/lib/Text/Tradition/Collation.pm index e5921a6..9076fb3 100644 --- a/lib/Text/Tradition/Collation.pm +++ b/lib/Text/Tradition/Collation.pm @@ -773,7 +773,8 @@ is( scalar $st->collation->relationships, 3, "Reparsed collation has new relatio sub as_graphml { my( $self ) = @_; - + $self->calculate_ranks unless $self->_graphcalc_done; + # Some namespaces my $graphml_ns = 'http://graphml.graphdrawing.org/xmlns'; my $xsi_ns = 'http://www.w3.org/2001/XMLSchema-instance'; @@ -829,6 +830,7 @@ sub as_graphml { relationship => 'string', # ID/label for a relationship extra => 'boolean', # Path key scope => 'string', # Relationship key + annotation => 'string', # Relationship key non_correctable => 'boolean', # Relationship key non_independent => 'boolean', # Relationship key ); @@ -1414,44 +1416,6 @@ sub flatten_ranks { } } } - -=head2 remove_collations - -Another convenience method for parsing. Removes all 'collation' relationships -that were defined in order to get the reading ranks to be correct. - -=begin testing - -use Text::Tradition; - -my $cxfile = 't/data/Collatex-16.xml'; -my $t = Text::Tradition->new( - 'name' => 'inline', - 'input' => 'CollateX', - 'file' => $cxfile, - ); -my $c = $t->collation; - -isnt( $c->reading('n23')->rank, $c->reading('n9')->rank, "Rank skew exists" ); -$c->add_relationship( 'n23', 'n9', { 'type' => 'collated', 'scope' => 'local' } ); -is( scalar $c->relationships, 4, "Found all expected relationships" ); -$c->remove_collations; -is( scalar $c->relationships, 3, "Collated relationships now gone" ); -is( $c->reading('n23')->rank, $c->reading('n9')->rank, "Aligned ranks were preserved" ); - -=end testing - -=cut - -sub remove_collations { - my $self = shift; - foreach my $reledge ( $self->relationships ) { - my $relobj = $self->relations->get_relationship( $reledge ); - if( $relobj && $relobj->type eq 'collated' ) { - $self->relations->delete_relationship( $reledge ); - } - } -} =head2 calculate_common_readings diff --git a/lib/Text/Tradition/Collation/RelationshipStore.pm b/lib/Text/Tradition/Collation/RelationshipStore.pm index 133c09a..3328b96 100644 --- a/lib/Text/Tradition/Collation/RelationshipStore.pm +++ b/lib/Text/Tradition/Collation/RelationshipStore.pm @@ -152,7 +152,11 @@ sub create { my $target = delete $options->{'orig_b'}; my $rel = $self->get_relationship( $source, $target ); if( $rel ) { - if( $rel->type ne $options->{'type'} ) { + if( $rel->type eq 'collated' ) { + # Always replace a 'collated' relationship with a more descriptive + # one, if asked. + $self->del_relationship( $source, $target ); + } elsif( $rel->type ne $options->{'type'} ) { throw( "Another relationship of type " . $rel->type . " already exists between $source and $target" ); } else { @@ -482,6 +486,7 @@ sub _as_graphml { my $rel_obj = $self->get_relationship( @$e ); _add_graphml_data( $edge_el, $edge_keys->{'relationship'}, $rel_obj->type ); _add_graphml_data( $edge_el, $edge_keys->{'scope'}, $rel_obj->scope ); + _add_graphml_data( $edge_el, $edge_keys->{'annotation'}, $rel_obj->annotation ); _add_graphml_data( $edge_el, $edge_keys->{'non_correctable'}, $rel_obj->non_correctable ) if $rel_obj->noncorr_set; _add_graphml_data( $edge_el, $edge_keys->{'non_independent'}, diff --git a/t/text_tradition_collation.t b/t/text_tradition_collation.t index 59e019c..04e0332 100644 --- a/t/text_tradition_collation.t +++ b/t/text_tradition_collation.t @@ -80,28 +80,6 @@ my $t = Text::Tradition->new( ); my $c = $t->collation; -isnt( $c->reading('n23')->rank, $c->reading('n9')->rank, "Rank skew exists" ); -$c->add_relationship( 'n23', 'n9', { 'type' => 'collated', 'scope' => 'local' } ); -is( scalar $c->relationships, 4, "Found all expected relationships" ); -$c->remove_collations; -is( scalar $c->relationships, 3, "Collated relationships now gone" ); -is( $c->reading('n23')->rank, $c->reading('n9')->rank, "Aligned ranks were preserved" ); -} - - - -# =begin testing -{ -use Text::Tradition; - -my $cxfile = 't/data/Collatex-16.xml'; -my $t = Text::Tradition->new( - 'name' => 'inline', - 'input' => 'CollateX', - 'file' => $cxfile, - ); -my $c = $t->collation; - my @common = $c->calculate_common_readings(); is( scalar @common, 8, "Found correct number of common readings" ); my @marked = sort $c->common_readings();