#!/usr/bin/perl -w
# Change this to the location of your static repository
# XML file
my $STATIC_REPO = 'file:../examples/repository.xml';
use strict;
use HTTP::OAI;
use HTTP::OAI::Repository qw/:validate/;
use XML::SAX::Writer;
use CGI qw/:standard -oldstyle_urls/;
use vars qw( $GZIP );
BEGIN {
eval { require PerlIO::gzip };
$GZIP = $@ ? 0 : 1;
}
# Create a new harvester object to read the xml file
my $h = HTTP::OAI::Harvester->new(baseURL=>$STATIC_REPO);
binmode(STDOUT,':utf8');
my @encodings = http('HTTP_ACCEPT_ENCODING');
if( $GZIP && grep { defined($_) && $_ eq 'gzip' } @encodings ) {
print header(
-type=>'text/xml; charset=utf-8',
-charset=>'utf-8',
'-Content-Encoding'=>'gzip',
);
binmode(STDOUT, ":gzip");
} else {
print header(
-type=>'text/xml; charset=utf-8',
-charset=>'utf-8',
);
}
# Check for grammatical errors in the request
my @errs = validate_request(CGI::Vars());
my $mdp = param('metadataPrefix') || '';
my @mdfs = $h->ListMetadataFormats()->metadataFormat;
if( $mdp && !grep { $_->metadataPrefix } @mdfs ) {
push @errs, new HTTP::OAI::Error(code=>'cannotDisseminateFormat',message=>"Dissemination as '$mdp' is not supported");
}
if( param('resumptionToken') ) {
push @errs, new HTTP::OAI::Error(code=>'badArgument',message=>'This repository does not support flow-control');
}
my $r;
if( @errs ) {
$r = HTTP::OAI::Response->new(
requestURL=>self_url()
);
$r->errors(@errs);
} else {
my %attr = CGI::Vars();
my $verb = delete($attr{'verb'});
$r = $h->$verb(%attr);
$r->requestURL(self_url());
if( 'Identify' eq $verb && ref($r) eq 'HTTP::OAI::Identify' ) {
$r->baseURL(url());
}
}
$r->set_handler(XML::SAX::Writer->new(Output=>\*STDOUT));
$r->generate;