12 KiB
The paperspec formats
This page serves three readers. A student new to the problem will find each term defined where it first appears. A developer who will write a reader, writer, converter or checker will find each topic pointing to its chapter. A researcher or standards author will find the status, the limits and a comparison stated outright.
The idea
Scientists who rely on a paper keep asking two questions.
- Does the cited passage say what is claimed? A citation to a real paper can still be inaccurate, incomplete or beside the point, so a reader needs to see the exact sentence it rests on.
- Where did this number come from, and how far was it checked? A force constant in a table, a value read off a plot, a parameter in a model: each should lead back to the cell or sentence it came from, with a record of who compared it with the page.
Most tools for scientific literature aggregate. They index hundreds of millions of papers and answer questions over all of them, shallowly. paperspec does the opposite.
A team working on a focused question cares more about fifty papers it understands completely than about the world's literature. Those fifty papers deserve to be converted once, corrected once, split down to the sentence, annotated by the people who know them, linked to checked claims, and kept.
A model can summarize a paper. It cannot give you a signed statement that a named person checked a passage, IDs that never move, or a store its owner controls. The formats supply those three, and they are worth most at the scale of one team.
paperspec is a set of file formats for scientific papers that have been converted, split into addressable pieces and checked.
The repository is at https://git.scient.ing/infra/paperspec.
It is version 0.1.0 and defines 32 formats; in registry/formats.json, 19 are candidate and 13 are provisional.
Who it is for
| User | Example |
|---|---|
| One researcher | A thesis student, a science writer or fact-checker, a Wikipedia editor checking a citation, a scientist keeping a deep personal library. |
| An academic lab | A research group, a thesis committee, a journal club reading one annotated paper together. |
| A course | An instructor whose students learn to check whether a source supports a claim, with answers that are addresses and can be graded. |
| An industrial team | A computational chemistry or materials group that needs to show which passage of which paper each parameter came from. |
"Team" throughout means roughly five to twenty people with a few dozen to a few hundred papers that matter. The design targets that scale: hundreds of documents (500 papers come to about a million and a half database rows).
What the repository contains
The repository defines files and checks them. It holds no application.
The formats are identified as scienting-<name>/<major>, such as scienting-doc/1.
That prefix is the formats' namespace.
It appears inside hashed data and test vectors, and it is separate from the repository's name.
| Folder | Holds |
|---|---|
| spec/ | The specification, in 24 chapters (00 to 23). Normative. |
| schemas/ | 42 JSON (plain-text data format) Schemas for the files and records. |
| registry/ | The list of formats, the rule IDs a checker reports, download-stamp rules, and default rights requirements. |
| tools/ | Reference programs: check.py checks everything, build.py rebuilds the fixtures and vectors, load.py loads packages into SQLite, and oracle/ is a compact implementation of every rule. |
| vectors/ | 25 files of test vectors: inputs and the exact outputs every implementation must compute. |
| fixtures/ | Five valid example packages, one of them also as a zip, 31 deliberately broken ones that each break one named rule, example records, and the test keys that signed them. All text is synthetic. |
| sql/ | Tables for SQLite, Dolt and PostgreSQL, and a SQLite bundle with full-text search. |
| context/ | The JSON-LD context that makes annotation layers W3C Web Annotations. |
| docs/ | Guides, including this page. |
Roles
The formats serve five roles. A role is a job someone could implement. The repository ships reference tools only for the checker and store roles.
| Role | Does |
|---|---|
| Reader | Opens a package, resolves addresses and anchors, and shows text, annotations and each passage's fidelity level. |
| Writer | Produces files in these formats: nodes, corrections, receipts, annotations, datasets. |
| Converter | Turns a witness (a PDF, JATS XML, the article format publishers use, a LaTeX source archive, an HTML page, an EPUB or a Typst project) into a package and raises doubtful readings as suspects (flagged disagreements awaiting review). |
| Checker | Recomputes hashes, validates files against their schemas and reports broken rules by rule ID. tools/check.py does this for the repository. |
| Store | Keeps packages and records in a database a team can clone. tools/load.py loads packages into SQLite. |
The specification's reading paths say which chapters each role needs.
How a paper moves through the formats
- Acquire. A witness arrives with a rights record that says how the team holds it and what that allows. A witness is one file of one version of a paper, such as the publisher's PDF, identified by the SHA-256 hash of its bytes.
- Read and reconcile. A converter reads the witness with one or more backends, aligns the readings sentence by sentence and compares them. Each page gets a fingerprint with download stamps removed, and differently stamped downloads of one page are recognized as the same.
- Segment and mint. Text is split into sentences. Every node (a section, paragraph, sentence, figure, panel, caption, table, row, cell, equation, footnote or reference) gets a permanent ID and five content hashes. A hash is a fixed-length fingerprint of content: change one character and it changes.
- Review.
Disagreements between readings become suspects with page crops.
A person or a model answers each as a correction, and the gate refuses any correction that changes a digit without image evidence.
In the example paper the first reading has a cell
3l0.0where the page says310.0. - Package.
The result is a package: a folder of canonical JSON files (JSON written in one fixed form, so equal content gives equal bytes) with a manifest whose hash pins the whole.
Five files are required (
MANIFEST.json,document.json,nodes.jsonl,witnesses.json,provenance.json). These are optional:pages.jsonl,locations.jsonl,references.jsonl,corrections.jsonl,receipts.jsonl,ids.jsonl,suspects.jsonl,roster.json,assets/,datasets/andderived/(chapter 12). - Use.
A store loads the package into a database.
A reader renders it with layers of annotations.
Anchors (stored references to a sentence, with its hash and a quotation) let a claim, a dataset value or a draft's citation point at a passage.
Datasets, drafts, views, projects, exercises, checklists and the transparency log are
provisionalformats. - Check and sign. People proofread what matters and sign receipts; second reviewers spot-check them. A passage is at level F3 (proofread) only while a valid receipt lists it at its current hash. Every level counts only at the current text.
The walkthrough follows one paper through every step.
Principles
| Principle | Means |
|---|---|
| Quality over quantity | A small corpus processed to a stated and checkable fidelity beats a large one processed to an unknown one. |
| Do the work once | Conversion, correction, segmentation and digitization are recorded and kept. A fresh conversion of the same input mints the same IDs. A different converter's reading is aligned with the established text: sentences the alignment pairs keep their IDs, and every difference becomes a suspect. |
| Address everything | Every node has a permanent ID and five content hashes. Table columns and figure-text items also have IDs. They are not nodes and have no five hashes. IDs encode no page, ordinal or kind; each is minted once from the document key, kind, text hash and occurrence, then frozen. |
| Keep source and commentary apart | What a source says is stored as the source said it. Everything people or models add is stored beside it and points at it. |
| Count only what was done | A level says how far something was checked, and it falls back when the checked content changes. |
| Models propose, people sign | Models may draft, segment, gloss and digitize, and a model's annotation stays proposed until a person confirms it. The proofread level comes only from a receipt signed by a named person. |
| The team owns its data | Packages are folders of JSON files, the database form is plain SQL tables, and every format is documented in the specification. A team can clone, read and keep its data without anyone's software. |
How it compares
paperspec adds to existing standards and replaces none of them. The comparison page has the full account; five points follow.
- JATS is the NISO standard by which publishers and archives exchange journal content.
Its version 1.4 element list shows no sentence element.
A JATS file is an input here (witness kind
jats). - TEI has a sentence-like element and markup that keeps both readings of a correction, and recommends
xml:idpointers "for durability in the presence of editing". paperspec mints and retires IDs by rule and keeps corrections as a separate, evidence-gated record. TEI is built for encoding scholarly text in general, including correction markup within a text. - GROBID converts PDFs to TEI and reports F1 scores for its automatic reading.
Its output can be held as one reading, under witness kind
xml. - The W3C Web Annotation Data Model is a Recommendation of 2017.
Layers are Web Annotations, with a custom
AnchorSelectorfollowed by a standardTextQuoteSelectorfallback. The W3C model calls theTextPositionSelector"very brittle" against changes to the resource, and the anchors here pin a hash instead. For annotation in general, use the W3C model. - Docling's document schema refers to items by position (
#/texts/12) and lists no per-item hash field. Docling is a conversion toolkit that, by its own abstract, uses AI models for layout analysis and table structure recognition. paperspec defines no converter.
The formats are at version 0.1.0, the repository names no outside adopter, and the reference tools belong to the same repository. The formats do not replace publisher interchange formats. They also do not fix what a converter reads wrongly; they record it and make it checkable.
What it is not
It is not a search engine over all literature, a citation index, a recommendation feed or a chat-with-any-PDF tool. Tools may import from Crossref, OpenAlex, PubMed Central or arXiv, and none should depend on them to work.
Where next
- Concepts explains each idea with an example.
- The specification defines each format exactly.