{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Library",
  "description": "Every document in the repository.",
  "type": "object",
  "properties": {
    "documents": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Document"
      }
    },
    "version": {
      "description": "The release this is (package.json's version): its texts are the\ntag `v<version>`'s.",
      "type": "string"
    }
  },
  "required": [
    "version",
    "documents"
  ],
  "$defs": {
    "Adoption": {
      "type": "object",
      "properties": {
        "by": {
          "description": "A church or a body: `Church of Scotland`.",
          "type": "string"
        },
        "year": {
          "$ref": "#/$defs/Date"
        }
      },
      "additionalProperties": false,
      "required": [
        "by",
        "year"
      ]
    },
    "Chapter": {
      "type": "object",
      "properties": {
        "number": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        "paragraphs": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Paragraph"
          }
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "number",
        "title",
        "paragraphs"
      ]
    },
    "Check": {
      "description": "One check of the text against a witness.",
      "type": "object",
      "properties": {
        "against": {
          "description": "What it was checked against: `scan`, `eebo-tcp:A80320`, a URL.",
          "type": "string"
        },
        "by": {
          "description": "Who checked it.",
          "type": [
            "string",
            "null"
          ]
        },
        "date": {
          "description": "When: `2026-10-28`.",
          "type": [
            "string",
            "null"
          ]
        },
        "scope": {
          "description": "How much: `all`, `proofs`, `questions 42–107`.",
          "type": "string"
        }
      },
      "additionalProperties": false,
      "required": [
        "against",
        "scope"
      ]
    },
    "Clause": {
      "description": "A creed's clause, by the number it is cited by.",
      "type": "object",
      "properties": {
        "diffs": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Diff"
          }
        },
        "leaf": {
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "number": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        "page": {
          "description": "Where it is in the printing it follows: its page as printed (`12`,\nor a signature, `A2r`), and its scan's page (from 1), to open the\nscan there.",
          "type": [
            "string",
            "null"
          ]
        },
        "relations": {
          "description": "The same text's numbers or ids in other documents, by document id:\nthe catechism questions that expound it, say.",
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "segments": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Segment"
          }
        },
        "text": {
          "description": "The segments' text, joined.",
          "type": "string"
        }
      },
      "required": [
        "number",
        "text",
        "segments",
        "relations",
        "diffs"
      ]
    },
    "Date": {
      "description": "A year, or `{\"circa\": 500}`.",
      "anyOf": [
        {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        {
          "type": "object",
          "properties": {
            "circa": {
              "type": "integer",
              "format": "uint32",
              "minimum": 0
            }
          },
          "required": [
            "circa"
          ]
        }
      ]
    },
    "Dates": {
      "description": "A document's dates, each when it's known.",
      "type": "object",
      "properties": {
        "adopted": {
          "description": "Who adopted it as their confession, and when.",
          "type": "array",
          "default": [],
          "items": {
            "$ref": "#/$defs/Adoption"
          }
        },
        "first_published": {
          "anyOf": [
            {
              "$ref": "#/$defs/Date"
            },
            {
              "type": "null"
            }
          ]
        },
        "written": {
          "anyOf": [
            {
              "$ref": "#/$defs/Date"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "Diff": {
      "description": "What changed between this text and a related one.",
      "type": "object",
      "properties": {
        "segments": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/DiffSegment"
          }
        },
        "source": {
          "description": "The other document's id.",
          "type": "string"
        },
        "type": {
          "description": "Whether that document is earlier or later than this one.",
          "$ref": "#/$defs/DiffKind"
        }
      },
      "required": [
        "source",
        "type",
        "segments"
      ]
    },
    "DiffKind": {
      "type": "string",
      "enum": [
        "earlier",
        "later"
      ]
    },
    "DiffSegment": {
      "type": "object",
      "properties": {
        "position": {
          "description": "Where in the text the change falls.",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "text": {
          "type": "string"
        }
      },
      "required": [
        "text"
      ]
    },
    "Document": {
      "description": "A whole document. A confession fills `chapters`, a catechism `questions`\n(and `sections`, if it has them), a creed `text` (and `clauses`, once it\nis numbered), a commentary `entries`; the other lists are empty.",
      "type": "object",
      "properties": {
        "aliases": {
          "description": "Other names it goes by.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "authors": {
          "description": "Who wrote it: people, or a body (`Westminster Assembly`).",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "chapter_count": {
          "description": "How many chapters (confessions), paragraphs (confessions),\nquestions (catechisms) and clauses (creeds) it has.",
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        "chapters": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Chapter"
          }
        },
        "clause_count": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        "clauses": {
          "description": "A creed's numbered clauses, when it has them.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Clause"
          }
        },
        "commentaries": {
          "description": "The ids of the commentaries on this document.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "dates": {
          "description": "When it was written, first published and adopted. `year` is one of\nthese, as it has always been given.",
          "$ref": "#/$defs/Dates"
        },
        "edition": {
          "description": "Which printing the text follows, when that matters.",
          "type": [
            "string",
            "null"
          ]
        },
        "entries": {
          "description": "A commentary's entries, in its order.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Entry"
          }
        },
        "entry_count": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        "exposition": {
          "description": "The commentary answered in `expositions` below, by its authors, title\nand year: bc1695's, Beddome's (`beddome1752`). From before\ncommentaries were documents of their own; `commentaries` lists them all.",
          "type": [
            "string",
            "null"
          ]
        },
        "expositions": {
          "description": "The commentary named in `exposition`, question by question: bc1695's\n(and its modernized copy's) are `beddome1752`'s entries, each item a\nparagraph's first question and those under it the rest.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Exposition"
          }
        },
        "id": {
          "description": "The document's id, in every URL: `lbcf1689`.",
          "type": "string"
        },
        "image": {
          "description": "A picture of it, to tell it from others at a glance in a list: its\nauthor's portrait, or, when none is known, its title page.",
          "anyOf": [
            {
              "$ref": "#/$defs/Image"
            },
            {
              "type": "null"
            }
          ]
        },
        "kind": {
          "$ref": "#/$defs/Kind"
        },
        "language": {
          "description": "Its text's language, as a BCP 47 tag: `en`.",
          "type": "string"
        },
        "modernized": {
          "description": "The id of the document this is a modern-spelling copy of.",
          "type": [
            "string",
            "null"
          ]
        },
        "on": {
          "description": "For a commentary, the id of the document it comments on.",
          "type": [
            "string",
            "null"
          ]
        },
        "paragraph_count": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        "prose": {
          "description": "Prefaces, appendices and the like, in Markdown.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Prose"
          }
        },
        "provenance": {
          "description": "Where the text comes from, and under what terms it is published.\n`edition` and `source` are its witness's.",
          "$ref": "#/$defs/Provenance"
        },
        "question_count": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        "questions": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Question"
          }
        },
        "related": {
          "description": "The documents its paragraphs or questions relate to, and how.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/RelatedDocument"
          }
        },
        "sections": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Section"
          }
        },
        "short": {
          "description": "The abbreviation people use: `WCF`, `2LCF`, `HC`.",
          "type": [
            "string",
            "null"
          ]
        },
        "source": {
          "description": "A scan of that printing.",
          "type": [
            "string",
            "null"
          ]
        },
        "text": {
          "description": "A creed's text, in Markdown: its clauses joined, when it has them.",
          "type": [
            "string",
            "null"
          ]
        },
        "title": {
          "type": "string"
        },
        "tradition": {
          "description": "The traditions it belongs to.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Tradition"
          }
        },
        "translation": {
          "description": "What it is a translation of, if it is one.",
          "anyOf": [
            {
              "$ref": "#/$defs/Translation"
            },
            {
              "type": "null"
            }
          ]
        },
        "translations": {
          "description": "The ids of the documents that translate this one into another\nlanguage (their `translation.of` is its id).",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "url": {
          "description": "Where the API serves it whole.",
          "type": "string"
        },
        "version": {
          "description": "The release this is, as the library's `version`.",
          "type": "string"
        },
        "year": {
          "description": "When it was first published or adopted.",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        }
      },
      "required": [
        "version",
        "id",
        "kind",
        "title",
        "aliases",
        "authors",
        "tradition",
        "language",
        "dates",
        "commentaries",
        "translations",
        "related",
        "provenance",
        "chapter_count",
        "paragraph_count",
        "question_count",
        "clause_count",
        "entry_count",
        "url",
        "chapters",
        "sections",
        "questions",
        "expositions",
        "prose",
        "clauses",
        "entries"
      ]
    },
    "Entry": {
      "description": "A commentary's entry: what it says on one or more questions (or\nparagraphs, or clauses) of the document it comments on. A sermon may span\nseveral questions, or several entries one question.",
      "type": "object",
      "properties": {
        "clauses": {
          "description": "Or the clauses, for a creed, by the numbers they are cited by.",
          "type": "array",
          "items": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0
          }
        },
        "items": {
          "description": "Its questions and answers, if it is made of them.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/EntryItem"
          }
        },
        "number": {
          "description": "Its place in the commentary, from 1.",
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        "paragraphs": {
          "description": "Or the paragraphs, for a confession: `1.1`.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "part": {
          "description": "The part of the commentary it is in, if it has parts.",
          "type": [
            "string",
            "null"
          ]
        },
        "questions": {
          "description": "The questions it comments on, in the commented document.",
          "type": "array",
          "items": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0
          }
        },
        "text": {
          "description": "Its text, in Markdown, if it is prose (a sermon, an illustration).",
          "type": [
            "string",
            "null"
          ]
        },
        "title": {
          "description": "The commentary's own heading for it, if it has one.",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "number",
        "questions",
        "paragraphs",
        "clauses",
        "items"
      ]
    },
    "EntryItem": {
      "description": "A question a commentary asks and answers, with the answer's proofs, and\nthe questions it asks under it; or a proposition it states and proves,\nand the propositions under it.",
      "type": "object",
      "properties": {
        "answer": {
          "description": "The segments' text, joined.",
          "type": "string"
        },
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/EntryItem"
          }
        },
        "question": {
          "description": "The question, or `\"\"` for a proposition, which asks none.",
          "type": "string"
        },
        "segments": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Segment"
          }
        }
      },
      "required": [
        "question",
        "answer",
        "segments",
        "items"
      ]
    },
    "Exposition": {
      "description": "A commentary on one question: paragraphs of short questions, each\nanswered and proved by a verse. The same as `beddome1752`'s entry on\nit, in the shape it had before commentaries were documents.",
      "type": "object",
      "properties": {
        "paragraphs": {
          "type": "array",
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/$defs/ExpositionItem"
            }
          }
        },
        "question": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        }
      },
      "required": [
        "question",
        "paragraphs"
      ]
    },
    "ExpositionItem": {
      "type": "object",
      "properties": {
        "answer": {
          "type": "string"
        },
        "footnote": {
          "type": [
            "string",
            "null"
          ]
        },
        "question": {
          "type": "string"
        },
        "reference": {
          "description": "Where they are: `Isaiah 44:6`, as the commentary prints it (its\nproofs, joined with `; `).",
          "type": "string"
        },
        "refs": {
          "description": "The same, read, as a proof's `refs` are: each reference as printed\nand as OSIS references, and, with `?verses=kjv` or `?verses=bsb`, its\nverses.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Ref"
          }
        },
        "verse": {
          "description": "The verse's words.",
          "type": "string"
        }
      },
      "required": [
        "question",
        "answer",
        "verse",
        "reference",
        "refs"
      ]
    },
    "Image": {
      "description": "A picture of a document: its author's portrait, or, when none is known,\nits title page.",
      "type": "object",
      "properties": {
        "alt": {
          "description": "What it shows, for a reader who can't see it.",
          "type": "string"
        },
        "credit": {
          "description": "Who made the picture, and when: `Engraving by Robert White, 1691`.",
          "type": [
            "string",
            "null"
          ]
        },
        "height": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        "license": {
          "description": "The terms it is published under: `public-domain`.",
          "type": "string"
        },
        "source": {
          "description": "Where it came from: its page on Wikimedia Commons or a museum's, or\nthe scan of a title page.",
          "type": "string"
        },
        "url": {
          "description": "Where the downloads serve it, a JPEG:\n`/downloads/v1/images/flavel1692.jpg`.",
          "type": "string"
        },
        "width": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        }
      },
      "required": [
        "url",
        "width",
        "height",
        "alt",
        "source",
        "license"
      ]
    },
    "Kind": {
      "description": "What a document is, which says which of its lists are filled.",
      "oneOf": [
        {
          "description": "Chapters of numbered paragraphs.",
          "type": "string",
          "const": "confession"
        },
        {
          "description": "Numbered questions and answers.",
          "type": "string",
          "const": "catechism"
        },
        {
          "description": "One text.",
          "type": "string",
          "const": "creed"
        },
        {
          "description": "A commentary on another document (`on`), in entries.",
          "type": "string",
          "const": "commentary"
        }
      ]
    },
    "Paragraph": {
      "description": "A confession's paragraph.",
      "type": "object",
      "properties": {
        "chapter": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        "diffs": {
          "description": "How it differs from the related paragraphs of earlier or later\ndocuments.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Diff"
          }
        },
        "id": {
          "description": "`<chapter>.<paragraph>`: `32.3`.",
          "type": "string"
        },
        "leaf": {
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "number": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        "page": {
          "description": "Where it is in the printing it follows: its page as printed (`12`,\nor a signature, `A2r`), and its scan's page (from 1), to open the\nscan there.",
          "type": [
            "string",
            "null"
          ]
        },
        "relations": {
          "description": "The same paragraph's ids in other documents, by document id.",
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "segments": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Segment"
          }
        },
        "text": {
          "description": "The segments' text, joined.",
          "type": "string"
        }
      },
      "required": [
        "id",
        "chapter",
        "number",
        "text",
        "segments",
        "relations",
        "diffs"
      ]
    },
    "Prose": {
      "description": "A preface, an appendix or the like.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Its file's name, in its URL: `preface`.",
          "type": "string"
        },
        "text": {
          "description": "Markdown.",
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "title",
        "text"
      ]
    },
    "Provenance": {
      "description": "Where a document's text comes from.",
      "type": "object",
      "properties": {
        "license": {
          "description": "The terms it is published under: `public-domain`.",
          "type": "string"
        },
        "notes": {
          "description": "Anything else a reader should know, in Markdown.",
          "type": [
            "string",
            "null"
          ]
        },
        "transcription": {
          "description": "How the text was made from it, and what it was checked against.",
          "$ref": "#/$defs/Transcription"
        },
        "witness": {
          "description": "The printing the text follows, when it's known.",
          "anyOf": [
            {
              "$ref": "#/$defs/Witness"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false,
      "required": [
        "transcription",
        "license"
      ]
    },
    "Question": {
      "description": "A catechism's question and answer.",
      "type": "object",
      "properties": {
        "answer": {
          "description": "The segments' text, joined.",
          "type": "string"
        },
        "diffs": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Diff"
          }
        },
        "leaf": {
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "number": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        "page": {
          "description": "Where it is in the printing it follows: its page as printed (`12`,\nor a signature, `A2r`), and its scan's page (from 1), to open the\nscan there.",
          "type": [
            "string",
            "null"
          ]
        },
        "question": {
          "type": "string"
        },
        "relations": {
          "description": "The same question's numbers in other documents, by document id.",
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "section": {
          "description": "The section it is in, for a catechism with sections.",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "segments": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Segment"
          }
        }
      },
      "required": [
        "number",
        "question",
        "answer",
        "segments",
        "relations",
        "diffs"
      ]
    },
    "Ref": {
      "description": "A proof, read, to link to a Bible.",
      "type": "object",
      "properties": {
        "osis": {
          "description": "As OSIS references, in the English versification: `Dan.9.4`,\n`Dan.9.7-Dan.9.9`, `Ps.23` (a whole chapter).",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "printed": {
          "description": "As printed: `Daniel 9:4,7–9,16–19`.",
          "type": "string"
        },
        "verses": {
          "description": "The verses' text, with `?verses=kjv` or `?verses=bsb`.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/Verse"
          }
        }
      },
      "required": [
        "printed",
        "osis"
      ]
    },
    "RelatedDocument": {
      "description": "A document another relates to, and how.",
      "type": "object",
      "properties": {
        "document": {
          "type": "string"
        },
        "relation": {
          "$ref": "#/$defs/Relation"
        }
      },
      "required": [
        "document",
        "relation"
      ]
    },
    "Relation": {
      "description": "How one document relates to another.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "revised-by",
            "adapted-by",
            "expounded-by"
          ]
        },
        {
          "description": "The same text: a modernized copy and its original.",
          "type": "string",
          "const": "same"
        },
        {
          "description": "Another printing of the same text.",
          "type": "string",
          "const": "edition"
        },
        {
          "description": "It revises the other (the 1689 revises the Westminster).",
          "type": "string",
          "const": "revises"
        },
        {
          "description": "It adapts the other to another church (AOC adapts the Heidelberg).",
          "type": "string",
          "const": "adapts"
        },
        {
          "description": "It expounds the other (the Heidelberg expounds the Apostles' Creed).",
          "type": "string",
          "const": "expounds"
        },
        {
          "description": "They cover the same ground (the Larger and Shorter Catechisms).",
          "type": "string",
          "const": "parallel"
        }
      ]
    },
    "Section": {
      "type": "object",
      "properties": {
        "number": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "number",
        "title"
      ]
    },
    "Segment": {
      "description": "A run of text and the Scripture proofs given for it.",
      "type": "object",
      "properties": {
        "note": {
          "description": "A footnote.",
          "type": [
            "string",
            "null"
          ]
        },
        "proofs": {
          "description": "One reference each, as printed: `Daniel 9:4,7–9,16–19`.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "refs": {
          "description": "The same proofs, read: each as printed and as OSIS references.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Ref"
          }
        },
        "text": {
          "type": "string"
        }
      },
      "required": [
        "text",
        "proofs",
        "refs"
      ]
    },
    "Tradition": {
      "description": "A tradition a document belongs to: a small, fixed list.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "reformed",
            "presbyterian",
            "congregational",
            "baptist",
            "anglican",
            "lutheran"
          ]
        },
        {
          "description": "The creeds of the early church, held in common.",
          "type": "string",
          "const": "ecumenical"
        }
      ]
    },
    "Transcription": {
      "type": "object",
      "properties": {
        "checked": {
          "description": "What it has been checked against since.",
          "type": "array",
          "default": [],
          "items": {
            "$ref": "#/$defs/Check"
          }
        },
        "from": {
          "description": "What the text was made from: `scan` (the witness), `eebo-tcp:A52591`\n(a Text Creation Partnership transcription), another document's id\n(a modernized copy), a URL, or `unknown`.",
          "type": "string"
        }
      },
      "additionalProperties": false,
      "required": [
        "from"
      ]
    },
    "Translation": {
      "description": "What a document translates: the language it was written in, and the\noriginal, when it is here too, whose units it relates to by number.",
      "type": "object",
      "properties": {
        "by": {
          "description": "Who translated it.",
          "type": [
            "string",
            "null"
          ]
        },
        "from": {
          "description": "The original's language, as a BCP 47 tag: `de`, `la`, `grc`.",
          "type": "string"
        },
        "of": {
          "description": "The original's id, when it is a document here too.",
          "type": [
            "string",
            "null"
          ]
        },
        "year": {
          "description": "When.",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        }
      },
      "additionalProperties": false,
      "required": [
        "from"
      ]
    },
    "Verse": {
      "description": "A verse, by its OSIS reference, and its text.",
      "type": "object",
      "properties": {
        "osis": {
          "description": "`Rom.8.28`.",
          "type": "string"
        },
        "text": {
          "type": "string"
        }
      },
      "required": [
        "osis",
        "text"
      ]
    },
    "Witness": {
      "description": "A printing.",
      "type": "object",
      "properties": {
        "catalog": {
          "description": "Its numbers in the catalogues of early printing: `Wing N1487`,\n`ESTC R40299`.",
          "type": "array",
          "default": [],
          "items": {
            "type": "string"
          }
        },
        "edition": {
          "description": "Which edition or printing: `The fifth edition, 1720`.",
          "type": "string"
        },
        "original": {
          "description": "Where the scan came from: the library's page for it (archive.org,\nGoogle Books, ProQuest), to look at there.",
          "type": [
            "string",
            "null"
          ]
        },
        "pdf": {
          "description": "The scan itself, as a PDF, at symbolics.dev's own copy:\n`https://assets.symbolics.dev/<sha256>/<name>.pdf`, whose path names\nits SHA-256, so the URL always gives the same bytes.",
          "type": [
            "string",
            "null"
          ]
        },
        "pdf_source": {
          "description": "Where `pdf`'s exact bytes can be downloaded from the library that\nholds them (archive.org's file), when they can.",
          "type": [
            "string",
            "null"
          ]
        },
        "place": {
          "description": "Where it was printed.",
          "type": [
            "string",
            "null"
          ]
        },
        "published": {
          "description": "The year it was printed.",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "sha256": {
          "description": "The PDF's SHA-256, so a copy can be checked.",
          "type": [
            "string",
            "null"
          ]
        },
        "title": {
          "description": "Its title, as printed (shortened).",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "additionalProperties": false,
      "required": [
        "edition"
      ]
    }
  }
}
