Figshare's OAI-PMH Interface is Broken
Figshare, a repository hosting service, implements OAI-PMH... kinda.
Repositories hosted on Figshare are forced to use the same OAI-PMH Base URL. As far as I can tell, Figshare uses OAI-PMH sets to differentiate between metadata records belonging to particular repositories. So, to use an example documented on the Figshare site, this is how you might harvest some OAI_DC formatted records from a particular repository:
https://api.figshare.com/v2/oai?verb=ListRecords&metadataPrefix=oai_dc&set=portal_63
It seems logical to guess that "portal_63" represents a repository hosted on Figshare. However, I have no idea how you would determine the correct set to use for a given repository, or vice versa, how you would determine the repository for a given set. I could find nothing in the documentation about this.
This means that OAI-PMH's Identify
verb is now useless in terms of being able to convey any information about a particular repository hosted on Figshare. Identify
on the Figshare BaseURL does work properly:
https://api.figshare.com/v2/oai?verb=Identify
However, passing a set parameter is illegal in the OAI-PMH specification when combined with the Identify
verb:
https://api.figshare.com/v2/oai?verb=Identify&set=portal_63
And, indeed, this gives an error on Figshare.
The Identify
verb is an important part of the specification. It is commonly used not only to gather some basic information about a repository - such as its name & contact details, but also simply to check that the repository's OAI-PMH interface is functioning. For example, the International Repositories Directory (IRD) automatically checks that repositories have a working OAI-PMH interface by sending a verb=Identify
request. This will currently fail for all Figshare hosted repositories.
This could have been avoided by making the "portal_63" component part of the OAI-PMH Base URL path for each repository, instead of over-loading the OAI-PMH sets feature, something like:
https://api.figshare.com/v2/oai/portal_63?verb=Identify