HTTP::...ository(3pm)
π HTTP::...ository(3pm) π
okay so bestie, welcome to the User Contributed Perl Documentation page for this one, and yes the title looks like it got cut off mid-sentence but we're rolling with it, that's just the vibe. π¦ Let's get into it.
β¨ NAME β¨
HTTP::OAI::Repository β the whole entire documentation situation for building an OAI compliant repository using OAI-PERL. That's the assignment, that's the point, no notes. π
πΈ DESCRIPTION πΈ
okay so here's the tea β: if you wanna use the OAI-PERL library in a repository context, it's on you to build the OAI responses that get sent out to OAI harvesters. Like, the library isn't gonna hand you a finished repository on a platter, you're the main character here and you have to construct the responses yourself. periodt. π
β SYNOPSIS 1 β
okay so here's the whole ritual, copy it, love it, live it β¨:
use HTTP::OAI::Harvester;
use HTTP::OAI::Metadata::OAI_DC;
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(
baseURL=>'http://yourhost/cgi/oai',
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;
π«Ά friendly lil heads-up straight from the source: all of those options _must_ be supplied to comply with the OAI protocol, and bothprotocolVersionandresponseDatecome with sensible defaults so you don't gotta sweat those two.
π§ Building an OAI compliant repository π§
okay so the validation scripts that come bundled in this module? they hand the repository admin a whole lil toolkit for helping you be OAI compliant β however, they can not be exhaustive in themselves. like, they're a vibe check, not a full audit, bestie. π
π METHODS π
$r = HTTP::OAI::Repository::validate_request(%paramlist)$r = HTTP::OAI::Repository::validate_request_2_0(%paramlist)
these two functions, exported by the Repository module, validate an OAI request against the protocol requirements. they return an HTTP::Response object, with the code set to 200 if the request is well-formed, or an error code with the message set. π
e.g:
my $r = validate_request(%paramlist);
print header(-status=>$r->code.' '.$r->message),
$r->error_as_HTML;
π also bestie, note that validate_request attempts to be as strict to the Protocol as possible. it is not here to be chill, it is here to be correct. respect it. π
$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. simple as that, no drama. β¨
π EXAMPLE π
see the bin/gateway.pl for an example implementation β and yeah, it's actually for creating a static repository gateway, but you get the idea! ππ
perl v5.36.0 Β· 2023-09-28
and that's the whole page bestie, mwah, go build something iconic π«Άπ π
π¦ where this page comes from
- debian trixie: libhttp-oai-perl 4.13-1 Β· BSD-3-Clause
- ubuntu noble: libhttp-oai-perl 4.13-1 Β· BSD-3-Clause
- ubuntu resolute: libhttp-oai-perl 4.13-1 Β· BSD-3-Clause
- ubuntu stonking: libhttp-oai-perl 4.13-1 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms