pgrdf

package module
v1.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 3, 2023 License: MIT Imports: 8 Imported by: 0

README

pgrdf - a Project Gutenberg RDF library

A library written in the Go language for reading and writing Project Gutenberg RDF documents using a simpler set of intermediary data types, which can also be marshaled to JSON for a more compact representation of the metadata.

Helper functions are provided for reading RDF files directly from their tar archive. See the usage section below for more information.

The Ebook struct is used as an intermediary representation of the metadata, which provides a much easier set of data types than needing to handle RDF directly, and can also be marshaled to JSON.

The following is a (truncated) JSON example:

{
  "id": 1400,
  "released": "1998-07-01",
  "titles": ["Great Expectations"],
  "creators": [{
    "id": 37,
    "name": "Dickens, Charles",
    "aliases": [
      "Dickens, Charles John Huffam",
      "Boz"
    ],
    "born_year": 1812,
    "died_year": 1870,
    "webpages": ["https://en.wikipedia.org/wiki/Charles_Dickens"]
  }]
}

And here's the corresponding RDF snippet for Great Expectations:

<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xml:base="http://www.gutenberg.org/"
         xmlns:dcam="http://purl.org/dc/dcam/"
         xmlns:dcterms="http://purl.org/dc/terms/"
         xmlns:pgterms="http://www.gutenberg.org/2009/pgterms/"
         xmlns:cc="http://web.resource.org/cc/"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
    <pgterms:ebook rdf:about="ebooks/1400">
        <dcterms:title>Great Expectations</dcterms:title>
        <dcterms:creator>
            <pgterms:agent rdf:about="2009/agents/37">
                <pgterms:name>Dickens, Charles</pgterms:name>
                <pgterms:alias>Dickens, Charles John Huffam</pgterms:alias>
                <pgterms:alias>Boz</pgterms:alias>
                <pgterms:webpage rdf:resource="https://en.wikipedia.org/wiki/Charles_Dickens"/>
                <pgterms:birthdate rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">1812</pgterms:birthdate>
                <pgterms:deathdate rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">1870</pgterms:deathdate>
            </pgterms:agent>
        </dcterms:creator>
        <dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1998-07-01</dcterms:issued>
        <!-- ... -->
    </pgterms:ebook>
</rdf:RDF>

Usage

A basic example might be:

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"os"

	"github.com/mrcook/pgrdf"
)

func main() {
	rdfFile, _ := os.Open("/path/to/pg1400.rdf")
	ebook, _ := pgrdf.ReadRDF(rdfFile)

	ebook.Titles = append(ebook.Titles, "In Three Volumes")

	w := bytes.NewBuffer([]byte{}) // create an io.Writer
	_ = ebook.WriteRDF(w)          // write the RDF data

	data, _ := json.Marshal(ebook) // marshal to JSON
	fmt.Println(string(data))
}

It is possible to read an RDF directly from the official Project Gutenberg offline catalog archive: http://www.gutenberg.org/cache/epub/feeds/.

There are currently two archives available:

rdf-files.tar.bz2
rdf-files.tar.zip

Reading from a bz2 is considerably slower than just the plain tar archive, so it is recommended to first extract the tarball from the bz2 archive. Example on Linux:

$ bzip2 -dk rdf-files.tar.bz2

If this is not possible/desirable then the .tar.bz2 must first be wrapped in a bzip2 reader:

rdf, err := archive.FromTarArchive(bzip2.NewReader(archiveFile), id)

When an archive is fully extracted to a local directory, the FromDirectory function can be used:

rdf, err := archive.FromDirectory("/rdf_files_dir", 1400)

It is important to note that the directory structure must be exactly as extracted from the archive:

rdf_files_dir/
├─ cache/
│  └─ epub/
│     ├─ 1/
│     │  └─ pg1.rdf
│     ├─ 2/
│     ...

LICENSE

Copyright (c) 2018-2023 Michael R. Cook. All rights reserved.

