bibframe

package
v0.3.0 Latest Latest
Warning

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

Go to latest
Published: Jun 25, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Overview

Package bibframe converts MARC 21 records to BIBFRAME 2.0, the Library of Congress linked-data model that replaces the flat MARC record with an RDF graph of related resources: a bf:Work (the intellectual content) and a bf:Instance (a particular publication of it), linked by bf:instanceOf / bf:hasInstance.

BIBFRAME is a different data model than MARC — a graph, not a leader+fields record — so this is a one-way MARC->BIBFRAME crosswalk, not a codec, following a subset of the LoC marc2bibframe2 mapping. Two serializations are produced, both hand-written with the standard library only (no RDF dependency):

  • RDF/XML (Encode / Writer / WriteFile) — the canonical LoC serialization.
  • JSON-LD (EncodeJSONLD / JSONLDWriter / WriteJSONLDFile).

The collection Writers implement codex.RecordWriter, so they plug into codex.Convert as conversion targets; both wrap their records in a container (an rdf:RDF element or a JSON-LD @graph) and must be closed:

w := bibframe.NewWriter(out) // RDF/XML; or NewJSONLDWriter for JSON-LD
codex.Convert(iso2709.NewReader(src), w)
w.Close()

The crosswalk covers the common fields (titles, contributions, subjects, language, classification, summary on the Work; title, provision, extent, edition, identifiers and electronic locator on the Instance). Fields outside that set are not carried, and BIBFRAME cannot round-trip back to full MARC.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Decode added in v0.3.0

func Decode(data []byte) ([]*codex.Record, error)

Decode parses a BIBFRAME document — RDF/XML, JSON-LD, Turtle or N-Triples, autodetected — and reverse-crosswalks every bf:Work (with its linked bf:Instance) to a MARC 21 record. It reads the vocabulary the forward crosswalk emits and the common shape of LoC marc2bibframe2 output. BIBFRAME is a lossier model than MARC, so the result carries the crosswalked fields rather than reproducing the original record byte for byte; re-encoding it yields an equivalent BIBFRAME graph.

func Encode

func Encode(r *codex.Record) ([]byte, error)

Encode converts a record to a standalone BIBFRAME RDF/XML document.

func EncodeJSONLD

func EncodeJSONLD(r *codex.Record) ([]byte, error)

EncodeJSONLD converts a record to a standalone BIBFRAME JSON-LD document.

func EncodeNTriples added in v0.3.0

func EncodeNTriples(r *codex.Record) ([]byte, error)

EncodeNTriples converts a record to a standalone BIBFRAME N-Triples document.

func EncodeTurtle added in v0.3.0

func EncodeTurtle(r *codex.Record) ([]byte, error)

EncodeTurtle converts a record to a standalone BIBFRAME Turtle document.

func ReadFile added in v0.3.0

func ReadFile(path string) ([]*codex.Record, error)

ReadFile reads and decodes every BIBFRAME record in the file at path.

func WriteFile

func WriteFile(path string, records []*codex.Record) error

WriteFile converts every record to a BIBFRAME RDF/XML file.

func WriteJSONLDFile

func WriteJSONLDFile(path string, records []*codex.Record) error

WriteJSONLDFile converts every record to a BIBFRAME JSON-LD file.

func WriteNTriplesFile added in v0.3.0

func WriteNTriplesFile(path string, records []*codex.Record) error

WriteNTriplesFile writes every record to path as one N-Triples document.

func WriteTurtleFile added in v0.3.0

func WriteTurtleFile(path string, records []*codex.Record) error

WriteTurtleFile writes every record to path as one Turtle document.

Types

type BIBFRAME

type BIBFRAME struct {
	Work     Work
	Instance Instance
}

BIBFRAME is the Work/Instance pair derived from one MARC record.

func FromRecord

func FromRecord(r *codex.Record) *BIBFRAME

FromRecord maps a MARC record to a BIBFRAME Work/Instance pair in a single pass over the fields, following the common-field crosswalk.

type Classification

type Classification struct {
	Class string // "ClassificationLcc" or "ClassificationDdc"
	Value string
}

Classification is a call number with its BIBFRAME class.

type Contribution

type Contribution struct {
	Primary bool   // a bflc:PrimaryContribution (1xx) vs a plain bf:Contribution (7xx)
	Class   string // agent class: "Person", "Organization" or "Meeting"
	Label   string // agent name
	Role    string // role term, or ""
}

Contribution links an Agent to the Work with an optional role.

type Identifier

type Identifier struct {
	Class string // "Isbn", "Issn" or "Identifier"
	Value string
}

Identifier is a typed identifier carried by the Instance.

