package Net::OAI::ListMetadataFormats; use strict; use base qw( XML::SAX::Base ); use base qw( Net::OAI::Base ); =head1 NAME Net::OAI::ListMetadataFormats - Results of the ListMetadataFormats OAI-PMH verb. =head1 SYNOPSIS =head1 DESCRIPTION =head1 METHODS =head2 new() =cut sub new { my ( $class, %opts ) = @_; my $self = bless \%opts, ref( $class ) || $class; $self->{ insideList } = 0; $self->{ metadataPrefixes } = []; $self->{ namespaces } = []; $self->{ schemas } = []; return( $self ); } =head2 prefixes() =cut sub prefixes() { my $self = shift; return( @{ $self->{ metadataPrefixes } } ); } =head2 namespaces() =cut sub namespaces { my $self = shift; return( @{ $self->{ namespaces } } ); } =head2 schemas() =cut sub schemas { my $self = shift; return( @{ $self->{ schemas } } ); } ## SAX Handlers sub start_element { my ( $self, $element ) = @_; if ( $element->{ Name } eq 'ListMetadataFormats' ) { $self->{ insideList } = 1; } else { $self->SUPER::start_element( $element ); } push( @{ $self->{ tagStack } }, $element->{ Name } ); } sub end_element { my ( $self, $element ) = @_; my $name = $element->{ Name }; if ( $name eq 'ListMetadataFormats' ) { $self->{ insideList } = 0; } elsif ( $name eq 'metadataPrefix' ) { push( @{ $self->{ metadataPrefixes } }, $self->{ metadataPrefix } ); $self->{ metadataPrefix } = ''; } elsif ( $name eq 'schema' ) { push( @{ $self->{ schemas } }, $self->{schema } ); $self->{ schema } = ''; } elsif ( $name eq 'metadataNamespace' ) { push( @{ $self->{ namespaces } }, $self->{ namespace } ); $self->{ namespace } = ''; } else { $self->SUPER::end_element( $element ); } pop( @{ $self->{ tagStack } } ); } sub characters { my ( $self, $characters ) = @_; $self->SUPER::characters( $characters ); $self->{ $self->{ tagStack }[-1] } .= $characters->{ Data }; } 1;