This work is licensed under the terms of the MIT license. For a copy, see https://opensource.org/licenses/MIT.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AuthorLink struct {
	// URL for this author.
	// `<rdf:Description rdf:about="">`
	URL string `json:"url"`

	// A short description about this link.
	// `<dcterms:description>`
	Description string `json:"description"`
}

AuthorLink is an external resource about the author, usually a Wikipedia link. `<rdf:Description>`

type BookType added in v1.6.0

type BookType string
const (
	BookTypeUnknown     BookType = ""
	BookTypeCollection  BookType = "Collection"
	BookTypeDataset     BookType = "Dataset"
	BookTypeImage       BookType = "Image"
	BookTypeMovingImage BookType = "MovingImage"
	BookTypeSound       BookType = "Sound"
	BookTypeStillImage  BookType = "StillImage"
	BookTypeText        BookType = "Text"
)

type Bookshelf

type Bookshelf struct {
	// The bookshelf name.
	// <rdf:Description><rdf:value>
	Name string `json:"subject"`

	// Name of bookshelf at gutenberg.org.
	// <rdf:Description><dcam:memberOf rdf:resource="2009/pgterms/Bookshelf"/>
	Resource string `json:"resource"`
}

Bookshelf is a Project Gutenberg bookshelf name. <pgterms:bookshelf>

type Creator

type Creator struct {
	// Unique Project Gutenberg ID.
	// `<pgterms:agent rdf:about="..">`
	ID int `json:"id"`

	// Name of the creator.
	// `<pgterms:name>`
	Name string `json:"name"`

	// Any aliases for the creator.
	// `<pgterms:alias>`
	Aliases []string `json:"aliases,omitempty"`

	// Date of Birth.
	// `<pgterms:birthdate>`
	Born int `json:"born_year,omitempty"`

	// Date of Death.
	// `<pgterms:deathdate>`
	Died int `json:"died_year,omitempty"`

	// Code indicating the role. e.g. `aut`, `edt`, `ill`, etc.
	// `aut` roles are added to the RDF as a `<dcterms:creator>` tag,
	// all other roles use a `<marcrel:*>` tag, e.g. `<marcrel:edt>`.
	Role MarcRelator `json:"role,omitempty"`

	// URLs for this creator (e.g. Wikipedia).
	// `<pgterms:webpage>`
	WebPages []string `json:"webpages,omitempty"`
}

Creator is a person involved in the creation of the work, such as the author, illustrator, etc. When a creator has an `aut` role, the RDF tag used is `<dcterms:creator>`, all other roles use `<marcrel:*>` tags. `aut` roles MUST include an agent ID and Name but for other roles the agent information is optional.

type Ebook

