Skip to main content

CSL-JSON, BibTeX, and DataCite

Overview

Bibliographic metadata in Layers is carried by four composable definitions in pub.layers.eprint.defs and pub.layers.defs:

  • pub.layers.eprint.defs#citation: a bibliographic citation for a work.
  • pub.layers.eprint.defs#creator: an author, editor, or other contributor.
  • pub.layers.eprint.defs#date: a structured or free-form date.
  • pub.layers.defs#licensing (with pub.layers.defs#licenseRef): the licensing terms for a released artifact.

These definitions follow established interchange conventions rather than inventing a new vocabulary. The structured fields of citation, creator, and date are modeled on CSL-JSON (the JSON serialization used by citeproc, Zotero, and Pandoc) and the DataCite Metadata Schema (the standard for citing datasets and software). licensing mirrors a DataCite rightsList and encodes boolean relationships with an SPDX license expression. This page gives field-by-field mappings so that an importer can move metadata between CSL-JSON, BibTeX/BibLaTeX, DataCite, and Layers without information loss.

A citation is intentionally dual-mode. It can be a single raw formatted string (raw), a set of structured fields, or both. Consumers prefer the structured fields when present and fall back to raw. A valid citation populates at least raw or title.

The citation carries rendered bibliographic metadata. It does not replace the canonical link key: on a pub.layers.eprint.eprint record, eprintIdentifier and eprintIdentifierType (doi, arxiv, acl-anthology, semantic-scholar, pubmed, isbn, url, at-uri, custom) remain the identifier used to resolve and deduplicate the cited work.

CSL-JSON

CSL-JSON is the interchange format that citeproc consumes and that Zotero and Pandoc emit. A CSL item is a JSON object with a type, name variables (author, editor, etc.), date variables (issued, accessed), and string variables (title, container-title, DOI, and so on). The Layers citation def maps onto a CSL item directly.

Citation field mapping

Layers citation fieldCSL-JSON fieldNotes
typetypeCSL item type slug. Most Layers known values (article-journal, paper-conference, article, book, chapter, thesis, report, dataset, software, manuscript, webpage, entry, standard) are CSL item types. preprint is a Layers extension: CSL has no standalone preprint type, so emit it to CSL as article-journal (or article) with a genre note. custom is also a Layers extension and is grounded via typeUri. typeUri grounds a community-defined type when the slug is insufficient.
titletitleTitle of the work.
creatorsauthor, editor, translator, etc.Each #creator carries a role; the importer routes creators into the corresponding CSL name variable by role. See the creator mapping below.
containerTitlecontainer-titleJournal, book, or proceedings title.
publisherpublisherPublisher name.
publisherPlacepublisher-placePublisher location.
issuedissuedIssue/publication date. See the date mapping below.
accessedaccessedDate the work was accessed.
volumevolume
issueissue
pagepagePage range, e.g. 101-126.
editionedition
versionversionVersion of the cited artifact.
doiDOIDOI without the resolver prefix, e.g. 10.18653/v1/2020.acl-main.1.
urlURL
isbnISBN
issnISSN
pmidPMIDPubMed ID.
abstractabstract
languagelanguageBCP-47 language tag.
knowledgeRefs(no CSL field)External grounding for the work or venue (Crossref, OpenAlex, DBLP, Semantic Scholar). Carried as pub.layers.defs#knowledgeRef entries rather than a CSL variable.
raw(no CSL field)Full formatted citation string. Use when structured fields are unavailable; not part of the CSL data model.

Creator (name variable) mapping

A CSL name variable is an array of name objects. Each object is either a structured personal name (with family, given, particles, and suffix) or a literal string (for organizations or unparsed names). The Layers #creator def carries the same parts, plus DataCite and ATProto-native grounding.

Layers creator fieldCSL name object fieldNotes
familyfamilyFamily/surname.
givengivenGiven name(s).
droppingParticledropping-particlee.g. van in some citation styles.
nonDroppingParticlenon-dropping-particlee.g. de la when it sorts with the surname.
suffixsuffixe.g. Jr., III.
literalliteralFull name as one string, or an organization name.
role(selects the name variable)authorauthor, editoreditor, translatortranslator, and so on. CSL has no per-name role field; the role chooses which array the name goes into.
sequence(array order)1-based position; CSL conveys order by array index.
nameType(no CSL field)personal vs organizational. CSL distinguishes these implicitly: organizations use literal. The explicit nameType is retained for DataCite (below).
affiliation(no CSL field)DataCite affiliation; not part of the CSL name object.
agent(no CSL field)ATProto DID grounding via pub.layers.defs#agentRef.
knowledgeRef(no CSL field)ORCID (source orcid), ROR, or OpenAlex grounding via pub.layers.defs#knowledgeRef.

Date mapping

The CSL date model uses date-parts (an array of [year, month, day] arrays) for structured dates and literal (or raw) for free-form dates. The Layers #date def maps onto both.

Layers date fieldCSL date fieldNotes
yeardate-parts[0][0]Four-digit year.
monthdate-parts[0][1]1-12.
daydate-parts[0][2]1-31.
seasonseason
circacircaBoolean approximation flag.
literalliteral (or raw)Free-form date string when structured parts are unavailable.

When year (and optionally month/day) are set, emit date-parts. When only literal is set, emit a CSL literal date.

Worked example

A Layers citation object:

{
"type": "paper-conference",
"title": "Universal Decompositional Semantics on Universal Dependencies",
"creators": [
{
"role": "author",
"nameType": "personal",
"family": "White",
"given": "Aaron Steven",
"sequence": 1,
"knowledgeRef": { "source": "orcid", "identifier": "0000-0002-0410-2143" }
},
{
"role": "author",
"nameType": "personal",
"family": "Reisinger",
"given": "Drew",
"sequence": 2
}
],
"containerTitle": "Proceedings of EMNLP",
"publisher": "Association for Computational Linguistics",
"issued": { "year": 2016 },
"page": "1713-1723",
"doi": "10.18653/v1/D16-1177"
}

The equivalent CSL-JSON item:

{
"type": "paper-conference",
"title": "Universal Decompositional Semantics on Universal Dependencies",
"author": [
{ "family": "White", "given": "Aaron Steven", "ORCID": "0000-0002-0410-2143" },
{ "family": "Reisinger", "given": "Drew" }
],
"container-title": "Proceedings of EMNLP",
"publisher": "Association for Computational Linguistics",
"issued": { "date-parts": [[2016]] },
"page": "1713-1723",
"DOI": "10.18653/v1/D16-1177"
}

The ORCID is carried on the creator's knowledgeRef (source orcid) rather than as a name-object field. Some CSL extensions place an ORCID key on the name object, as shown; a strict CSL consumer ignores it and the ORCID survives in the Layers knowledgeRef.

BibTeX and BibLaTeX

BibTeX (and its successor BibLaTeX) describe references with an entry type and a set of fields. The mapping to Layers runs through CSL, so the entry type maps to citation.type and most fields map to the corresponding citation field.

Entry types

BibTeX/BibLaTeX entryLayers citation.typeNotes
@articlearticle-journalJournal article.
@inproceedings / @conferencepaper-conferenceConference paper.
@bookbook
@incollection / @inbookchapterBook chapter.
@phdthesis / @mastersthesis / @thesisthesisUse features or notes for the degree level.
@techreport / @reportreport
@manualreport or standardChoose by content.
@online / @misc (with URL)webpage
@dataset (BibLaTeX)dataset
@software (BibLaTeX)software
@unpublishedmanuscript or preprint

Fields

BibTeX/BibLaTeX fieldLayers citation fieldNotes
authorcreators (role author)BibTeX Family, Given and Given Family forms parse into #creator family/given; and separates creators. A bracketed corporate author maps to literal with nameType organizational.
editorcreators (role editor)
translator (BibLaTeX)creators (role translator)
titletitle
journal / journaltitlecontainerTitle
booktitlecontainerTitleFor chapters and conference papers.
publisherpublisher
address / locationpublisherPlace
year (or date in BibLaTeX)issued (year, optionally month/day)BibLaTeX date is ISO 8601 and parses into #date parts.
volumevolume
numberissue
pagespageNormalize -- to -.
editionedition
versionversion
doidoi
urlurl
urldate (BibLaTeX)accessed
isbnisbn
issnissn
pmid (BibLaTeX)pmid
abstractabstract
language / langidlanguageMap to a BCP-47 tag.
noteraw or featuresFree-form notes have no structured slot; keep in features or fold into raw.

DataCite Metadata Schema

DataCite is the metadata standard for citing datasets, software, and other research outputs registered with a DOI. It is the right interchange when a Layers citation describes a dataset or software work, and it is the source of the licensing model. DataCite properties map onto Layers as follows.

Core descriptive properties

