Ontology
Six collections, one rule
The atlas is six JSON files under data/, validated by a shared Zod schema
and an integrity gate that runs before every build. The rule: a crossing that names no
person or cites no source cannot exist in this dataset. The schema makes it
unrepresentable.
The model
A work is a text: title, original language and title in the original
script, author, composition date and place, field. A transmission is
one crossing of that work into a language: a translation, revision, adaptation,
commentary or printed edition. Transmissions form a tree per work, the stemma, through
a from field that points either at "original" or at the parent
transmission. Branches are real: the Almagest entered Arabic twice from the Greek, and
the Kalila tradition forks at the Arabic into Hebrew and Castilian lines.
People carry roles per crossing: translator, reviser, patron, commissioner, commentator, editor, scholar. The same person can be an author in one chain and a translator in another. Places, languages and sources are first-class entities with their own pages, so the graph can be read from any direction: a city's output, a language's traffic, a book's spread.
A record, in full
This is the actual record of the Latin crossing of al-Ghazali's Aims of the
Philosophers, exactly as it sits in data/transmissions.json:
{
"id": "maqasid-latin-gundissalinus",
"work": "maqasid",
"from": "original",
"language": "latin",
"title": {
"text": "Summa theoricae philosophiae"
},
"kind": "translation",
"people": [
{
"person": "gundissalinus",
"role": "translator"
},
{
"person": "magister-iohannes",
"role": "translator"
}
],
"place": "toledo",
"date": {
"from": 1162,
"to": 1180,
"ca": true
},
"note": "The translators omitted the prologue in which al-Ghazali announces he is reporting doctrines in order to demolish them; a Latin rendering survives in exactly one Paris manuscript. Read cold, the book made 'Algazel' a faithful Avicennian for four centuries. The print era fixed the error in place: Venice 1506, as Logica et philosophia Algazelis.",
"confidence": "attested",
"evidence": [
{
"source": "minnema-2014",
"detail": "manuscript census, the lone surviving prologue, and the 'cave hic' marginalia"
},
{
"source": "griffel-sep"
}
]
}
Note what the shape forces. The date is a span with a ca flag, because
precision beyond "third quarter of the twelfth century" would be invented. The evidence
array points into the bibliography. The confidence grade is mandatory. The note is
prose, because some knowledge only survives as prose.
Integrity rules
Beyond the schema, scripts/validate.ts enforces, on every build:
- referential integrity across all six collections, no dangling ids
- every stemma is a true tree: parents exist, belong to the same work, no cycles
- chronology: no crossing predates the version it descends from
- every transmission cites at least one source that exists
- orphan detection: entities defined but never referenced are reported
Reading the atlas by machine
- /atlas/graph.json: the entire dataset, all six collections, one file
-
markdown siblings: append
.mdto any work, carrier or place URL, e.g. /atlas/works/panchatantra.md -
the upstream dataset and a standalone MCP librarian live in the
naql repository; chain
tools for
@falsafa/mcpare planned alongside the next package release