Skip to content
OAI-PMH Objective-C harvester is an Objective C library/wrapper over the OAI-PMH protocol
Objective-C Ruby
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.



OAI-PMH Objective-C harvester is an Objective C library/wrapper over the OAI-PMH protocol. The Open Archives Initiative Protocol for Metadata Harvesting (OAI-PMH) is a low-barrier mechanism for repository interoperability. Data Providers are repositories that expose structured metadata via OAI-PMH. Service Providers or metadata harvesters (like this one) then make OAI-PMH service requests to harvest that metadata. OAI-PMH is a set of six verbs or services that are invoked within HTTP.


  1. Download or clone this project on your machine

  2. Copy & Paste the folder OAIHarvester in your project, drag the folder in your XCode project as usual

  3. In your projects precompiled header file (.pch extension) add the following lines

    #import "TouchXML.h" #define BASE_NAMESPACE @""

  4. Enable libxml2 library

  • In XCode, within Build Settings, search for Header search paths setting and add /usr/include/libxml2 value to it
  • In the same place, search for Other linker flags setting and add -lxml2 value
  1. You are ready to use the library


Instantiate a new harvester
OAIHarvester *harvester = [[OAIHarvester alloc] initWithBaseURL:@"PLACE THE OAI BASE URL OF YOUR REPOSITORY HERE"];

Identify instance is ready for you:<br>

NSLog(@"repo name = %@", harvester.identify.repositoryName);
NSLog(@"baseURL = %@", harvester.identify.baseURL);
NSLog(@"granularity = %@", harvester.identify.granularity);
for (NSString *email in harvester.identify.adminEmails){
	NSLog(@"admin email = %@", email);
for (NSString *compression in harvester.identify.compressions){
	NSLog(@"compression = %@", compression);

Metadata formats are also ready for you:

for (MetadataFormat *format in harvester.metadataFormats){
    NSLog(@"%@: %@", format.prefix, format.namespce);

Sets are also ready for you:

for (Set *set in harvester.sets){
    NSLog(@"%@: %@", set.fullSpec,;

Define metadata prefix and set for your harvester (the latter is optional):

harvester.metadataPrefix = @"oai_dc";
harvester.setSpec = ((Set *)[harvester.sets objectAtIndex:0]).fullSpec;

List records (1st way - using resumption tokens):

NSArray *records = [harvester listRecordsWithResumptionToken:nil error:&error];
if (error){
    NSLog(@"error = %@", [error localizedDescription]);
else {
    if ([harvester hasNextRecords]){
        NSArray *records2 = [harvester getNextRecordsWithError:&error];
        Record *record = [records2 objectAtIndex:0];
        NSLog(@"identifier = %@", record.recordHeader.identifier);
        NSLog(@"status = %i", record.recordHeader.status);
        NSLog(@"datestamp = %@", record.recordHeader.datestamp);
        for (NSString *set in record.recordHeader.setSpecs){
            NSLog(@"set = %@", set);
        NSLog(@"namespace: %@", record.recordMetadata.namespce);
        NSLog(@"schemaLoacation: %@", record.recordMetadata.schemaLocation);
        for (MetadataElement *metadata in record.recordMetadata.metadataElements){
            NSLog(@"%@: %@",, metadata.value);

List records (2nd way - get all items at once):

NSArray *records = [harvester listAllRecords error:&error];


A fully detailed example can be found here. It is an open-source iOS example of how to use this library in a real OAI-PMH enabled repository, the one of Serres Public Library.


  • No validation of the incoming xml
  • No support for resumption tokens in the following verbs: ListSets
  • No support for date selective harvesting for the verbs: ListIdentifiers and ListRecords
  • No support for the "description" element in Identify verb
  • No support for the "about" element in ListRecords verb


The only dependency of this project is the TouchXML library that can be found here.


Kostas Stamatis
National Documentation Center / NHRF


Creative Commons License
OAI-PMH ObjC Harvester by Konstantinos Stamatis is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

You can’t perform that action at this time.