type Ebook struct {
	// PG eText ID.
	// `<pgterms:ebook rdf:about="...">`.
	ID int `json:"id"`

	// Full title for this work (main, sub, etc.).
	// `<dcterms:title>`
	Titles []string `json:"titles"`

	// Alternate titles for this work.
	// `<dcterms:alternative>`
	AlternateTitles []string `json:"alternate_titles,omitempty"`

	// // The table of contents for a book, with chapters separated by ` -- `.
	// `<dcterms:tableOfContents>`
	TableOfContents string `json:"toc"`

	// Publisher of this work; always "Project Gutenberg".
	// `<dcterms:publisher>`
	Publisher string `json:"publisher"`

	// Year this work was published in.
	// `<pgterms:marc906>`
	PublishedYear int `json:"published_year"`

	// PG release/issued date in ISO 8601 format. Example: 2006-01-02.
	// `<dcterms:issued>`
	ReleaseDate string `json:"released"`

	// A short summary of the work.
	// `<pgterms:marc520>`
	Summary string `json:"summary,omitempty"`

	// The series this work originally belonged to.
	// `<pgterms:marc440>`
	Series []string `json:"series,omitempty"`

	// Languages used in this book.
	// `<dcterms:language>`
	Languages []string `json:"languages,omitempty"`

	// Language dialect (ISO 3166-2), _probably_ for the primary language only.
	// `<pgterms:marc907>`
	LanguageDialect string `json:"language_dialect,omitempty"`

	// Notes about the language of the work, e.g. "Uses 19th century spelling."
	// `<pgterms:marc546>`
	LanguageNotes []string `json:"language_notes,omitempty"`

	// Publication note of the source material: publisher, city, year, etc.
	// `<pgterms:marc260>`
	PublicationNote string `json:"publication_note,omitempty"`

	// Edition note for this work, e.g. "2nd Edition", "A new edition with eleven new poems.", etc.
	// `<pgterms:marc250>:`
	EditionNote string `json:"edition_note,omitempty"`

	// ProductionNotes for this ebook. This can also include "updated" dates, either as a
	// separate entry or as part of the credit, e.g. "J. Smith\nUpdated: 2022-07-14".
	// `<pgterms:marc508>`
	ProductionNotes []string `json:"production_notes,omitempty"`

	// Rights for this work. Most are "Public domain in the USA."
	// `<dcterms:rights>`
	Copyright string `json:"copyright"`

	// Distributed Proofreaders clearance code, e.g. "20050213050736stahl".
	// `<pgterms:marc905>`
	CopyrightClearanceCode string `json:"pg_dp_clearance"`

	// Type of this work, one of:
	//   Collection, Dataset, Image, MovingImage, Sound, StillImage, Text
	// `<dcterms:type>`
	BookType BookType `json:"type"`

	// Additional notes about this eText.
	// `<dcterms:description>`
	Notes []string `json:"note"`

	// A description of the physical attributes of the source of this work, e.g. "5 pages : illustrations, map, portraits".
	// `<pgterms:marc300>`
	PhysicalDescriptionNote string `json:"physical_description_note"`

	// URLs to information about the source of this work, e.g. image scans on Internet Archive website.
	// `<pgterms:marc904>`
	SourceLinks []string `json:"source_link"`

	// Library of Congress Control Number
	// `<pgterms:marc010>`
	LCCN string `json:"lccn"`

	// ISBN of this work - possibly of the work used for the OCR.
	// `<pgterms:marc020>`
	ISBN string `json:"isbn"`

	// Book covers, or images acting as a book cover, i.e. this could be a title page.
	// A URL or file path in the HTML ebook directory.
	// `<pgterms:marc901>`
	BookCovers []string `json:"book_covers"`

	// URL of an image file representing the title page of a book.
	// `<pgterms:marc902>`
	TitlePageImage string `json:"title_page_image"`

	// URL of an image file representing the back cover of a book.
	// `<pgterms:marc903>`
	BackCover string `json:"back_cover"`

	// List of creators involved in the creation of this work, such as the
	// authors, editors, and illustrators.
	// `<dcterms:creator>`, `<marcrel:*>`, `<pgterms:agent>`
	Creators []Creator `json:"creators"`

	// List of subjects for this work.
	// `<dcterms:subject>`
	Subjects []Subject `json:"subjects"`

	// List of files associated with this work (txt, zip, images, etc.).
	// `<dcterms:hasFormat>`, `<pgterms:file>`
	Files []File `json:"files"`

	// List of PG bookshelves this work is available in.
	// `<pgterms:bookshelf>`
	Bookshelves []Bookshelf `json:"bookshelves"`

	// Download count - only from the previous 30 days at the time the RDF was generated.
	// <pgterms:downloads>
	Downloads int `json:"downloads"`

	// List of author links (typically to Wikipedia).
	// `<rdf:Description>`
	AuthorLinks []AuthorLink `json:"author_links"`

	// A Creative Commons comment, usually just info on where to find the RDF files.
	// `<cc:Work><rdfs:comment>`
	CCComment string `json:"cc_comment"`

	// A Creative Commons license URL.
	// `<cc:Work><cc:license>`
	CCLicense string `json:"cc_license"`
}

Ebook reads an RDF from the input stream and maps it onto this object, which hides the complexities of the source RDF for easier interaction. This type can also be un/marshaled to JSON.

func ReadRDF added in v1.4.0

func ReadRDF(r io.Reader) (*Ebook, error)

ReadRDF document from the given `io.Reader` and unmarshal to an Ebook.

func (e *Ebook) AddAuthorLink(description, url string)

func (*Ebook) AddBookFile added in v1.4.0

