File Coverage

blib/lib/HTTP/OAI/Metadata/OAI_DC.pm
Criterion Covered Total %
statement 19 26 73.0
branch 4 4 100.0
condition 0 2 0.0
subroutine 5 6 83.3
pod 1 4 25.0
total 29 42 69.0


line stmt bran cond sub pod time code
1             package HTTP::OAI::Metadata::OAI_DC;
2              
3             @ISA = qw( HTTP::OAI::MemberMixin HTTP::OAI::SAX::Base );
4              
5 2     2   1844 use strict;
  2         4  
  2         910  
6              
7             our $VERSION = '4.11';
8              
9             our $OAI_DC_SCHEMA = 'http://www.openarchives.org/OAI/2.0/oai_dc/';
10             our $DC_SCHEMA = 'http://purl.org/dc/elements/1.1/';
11             our @DC_TERMS = qw( contributor coverage creator date description format identifier language publisher relation rights source subject title type );
12             our %VALID_TERM = map { $_ => 1 } @DC_TERMS;
13              
14 1     1 0 7 sub metadata { shift->dom(@_) }
15              
16 3     3 0 37 sub dc { shift->_elem('dc',@_) }
17              
18             sub generate
19             {
20 1     1 0 2 my( $self, $driver ) = @_;
21              
22 1         4 $driver->start_element( 'metadata' );
23 1         169 $driver->start_element( 'oai_dc:dc',
24             'xmlns:oai_dc' => 'http://www.openarchives.org/OAI/2.0/oai_dc/',
25             'xmlns:dc' => 'http://purl.org/dc/elements/1.1/',
26             'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
27             'xsi:schemaLocation' => 'http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd',
28             );
29 1         262 foreach my $term (@DC_TERMS)
30             {
31 15 100       61 foreach my $value (@{$self->{dc}{$term} || []})
  15         54  
32             {
33 8         41 $driver->data_element( "dc:$term", $value );
34             }
35             }
36 1         13 $driver->end_element( 'oai_dc:dc' );
37 1         11 $driver->end_element( 'metadata' );
38             }
39              
40             sub _toString {
41 0     0   0 my $self = shift;
42 0         0 my $str = "Open Archives Initiative Dublin Core (".ref($self).")\n";
43 0         0 foreach my $term ( @DC_TERMS )
44             {
45 0         0 for(@{$self->{dc}->{$term}})
  0         0  
46             {
47 0   0     0 $str .= sprintf("%s:\t%s\n", $term, $_||'');
48             }
49             }
50 0         0 $str;
51             }
52              
53             sub end_element {
54 31     31 1 242 my ($self,$hash) = @_;
55 31         61 my $elem = lc($hash->{LocalName});
56 31 100       93 if( $VALID_TERM{$elem} )
57             {
58 25         34 push @{$self->{dc}->{$elem}}, $hash->{Text};
  25         106  
59             }
60             }
61              
62             1;
63              
64             __END__