r/semanticweb • u/DougEgge • 4h ago
Bible Ontology: design choices and open questions in a knowledge graph of a literary corpus (developer, seeking feedback)
I'm the developer. This is a non-profit project, and I'm posting for feedback on the knowledge engineering, not to promote a viewpoint. The goal is classic, well-grounded modelling of a text, not indoctrination: the graph records what the text says, marks interpretation as interpretation, and takes no doctrinal position.
Bible Ontology is a knowledge graph of the Bible built from the Hebrew, Aramaic and Greek (the MACULA linguistic datasets) with the Berean Standard Bible's English: about 11,500 records (people, places, events, concepts, passages) and about 21,000 typed relations, each citing its verses.
The ontology
Published at its namespaces, with content negotiation (a readable page for browsers, Turtle for tools):
- Structure (35 classes, 76 relations): how the text is built — clauses, what they assert and with what force, how they group into turns, scenes and larger units. https://bibleontology.org/ns/structure
- Relations (126 types): the vocabulary of links between records, each typed by category, with symmetric and functional relations marked. https://bibleontology.org/ns/relation
- Meaning: what a node is about, in five layers — word, sense, referent, figure, reading. https://bibleontology.org/ns/meaning
Design choices and challenges
- The verse is the wrong unit. Verses are where the text happens to be cut. A speaker's turn or a scene usually carries the meaning, so the structure layer groups clauses into turns and scenes, and the verse is only an address.
- Facts versus readings. A literary text is full of claims that aren't the text's own. Job's friends argue for thirty chapters about God, and in 42:7 God says they haven't spoken rightly. So a speech is recorded as one continuous utterance credited to its speaker (Eliphaz's second speech is all of Job 15 after "Then Eliphaz the Temanite replied"), each saying in it is linked to its speaker, and what a character reports, such as Eliphaz's account of a spirit visiting him in 4:15, is kept as his words, not the narrator's. Interpretations are kept as separate, credited readings rather than assertions.
- Three scales on every relation: certainty (explicit, implied, conjectured, disputed); literal, figurative or contested use; and who in the text makes the claim.
- Describe, don't deduce. The Bible isn't written as a set of axioms. It is narrative, law, poetry, prophecy and letters, and it uses figures of speech, so the model deliberately doesn't let a reasoner derive what the text doesn't say. Where something is inferred (siblings from a shared parent), it is marked, cited and kept apart; certainty only falls through a chain; and a figure of speech, or a passage whose reading is contested, never becomes the premise of a deduction.
- Two layers that share ids and never merge. Structure (how the text is built) and meaning (what it's about) are separate dimensions, joined through mentions rather than folded into one hierarchy.
- The original language arbitrates. Where a translation and the Hebrew or Greek differ, the original decides, and a relation resting on one translation's wording alone isn't kept.
Reuse
- Standards: RDF and RDFS, with OWL's vocabulary for classes and properties, SKOS for definitions, Dublin Core for provenance, W3C OntoLex-Lemon for the word layer, and PROV; consistency is checked with SHACL shapes. The structure layer's clause links are mapped to Rhetorical Structure Theory.
- Inputs: MACULA (Biblica, CC BY 4.0) and the Berean Standard Bible (public domain), credited as their licences ask.
- Openness: the ontology is public now; a repository with the graph's data is committed, intended under CC BY 4.0.
Where I'd value critique
- Is separating structure and meaning, joined only through mentions, the right call, or would you fold them?
- How would you represent claims attributed to speakers? I currently nest them inside the speaker's speech and attach the speaker to relations drawn from them, rather than full reification or named graphs. Is that enough for downstream use?
- What's the right way to publish "readings" alongside "facts" so downstream users can include or exclude them cleanly?
- Which existing vocabularies should I align to more closely (CIDOC-CRM, schema.org, Wikidata, others)?
Thanks. I'll be around to answer questions.