func (e *Ebook) AddBookFile(file File)

func (*Ebook) AddBookshelf added in v1.4.0

func (e *Ebook) AddBookshelf(name, resource string)

func (*Ebook) AddCreator added in v1.4.0

func (e *Ebook) AddCreator(creator Creator)

AddCreator appends an Agent to the creators list with the given role.

func (*Ebook) AddSubject added in v1.4.0

func (e *Ebook) AddSubject(heading, schema string)

func (*Ebook) SetBookType added in v1.6.0

func (e *Ebook) SetBookType(value string)

func (*Ebook) WriteRDF added in v1.4.0

func (e *Ebook) WriteRDF(w io.Writer) error

WriteRDF marshals the Ebook to an RDF document and writes it to the provided `io.Writer`.

type File

type File struct {
	// URL of the file at gutenberg.org.
	// <pgterms:file rdf:about="...">
	URL string `json:"url"`

	// Extent is the size of the file in bytes.
	// `<dcterms:extent>`
	Extent int `json:"extent"`

	// Modified date for this resource.
	// `<dcterms:modified>`
	Modified string `json:"modified"`

	// Encodings for this resource, e.g. "image/jpeg"
	// `<dcterms:format>`
	Encodings []string `json:"encoding"`
}

File is a resource for the ebook such as .txt, .tei, .zip, etc.

func (*File) AddEncoding added in v1.4.0

func (f *File) AddEncoding(encoding string)

type MarcRelator added in v1.5.0

type MarcRelator string

MarcRelator representing a MARC Relator code, e.g. `aut`, `edt`, etc.

const (
	// RoleAut is not found in any current RDF, but is used to distinguish authors
	// in the pgrdf.Ebook, and for marshaling to an RDF as a `dcterms:creator`.
	RoleAut MarcRelator = "aut" // Author

	RoleAbr MarcRelator = "abr" // Abridger
	RoleAcp MarcRelator = "acp" // Art copyist
	RoleAct MarcRelator = "act" // Actor
	RoleAdi MarcRelator = "adi" // Art director
	RoleAdp MarcRelator = "adp" // Adapter
	RoleAft MarcRelator = "aft" // Author of afterword, colophon, etc.
	RoleAnl MarcRelator = "anl" // Analyst
	RoleAnm MarcRelator = "anm" // Animator
	RoleAnn MarcRelator = "ann" // Annotator
	RoleAnt MarcRelator = "ant" // Bibliographic antecedent
	RoleApe MarcRelator = "ape" // Appellee
	RoleApl MarcRelator = "apl" // Appellant
	RoleApp MarcRelator = "app" // Applicant
	RoleAqt MarcRelator = "aqt" // Author in quotations or text abstracts
	RoleArc MarcRelator = "arc" // Architect
	RoleArd MarcRelator = "ard" // Artistic director
	RoleArr MarcRelator = "arr" // Arranger
	RoleArt MarcRelator = "art" // Artist
	RoleAsg MarcRelator = "asg" // Assignee
	RoleAsn MarcRelator = "asn" // Associated name
	RoleAto MarcRelator = "ato" // Autographer
	RoleAtt MarcRelator = "att" // Attributed name
	RoleAuc MarcRelator = "auc" // Auctioneer
	RoleAud MarcRelator = "aud" // Author of dialog
	RoleAui MarcRelator = "aui" // Author of introduction, etc.
	RoleAus MarcRelator = "aus" // Screenwriter
	RoleBdd MarcRelator = "bdd" // Binding designer
	RoleBjd MarcRelator = "bjd" // Bookjacket designer
	RoleBkd MarcRelator = "bkd" // Book designer
	RoleBkp MarcRelator = "bkp" // Book producer
	RoleBlw MarcRelator = "blw" // Blurb writer
	RoleBnd MarcRelator = "bnd" // Binder
	RoleBpd MarcRelator = "bpd" // Bookplate designer
	RoleBrd MarcRelator = "brd" // Broadcaster
	RoleBrl MarcRelator = "brl" // Braille embosser
	RoleBsl MarcRelator = "bsl" // Bookseller
	RoleCas MarcRelator = "cas" // Caster
	RoleCcp MarcRelator = "ccp" // Conceptor
	RoleChr MarcRelator = "chr" // Choreographer
	RoleCli MarcRelator = "cli" // Client
	RoleCll MarcRelator = "cll" // Calligrapher
	RoleClr MarcRelator = "clr" // Colorist
	RoleClt MarcRelator = "clt" // Collotyper
	RoleCmm MarcRelator = "cmm" // Commentator
	RoleCmp MarcRelator = "cmp" // Composer
	RoleCmt MarcRelator = "cmt" // Compositor
	RoleCnd MarcRelator = "cnd" // Conductor
	RoleCng MarcRelator = "cng" // Cinematographer
	RoleCns MarcRelator = "cns" // Censor
	RoleCoe MarcRelator = "coe" // Contestant-appellee
	RoleCol MarcRelator = "col" // Collector
	RoleCom MarcRelator = "com" // Compiler
	RoleCon MarcRelator = "con" // Conservator
	RoleCor MarcRelator = "cor" // Collection registrar
	RoleCos MarcRelator = "cos" // Contestant
	RoleCot MarcRelator = "cot" // Contestant-appellant
	RoleCou MarcRelator = "cou" // Court governed
	RoleCov MarcRelator = "cov" // Cover designer
	RoleCpc MarcRelator = "cpc" // Copyright claimant
	RoleCpe MarcRelator = "cpe" // Complainant-appellee
	RoleCph MarcRelator = "cph" // Copyright holder
	RoleCpl MarcRelator = "cpl" // Complainant
	RoleCpt MarcRelator = "cpt" // Complainant-appellant
	RoleCre MarcRelator = "cre" // Creator
	RoleCrp MarcRelator = "crp" // Correspondent
	RoleCrr MarcRelator = "crr" // Corrector
	RoleCrt MarcRelator = "crt" // Court reporter
	RoleCsl MarcRelator = "csl" // Consultant
	RoleCsp MarcRelator = "csp" // Consultant to a project
	RoleCst MarcRelator = "cst" // Costume designer
	RoleCtb MarcRelator = "ctb" // Contributor
	RoleCte MarcRelator = "cte" // Contestee-appellee
	RoleCtg MarcRelator = "ctg" // Cartographer
	RoleCtr MarcRelator = "ctr" // Contractor
	RoleCts MarcRelator = "cts" // Contestee
	RoleCtt MarcRelator = "ctt" // Contestee-appellant
	RoleCur MarcRelator = "cur" // Curator
	RoleCwt MarcRelator = "cwt" // Commentator for written text
	RoleDbp MarcRelator = "dbp" // Distribution place
	RoleDfd MarcRelator = "dfd" // Defendant
	RoleDfe MarcRelator = "dfe" // Defendant-appellee
	RoleDft MarcRelator = "dft" // Defendant-appellant
	RoleDgc MarcRelator = "dgc" // Degree committee member
	RoleDgg MarcRelator = "dgg" // Degree granting institution
	RoleDgs MarcRelator = "dgs" // Degree supervisor
	RoleDis MarcRelator = "dis" // Dissertant
	RoleDln MarcRelator = "dln" // Delineator
	RoleDnc MarcRelator = "dnc" // Dancer
	RoleDnr MarcRelator = "dnr" // Donor
	RoleDpc MarcRelator = "dpc" // Depicted
	RoleDpt MarcRelator = "dpt" // Depositor
	RoleDrm MarcRelator = "drm" // Draftsman
	RoleDrt MarcRelator = "drt" // Director
	RoleDsr MarcRelator = "dsr" // Designer
	RoleDst MarcRelator = "dst" // Distributor
	RoleDtc MarcRelator = "dtc" // Data contributor
	RoleDte MarcRelator = "dte" // Dedicatee
	RoleDtm MarcRelator = "dtm" // Data manager
	RoleDto MarcRelator = "dto" // Dedicator
	RoleDub MarcRelator = "dub" // Dubious author
	RoleEdc MarcRelator = "edc" // Editor of compilation
	RoleEdm MarcRelator = "edm" // Editor of moving image work
	RoleEdt MarcRelator = "edt" // Editor
	RoleEgr MarcRelator = "egr" // Engraver
	RoleElg MarcRelator = "elg" // Electrician
	RoleElt MarcRelator = "elt" // Electrotyper
	RoleEng MarcRelator = "eng" // Engineer
	RoleEnj MarcRelator = "enj" // Enacting jurisdiction
	RoleEtr MarcRelator = "etr" // Etcher
	RoleEvp MarcRelator = "evp" // Event place
	RoleExp MarcRelator = "exp" // Expert
	RoleFac MarcRelator = "fac" // Facsimilist
	RoleFds MarcRelator = "fds" // Film distributor
	RoleFld MarcRelator = "fld" // Field director
	RoleFlm MarcRelator = "flm" // Film editor
	RoleFmd MarcRelator = "fmd" // Film director
	RoleFmk MarcRelator = "fmk" // Filmmaker
	RoleFmo MarcRelator = "fmo" // Former owner
	RoleFmp MarcRelator = "fmp" // Film producer
	RoleFnd MarcRelator = "fnd" // Funder
	RoleFpy MarcRelator = "fpy" // First party
	RoleFrg MarcRelator = "frg" // Forger
	RoleGis MarcRelator = "gis" // Geographic information specialist
	RoleHis MarcRelator = "his" // Host institution
	RoleHnr MarcRelator = "hnr" // Honoree
	RoleHst MarcRelator = "hst" // Host
	RoleIll MarcRelator = "ill" // Illustrator
	RoleIlu MarcRelator = "ilu" // Illuminator
	RoleIns MarcRelator = "ins" // Inscriber
	RoleInv MarcRelator = "inv" // Inventor
	RoleIsb MarcRelator = "isb" // Issuing body
	RoleItr MarcRelator = "itr" // Instrumentalist
	RoleIve MarcRelator = "ive" // Interviewee
	RoleIvr MarcRelator = "ivr" // Interviewer
	RoleJud MarcRelator = "jud" // Judge
	RoleJug MarcRelator = "jug" // Jurisdiction governed
	RoleLbr MarcRelator = "lbr" // Laboratory
	RoleLbt MarcRelator = "lbt" // Librettist
	RoleLdr MarcRelator = "ldr" // Laboratory director
	RoleLed MarcRelator = "led" // Lead
	RoleLee MarcRelator = "lee" // Libelee-appellee
	RoleLel MarcRelator = "lel" // Libelee
	RoleLen MarcRelator = "len" // Lender
	RoleLet MarcRelator = "let" // Libelee-appellant
	RoleLgd MarcRelator = "lgd" // Lighting designer
	RoleLie MarcRelator = "lie" // Libelant-appellee
	RoleLil MarcRelator = "lil" // Libelant
	RoleLit MarcRelator = "lit" // Libelant-appellant
	RoleLsa MarcRelator = "lsa" // Landscape architect
	RoleLse MarcRelator = "lse" // Licensee
	RoleLso MarcRelator = "lso" // Licensor
	RoleLtg MarcRelator = "ltg" // Lithographer
	RoleLyr MarcRelator = "lyr" // Lyricist
	RoleMcp MarcRelator = "mcp" // Music copyist
	RoleMdc MarcRelator = "mdc" // Metadata contact
	RoleMed MarcRelator = "med" // Medium
	RoleMfp MarcRelator = "mfp" // Manufacture place
	RoleMfr MarcRelator = "mfr" // Manufacturer
	RoleMod MarcRelator = "mod" // Moderator
	RoleMon MarcRelator = "mon" // Monitor
	RoleMrb MarcRelator = "mrb" // Marbler
	RoleMrk MarcRelator = "mrk" // Markup editor
	RoleMsd MarcRelator = "msd" // Musical director
	RoleMte MarcRelator = "mte" // Metal-engraver
	RoleMtk MarcRelator = "mtk" // Minute taker
	RoleMus MarcRelator = "mus" // Musician
	RoleNrt MarcRelator = "nrt" // Narrator
	RoleOpn MarcRelator = "opn" // Opponent
	RoleOrg MarcRelator = "org" // Originator
	RoleOrm MarcRelator = "orm" // Organizer
	RoleOsp MarcRelator = "osp" // Onscreen presenter
	RoleOth MarcRelator = "oth" // Other
	RoleOwn MarcRelator = "own" // Owner
	RolePad MarcRelator = "pad" // Place of address
	RolePan MarcRelator = "pan" // Panelist
	RolePat MarcRelator = "pat" // Patron
	RolePbd MarcRelator = "pbd" // Publishing director
	RolePbl MarcRelator = "pbl" // Publisher
	RolePdr MarcRelator = "pdr" // Project director
	RolePfr MarcRelator = "pfr" // Proofreader
	RolePht MarcRelator = "pht" // Photographer
	RolePlt MarcRelator = "plt" // Platemaker
	RolePma MarcRelator = "pma" // Permitting agency
	RolePmn MarcRelator = "pmn" // Production manager
	RolePop MarcRelator = "pop" // Printer of plates
	RolePpm MarcRelator = "ppm" // Papermaker
	RolePpt MarcRelator = "ppt" // Puppeteer
	RolePra MarcRelator = "pra" // Praeses
	RolePrc MarcRelator = "prc" // Process contact
	RolePrd MarcRelator = "prd" // Production personnel
	RolePre MarcRelator = "pre" // Presenter
	RolePrf MarcRelator = "prf" // Performer
	RolePrg MarcRelator = "prg" // Programmer
	RolePrm MarcRelator = "prm" // Printmaker
	RolePrn MarcRelator = "prn" // Production company
	RolePro MarcRelator = "pro" // Producer
	RolePrp MarcRelator = "prp" // Production place
	RolePrs MarcRelator = "prs" // Production designer
	RolePrt MarcRelator = "prt" // Printer
	RolePrv MarcRelator = "prv" // Provider
	RolePta MarcRelator = "pta" // Patent applicant
	RolePte MarcRelator = "pte" // Plaintiff-appellee
	RolePtf MarcRelator = "ptf" // Plaintiff
	RolePth MarcRelator = "pth" // Patent holder
	RolePtt MarcRelator = "ptt" // Plaintiff-appellant
	RolePup MarcRelator = "pup" // Publication place
	RoleRbr MarcRelator = "rbr" // Rubricator
	RoleRcd MarcRelator = "rcd" // Recordist
	RoleRce MarcRelator = "rce" // Recording engineer
	RoleRcp MarcRelator = "rcp" // Addressee
	RoleRdd MarcRelator = "rdd" // Radio director
	RoleRed MarcRelator = "red" // Redaktor
	RoleRen MarcRelator = "ren" // Renderer
	RoleRes MarcRelator = "res" // Researcher
	RoleRev MarcRelator = "rev" // Reviewer
	RoleRpc MarcRelator = "rpc" // Radio producer
	RoleRps MarcRelator = "rps" // Repository
	RoleRpt MarcRelator = "rpt" // Reporter
	RoleRpy MarcRelator = "rpy" // Responsible party
	RoleRse MarcRelator = "rse" // Respondent-appellee
	RoleRsg MarcRelator = "rsg" // Restager
	RoleRsp MarcRelator = "rsp" // Respondent
	RoleRsr MarcRelator = "rsr" // Restorationist
	RoleRst MarcRelator = "rst" // Respondent-appellant
	RoleRth MarcRelator = "rth" // Research team head
	RoleRtm MarcRelator = "rtm" // Research team member
	RoleSad MarcRelator = "sad" // Scientific advisor
	RoleSce MarcRelator = "sce" // Scenarist
	RoleScl MarcRelator = "scl" // Sculptor
	RoleScr MarcRelator = "scr" // Scribe
	RoleSds MarcRelator = "sds" // Sound designer
	RoleSec MarcRelator = "sec" // Secretary
	RoleSgd MarcRelator = "sgd" // Stage director
	RoleSgn MarcRelator = "sgn" // Signer
	RoleSht MarcRelator = "sht" // Supporting host
	RoleSll MarcRelator = "sll" // Seller
	RoleSng MarcRelator = "sng" // Singer
	RoleSpk MarcRelator = "spk" // Speaker
	RoleSpn MarcRelator = "spn" // Sponsor
	RoleSpy MarcRelator = "spy" // Second party
	RoleSrv MarcRelator = "srv" // Surveyor
	RoleStd MarcRelator = "std" // Set designer
	RoleStg MarcRelator = "stg" // Setting
	RoleStl MarcRelator = "stl" // Storyteller
	RoleStm MarcRelator = "stm" // Stage manager
	RoleStn MarcRelator = "stn" // Standards body
	RoleStr MarcRelator = "str" // Stereotyper
	RoleTcd MarcRelator = "tcd" // Technical director
	RoleTch MarcRelator = "tch" // Teacher
	RoleThs MarcRelator = "ths" // Thesis advisor
	RoleTld MarcRelator = "tld" // Television director
	RoleTlp MarcRelator = "tlp" // Television producer
	RoleTrc MarcRelator = "trc" // Transcriber
	RoleTrl MarcRelator = "trl" // Translator
	RoleTyd MarcRelator = "tyd" // Type designer
	RoleTyg MarcRelator = "tyg" // Typographer
	RoleUvp MarcRelator = "uvp" // University place
	RoleVac MarcRelator = "vac" // Voice actor
	RoleVdg MarcRelator = "vdg" // Videographer
	RoleWac MarcRelator = "wac" // Writer of added commentary
	RoleWal MarcRelator = "wal" // Writer of added lyrics
	RoleWam MarcRelator = "wam" // Writer of accompanying material
	RoleWat MarcRelator = "wat" // Writer of added text
	RoleWdc MarcRelator = "wdc" // Woodcutter
	RoleWde MarcRelator = "wde" // Wood engraver
	RoleWin MarcRelator = "win" // Writer of introduction
	RoleWit MarcRelator = "wit" // Witness
	RoleWpr MarcRelator = "wpr" // Writer of preface
	RoleWst MarcRelator = "wst" // Writer of supplementary textual content

	/*
	 * NOTE: the following have been discontinued and should not be used.
	 */
	RoleClb MarcRelator = "clb" // Collaborator (discontinued)
	RoleGrt MarcRelator = "grt" // Graphic technician (discontinued)
	RoleVoc MarcRelator = "voc" // Vocalist (discontinued)

	// RoleUnk (`unk`) is only found in a few Project Gutenberg RDF documents,
	// but is not listed in the official MARC relators.
	RoleUnk MarcRelator = "unk"
)