DataCite propertyLayers equivalentNotes
creators / creatorcitation.creators
creatorName#creator family+given, or literal
nameType (Personal / Organizational)#creator.nameType (personal / organizational)Use nameTypeUri for a community-defined type.
givenName / familyName#creator.given / #creator.family
nameIdentifier (ORCID)#creator.knowledgeRef with source orcidThe ORCID is grounded as a knowledgeRef, not stored as a bare string. ROR (organizations) and OpenAlex author ids use the same field with sources ror and openalex.
affiliation#creator.affiliation
contributorType#creator.roleDataCite contributor types map to the creator role slug (editor, translator, contributor, etc.); use roleUri for a community-defined role.
titlecitation.title
publishercitation.publisher
publicationYearcitation.issued.year
resourceTypeGeneralcitation.typeDataCite Datasetdataset, Softwaresoftware, Text → a text type such as article-journal, JournalArticle (resourceType) → article-journal, ConferencePaperpaper-conference, and so on. Use typeUri when no slug fits.
versioncitation.version
languagecitation.language
descriptions (Abstract)citation.abstract
relatedIdentifierseprint.knowledgeRefs / citation.knowledgeRefsRelated DOIs and other identifiers ground as knowledgeRef entries.
identifier (DOI)eprint.eprintIdentifier (+ eprintIdentifierType doi) and citation.doiThe DOI is the canonical link key on the eprint record and is also carried structurally on the citation.

Rights (licensing) mapping

DataCite represents licensing as a rightsList: a list of rights entries, each with a human-readable name, a rightsIdentifier (typically an SPDX id), and a rightsURI. Layers represents the same information with pub.layers.defs#licensing and pub.layers.defs#licenseRef.

DataCite rights propertyLayers equivalentNotes
rightsListlicensing.licensesArray of license detail.
rights (entry)#licenseRefOne license.
rightsIdentifier (SPDX id)#licenseRef.spdxSPDX identifier, e.g. CC-BY-4.0. spdxUri grounds a community-defined or non-SPDX license node.
rights text (name)#licenseRef.nameHuman-readable license name.
rightsURI#licenseRef.urlURL of the full license text.

The Layers licensing def adds an expression field that DataCite does not have: an SPDX license expression encoding the boolean relationship between licenses. Use OR for dual or multi-licensing where the licensee chooses one (MIT OR Apache-2.0), AND for composite terms where all apply (CC-BY-4.0 AND LicenseRef-LDC-User-Agreement), and WITH for license exceptions. A single governing license needs no expression. Each #licenseRef may scope itself to a component with appliesTo (for example annotations, underlying-text, code, media) when an artifact mixes licenses by part, and may carry attribution and notes for required credit text and usage terms.

Worked example (dataset with licensing)

A Layers eprint record for a dataset, carrying a DataCite-style citation and licensing:

{
"$type": "pub.layers.eprint.eprint",
"eprintIdentifier": "10.5072/example-uds",
"eprintIdentifierType": "doi",
"linkType": "described-in",
"citation": {
"type": "dataset",
"title": "Universal Decompositional Semantics 2.0",
"creators": [
{
"role": "author",
"nameType": "organizational",
"literal": "Decompositional Semantics Initiative",
"knowledgeRef": { "source": "ror", "identifier": "00v76vg69" }
}
],
"publisher": "Decompositional Semantics Initiative",
"issued": { "year": 2020 },
"version": "2.0",
"doi": "10.5072/example-uds"
},
"createdAt": "2026-06-22T00:00:00Z"
}

The corresponding licensing value, expressed where the artifact is released (for example on a pub.layers.corpus.corpus record's licensing field), with the text and the annotations under different terms:

{
"expression": "CC-BY-4.0 AND LicenseRef-LDC-User-Agreement",
"licenses": [
{
"spdx": "CC-BY-4.0",
"name": "Creative Commons Attribution 4.0 International",
"url": "https://creativecommons.org/licenses/by/4.0/",
"appliesTo": "annotations"
},
{
"spdx": "custom",
"spdxUri": "at://did:plc:example/pub.layers.ontology.typeDef/ldc-user-agreement",
"name": "LDC User Agreement",
"appliesTo": "underlying-text"
}
]
}

Conversion Notes

Moving bibliographic metadata into Layers:

  1. Choose the citation.type from the source entry/resource type using the tables above.
  2. Map name lists into citation.creators, routing each creator by role and grounding ORCID/ROR/OpenAlex identifiers on knowledgeRef.
  3. Map dates into #date, preferring structured year/month/day and falling back to literal.
  4. Map the remaining scalar fields (title, containerTitle, doi, page, and so on) directly.
  5. When only a formatted reference string is available, populate raw and leave the structured fields empty.
  6. Map any DataCite rightsList (or other license metadata) into licensing, using the SPDX expression to capture dual, composite, or exception relationships.
  7. Set the canonical link key on the eprint record: eprintIdentifier plus eprintIdentifierType (for example the DOI).

The reverse conversion (Layers to CSL-JSON, BibTeX, or DataCite) reads the structured citation fields, falling back to raw only when the structured fields are absent.