This is a system of 3 services that in conjunction implements [http://www.openarchives.org/OAI/openarchivesprotocol.html](OpenArchive OAI)
This system is built upon data from https://github.com/DBCDK/rawrepo
The services are
- setmatcher
- formatter
- service
The specification allows for sets, which the setmatcher is accountable for
transforming into lists, that the service can provide to the user.
The setmatcher is hooked up upon a queue in
https://github.com/DBCDK/rawrepo where it gets notified of all the
records that has been changed. It
https://github.com/DBCDK/rawrepo-record-service-connector/ the record
and runs a JavaScript upon the
https://www.loc.gov/standards/iso25577/ XML record listing
which sets this record is a member of if any. This is written to a database for
later use.
The service is exposed to the user as the only entrypoint. It implements
OAI 2.0, and exposes the lists generated by setmatcher. The protocol has been
extended to accommodate for free/non-free datasets.
The protocon has an identity parameter that is a triple of
{userid}:{group}:{password} the group is the agency that pays for the access.
This can also be sent as h HTTP request header Idenitiy, but the query
parameter overrides the request header. IP based authentication is also an
option.
Anonymous access to the free sets is acquired by not sending any identity. IP based authentication is tried, but if that fails, default authentication is used.
When using the verb (OAI command) called GetRecord or ListRecords then the
final of the three services (formatter) is in play. It is a JavaScript
formatter that fetches the record in question from RawRepo, just like
setmatcher. Given a format (currently only oai_dc and marcx) it produces
an XML document, to embed in the service response.