All MARC codes for Relators. For a full description of each code visit: https://www.loc.gov/marc/relators/relaterm.html

type Subject

type Subject struct {
	// Heading or other label
	// <rdf:Description><rdf:value>
	Heading string `json:"heading"`

	// Vocabulary Encoding Scheme.
	// Usually http://purl.org/dc/terms/LCSH or http://purl.org/dc/terms/LCC
	// <rdf:Description><dcam:memberOf rdf:resource="..."/>
	Schema string `json:"schema"`
}

Subject is a Dublin Core Vocabulary Encoding Scheme such as LCSH and LCC. <dcterms:subject>

Directories

Path Synopsis
Package archive contains a couple of helper functions for reading RDF files directly from an archive location such as a directory or .tar archive file.
Package archive contains a couple of helper functions for reading RDF files directly from an archive location such as a directory or .tar archive file.
internal
marshaler
Package marshaler contains a set of structs for generating a Project Gutenberg RDF XML document.
Package marshaler contains a set of structs for generating a Project Gutenberg RDF XML document.
nodeid
Package nodeid contains a simple utility method for generating unique IDs, which can then be used when generating a new RDF document.
Package nodeid contains a simple utility method for generating unique IDs, which can then be used when generating a new RDF document.
unmarshaler
Package unmarshaler contains a set of structs for unmarshaling a Project Gutenberg RDF XML document.
Package unmarshaler contains a set of structs for unmarshaling a Project Gutenberg RDF XML document.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL