Skip to content

Instantly share code, notes, and snippets.

@EdWarga
Created July 24, 2015 18:49
Show Gist options
  • Select an option

  • Save EdWarga/86298d14a869f67311ff to your computer and use it in GitHub Desktop.

Select an option

Save EdWarga/86298d14a869f67311ff to your computer and use it in GitHub Desktop.
xquery version "3.1";
declare namespace oai = "http://www.openarchives.org/OAI/2.0/";
(: Retrieves metadata records for an entire OAI-PMH collection :)
(: Adds records to BaseX database:)
declare function local:request($base-url as xs:string, $verb as xs:string, $set-spec as xs:string) as document-node()*
{
let $request := $base-url || $verb
let $response := fn:doc($request)
let $token := $response//oai:resumptionToken/text()
return
if (fn:empty($token)) then
$response
else
($response,
local:resume($base-url, $token))
};
declare function local:resume($base-url as xs:string, $token as xs:string) as document-node()*
{
let $verb := "?verb=ListRecords&resumptionToken="
let $request := $base-url || $verb || $token
let $response := fn:doc($request)
let $new-token := $response//oai:resumptionToken/text()
return
if (fn:empty($new-token)) then
$response
else
($response,
local:resume($base-url, $new-token))
};
let $base-url := "http://discoverarchive.vanderbilt.edu/oai/request"
let $verb := "?verb=ListRecords&metadataPrefix=oai_dc"
let $set-spec := "set=col_1803_5553"
let $response := local:request($base-url, $verb, $set-spec)
for $record in $response//oai:record
let $id := $record/oai:header/oai:identifier/text()
return
db:add("DA", $record, $id)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment