NAME
HTTP::OAI::Repository - Documentation for building an OAI compliant repository using OAI-PERL
DESCRIPTION
Using the OAI-PERL library in a repository context requires the user to build the OAI responses to be sent to OAI harvesters.
SYNOPSIS 1
use
HTTP::OAI::Harvester;
use
XML::SAX::Writer;
use
XML::LibXML;
# (all of these options _must_ be supplied to comply with the OAI protocol)
# (protocolVersion and responseDate both have sensible defaults)
my
$r
= new HTTP::OAI::Identify(
adminEmail
=>
'youremail@yourhost'
,
repositoryName
=>
'agoodname'
,
requestURL
=>self_url()
);
# Include a description (an XML::LibXML Dom object)
$r
->description(new HTTP::OAI::Metadata(
dom
=>
$dom
));
my
$r
= HTTP::OAI::Record->new(
header
=>HTTP::OAI::Header->new(
identifier
=>
'oai:myrepo:10'
,
datestamp
=>
'2004-10-01'
),
metadata
=>HTTP::OAI::Metadata::OAI_DC->new(
dc
=>{
title
=>[
'Hello, World!'
],
description
=>[
'My Record'
]}
)
);
$r
->about(HTTP::OAI::Metadata->new(
dom
=>
$dom
));
my
$output
;
my
$w
= XML::SAX::Writer->new(
Output
=>\
$output
);
my
$driver
= HTTP::OAI::SAX::Driver->new(
Handler
=>
my
$builder
= XML::LibXML::SAX::Builder->new()
);
$driver
->start_oai_pmh();
$r
->set_handler(
$w
);
$r
->generate(
$driver
);
$driver
->end_oai_pmh();
my
$xml
=
$builder
->result;
Building an OAI compliant repository
The validation scripts included in this module provide the repository admin with a number of tools for helping with being OAI compliant, however they can not be exhaustive in themselves.
METHODS
- $r = HTTP::OAI::Repository::validate_request(%paramlist)
- $r = HTTP::OAI::Repository::validate_request_2_0(%paramlist)
-
These functions, exported by the Repository module, validate an OAI request against the protocol requirements. Returns an HTTP::Response object, with the code set to 200 if the request is well-formed, or an error code and the message set.
e.g:
my
$r
= validate_request(
%paramlist
);
print
header(
-status
=>
$r
->code.
' '
.
$r
->message),
$r
->error_as_HTML;
Note that validate_request attempts to be as strict to the Protocol as possible.
- $b = HTTP::OAI::Repository::validate_date($date)
- $b = HTTP::OAI::Repository::validate_metadataPrefix($mdp)
- $b = HTTP::OAI::Repository::validate_responseDate($date)
- $b = HTTP::OAI::Repository::validate_setSpec($set)
-
These functions, exported by the Repository module, validate the given type of OAI data. Returns true if the given value is sane, false otherwise.
EXAMPLE
See the bin/gateway.pl for an example implementation (it's actually for creating a static repository gateway, but you get the idea!).