---
name: "HTTP::OAI::Repository"
section: "3pm"
platform: "linux"
package: "libhttp-oai-perl"
version: "4.13-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/HTTP::OAI::Repository"
---

# HTTP::OAI::Repository(3pm)

Documentation for building an OAI compliant repository using OAI-PERL

## 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 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;
```

## 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!).
