| HTTP-OAI documentation | Contained in the HTTP-OAI distribution. |
HTTP::OAI::Record - Encapsulates an OAI record
use HTTP::OAI::Record;
# Create a new HTTP::OAI Record
my $r = new HTTP::OAI::Record();
$r->header->identifier('oai:myarchive.org:oid-233');
$r->header->datestamp('2002-04-01');
$r->header->setSpec('all:novels');
$r->header->setSpec('all:books');
$r->metadata(new HTTP::OAI::Metadata(dom=>$md));
$r->about(new HTTP::OAI::Metadata(dom=>$ab));
This constructor method returns a new HTTP::OAI::Record object.
Options (see methods below):
header => $header metadata => $metadata about => [$about]
Returns and optionally sets the record header (an HTTP::OAI::Header object).
Returns and optionally sets the record metadata (an HTTP::OAI::Metadata object).
Optionally adds a new About record (an HTTP::OAI::Metadata object) and returns an array of objects (may be empty).
These methods are equivalent to $rec->header->$method([$value]).
Get and optionally set the record OAI identifier.
Get and optionally set the record datestamp.
Get and optionally set the record status (valid values are 'deleted' or undef).
Returns whether this record's status is deleted.
| HTTP-OAI documentation | Contained in the HTTP-OAI distribution. |
package HTTP::OAI::Record; use strict; use warnings; use vars qw(@ISA); use HTTP::OAI::SAXHandler qw/ :SAX /; @ISA = qw(HTTP::OAI::Encapsulation); sub new { my ($class,%args) = @_; my $self = $class->SUPER::new(%args); $self->{handlers} = $args{handlers}; $self->header($args{header}) unless defined($self->header); $self->metadata($args{metadata}) unless defined($self->metadata); $self->{about} = $args{about} || [] unless defined($self->{about}); $self->header(new HTTP::OAI::Header(%args)) unless defined $self->header; $self; } sub header { shift->_elem('header',@_) } sub metadata { shift->_elem('metadata',@_) } sub about { my $self = shift; push @{$self->{about}}, @_ if @_; return @{$self->{about}}; } sub identifier { shift->header->identifier(@_) } sub datestamp { shift->header->datestamp(@_) } sub status { shift->header->status(@_) } sub is_deleted { shift->header->is_deleted(@_) } sub generate { my ($self) = @_; return unless defined(my $handler = $self->get_handler); g_start_element($handler,'http://www.openarchives.org/OAI/2.0/','record',{}); $self->header->set_handler($handler); $self->header->generate; g_data_element($handler,'http://www.openarchives.org/OAI/2.0/','metadata',{},$self->metadata) if defined($self->metadata); g_data_element($handler,'http://www.openarchives.org/OAI/2.0/','about',{},$_) for $self->about; g_end_element($handler,'http://www.openarchives.org/OAI/2.0/','record'); } sub start_element { my ($self,$hash) = @_; my $elem = lc($hash->{LocalName}); die "Internal Error" unless $self->version; if( defined($self->get_handler) ) { if( exists($self->{"in_$elem"}) ) { $self->{"in_$elem"}++; } } elsif( $elem eq 'record' && $self->version eq '1.1' ) { $self->status($hash->{Attributes}->{'{}status'}->{Value}); } elsif( $elem =~ /^header|metadata|about$/ ) { my $handler = $self->{handlers}->{$elem}->new() or die sprintf("Error getting handler for <%s> (failed to create new %s)", $elem, $self->{handlers}->{$elem}); $self->set_handler($handler); $self->$elem($handler); $self->{"in_$elem"} = $hash->{Depth}; g_start_document( $handler ); } $self->SUPER::start_element($hash); } sub end_element { my ($self,$hash) = @_; my $elem = lc($hash->{LocalName}); $self->SUPER::end_element($hash); if( exists($self->{"in_$elem"}) ) { if( $self->{"in_$elem"} == $hash->{Depth} ) { $self->SUPER::end_document(); $self->set_handler(undef); delete $self->{"in_$elem"}; } else { $self->{"in_$elem"}--; } } } 1; __END__