type Instance

type Instance struct {
	Titles                  []Title
	ResponsibilityStatement string
	EditionStatement        string
	Provision               *Provision
	Extent                  []string
	Identifiers             []Identifier
	ElectronicLocator       []string
}

Instance is a particular publication of the Work (bf:Instance).

type JSONLDWriter

type JSONLDWriter struct {
	// contains filtered or unexported fields
}

JSONLDWriter converts records and writes them into a JSON-LD @graph array. Close must be called to terminate the document.

func NewJSONLDWriter

func NewJSONLDWriter(w io.Writer) *JSONLDWriter

NewJSONLDWriter returns a Writer that writes a BIBFRAME JSON-LD document to w.

func (*JSONLDWriter) Close

func (wr *JSONLDWriter) Close() error

func (*JSONLDWriter) Write

func (wr *JSONLDWriter) Write(r *codex.Record) error

type NTriplesWriter added in v0.3.0

type NTriplesWriter struct {
	// contains filtered or unexported fields
}

NTriplesWriter writes a collection of records as N-Triples. Because N-Triples has no document framing, records simply concatenate; Close is a no-op kept for API symmetry with the other writers.

func NewNTriplesWriter added in v0.3.0

func NewNTriplesWriter(w io.Writer) *NTriplesWriter

NewNTriplesWriter returns an NTriplesWriter over w. It implements codex.RecordWriter, so it works as a codex.Convert target.

func (*NTriplesWriter) Close added in v0.3.0

func (nw *NTriplesWriter) Close() error

Close reports the first write error, if any.

func (*NTriplesWriter) Write added in v0.3.0

func (nw *NTriplesWriter) Write(r *codex.Record) error

Write serializes one record's BIBFRAME graph.

type Provision

type Provision struct {
	Place     string
	Publisher string
	Date      string
}

Provision is a bf:Publication (place / publisher / date).

type Reader added in v0.3.0

type Reader struct {
	// contains filtered or unexported fields
}

Reader reads BIBFRAME records from a stream. A BIBFRAME document is a single RDF graph, so the first Read parses the whole input; successive calls return the reconstructed records in document order, then io.EOF.

func NewReader added in v0.3.0

func NewReader(r io.Reader) *Reader

NewReader returns a Reader over r. It implements codex.RecordReader, so a BIBFRAME document can be a source for codex.Convert.

func (*Reader) Read added in v0.3.0

func (rd *Reader) Read() (*codex.Record, error)

Read returns the next record, or io.EOF when the document is exhausted.

type Subject

type Subject struct {
	Class string // "Topic", "Place", "Person", "Organization" or "Meeting"
	Label string
}

Subject is a topical, geographic or name access point on the Work.

type Title

type Title struct {
	Type       string // "" for the transcribed title, "uniform" for 130/240
	MainTitle  string
	Subtitle   string
	PartNumber string
	PartName   string
}

Title is a bf:Title with its component portions.

type TurtleWriter added in v0.3.0

type TurtleWriter struct {
	// contains filtered or unexported fields
}

TurtleWriter writes a collection of records as Turtle, emitting the @prefix header once before the first record.

func NewTurtleWriter added in v0.3.0

func NewTurtleWriter(w io.Writer) *TurtleWriter

NewTurtleWriter returns a TurtleWriter over w. It implements codex.RecordWriter.

func (*TurtleWriter) Close added in v0.3.0

func (tw *TurtleWriter) Close() error

Close reports the first write error, if any.

func (*TurtleWriter) Write added in v0.3.0

func (tw *TurtleWriter) Write(r *codex.Record) error

Write serializes one record, preceded by the prefix header on the first call.

type Work

type Work struct {
	Class           string // bf class refining bf:Work (e.g. "Text"), or ""
	Titles          []Title
	Contributions   []Contribution
	Subjects        []Subject
	GenreForms      []string
	Languages       []string // ISO 639-2 codes
	Classifications []Classification
	Summary         []string
}

Work is the intellectual content (bf:Work) plus a specific content class.

type Writer

type Writer struct {
	// contains filtered or unexported fields
}

Writer converts records and writes them as an rdf:RDF graph. Close must be called to emit the closing tag.

func NewWriter

func NewWriter(w io.Writer) *Writer

NewWriter returns a Writer that writes a BIBFRAME RDF/XML graph to w.

func (*Writer) Close

func (wr *Writer) Close() error

Close writes the closing </rdf:RDF> tag.

func (*Writer) Write

func (wr *Writer) Write(r *codex.Record) error

Write converts one record and writes its Work and Instance nodes.

Jump to

Keyboard shortcuts

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