Skip to content

Instantly share code, notes, and snippets.

@sterkenburgsara-zz
Last active December 14, 2015 19:59
Show Gist options
  • Save sterkenburgsara-zz/bfc15023580ab5663822 to your computer and use it in GitHub Desktop.
Save sterkenburgsara-zz/bfc15023580ab5663822 to your computer and use it in GitHub Desktop.
ArtistsBooksMARCXML_CSV
xquery version "3.0";
declare namespace marc="http://www.loc.gov/MARC21/slim";
let $records := fn:collection("artistsbk")//marc:collection/marc:record
let $csv :=
element recordset{
for $individual in $records
(: TITLE :)
let $maintitle := $individual/marc:datafield[@tag='245']/marc:subfield[@code='a']/text()
let $subtitle := $individual/marc:datafield[@tag='245']/marc:subfield[@code='b']/text()
let $title := fn:string-join(($maintitle,$subtitle)," ")
(: AUTHOR :)
let $name := $individual/marc:datafield[@tag='100']/marc:subfield[@code='a']/text()
let $nametitle :=$individual/marc:datafield[@tag='100']/marc:subfield[@code='c']/text()
let $namefuller := $individual/marc:datafield[@tag='100']/marc:subfield[@code='q']/text()
let $pdate := $individual/marc:datafield[@tag='100']/marc:subfield[@code='d']/text()
let $pauthor := fn:string-join(($name, $nametitle, $namefuller, $pdate), " ")
let $cauthor := $individual/marc:datafield[@tag='110']/marc:subfield[@code='a']/text()
let $author :=
if ($name)
then $pauthor
else $cauthor
(: PUBLISHER :)
let $aacrpub := $individual/marc:datafield[@tag='260']/marc:subfield[@code='b']/text()
let $rdapub := $individual/marc:datafield[@tag='264']/marc:subfield[@code='b']/text()
let $publisher :=
if ($rdapub)
then $rdapub
else $aacrpub
(: PUB DATE :)
let $aacrpubdate := $individual/marc:datafield[@tag='260']/marc:subfield[@code='c']/text()
let $rdapubdate := $individual/marc:datafield[@tag='264']/marc:subfield[@code='c']/text()
let $pubdate :=
if ($aacrpubdate)
then $aacrpubdate
else $rdapubdate[1]
(: FORMAT :)
let $extent :=$individual/marc:datafield[@tag='300']/marc:subfield[@code='a']/text()
let $ill :=$individual/marc:datafield[@tag='300']/marc:subfield[@code='b']/text()
let $format := string-join(($extent, $ill), " ")
(: PERSONAL CONTRIBUTORS :)
let $pcontribname := $individual/marc:datafield[@tag='700']/marc:subfield[@code='a']/text()
let $pcontribnametitle :=$individual/marc:datafield[@tag='700']/marc:subfield[@code='c']/text()
let $pcontribnamefuller := $individual/marc:datafield[@tag='700']/marc:subfield[@code='q']/text()
let $pcontribdate := $individual/marc:datafield[@tag='700']/marc:subfield[@code='d']/text()
let $pcontributor := fn:string-join(($pcontribname, $pcontribnametitle, $pcontribnamefuller, $pcontribdate), " ")
(: CORPORATE CONTRIBUTORS :)
let $corpcontributor := $individual/marc:datafield[@tag='710']/marc:subfield[@code='a']/text()
(: COLLECTION/CALL NO :)
let $callno := $individual/marc:datafield[@tag='999']/marc:subfield[@code='a']/text()
let $coll := $individual/marc:datafield[@tag='999']/marc:subfield[@code='l']/text()
let $location := string-join(($coll, $callno), "; ")
return element record {
element title {$title},
element author {$author},
element publisher {$publisher},
element date {$pubdate},
element format {$format},
element contrib_personal {$pcontributor},
element contrib_corporate {$corpcontributor},
element location {$location}
}
}
let $serialize := csv:serialize ($csv, map { 'header': true(), 'separator':'comma'})
return $serialize
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment