The schema comes from the corpus. The facts fill it. The empty slots stay visible.
An ontology is usually drawn first — by hand or from a standard — and then people try to pour facts into it. A knowledge graph is the opposite: it stores that Brown works at a clinic, but not that Brown is a Doctor who may have a specialty, a hospital, a teaching post, and a payer. DrToller induces the world model from the documents. The more corpus, the more stable the types. Then it places people like Brown against that model: what is filled, what is still empty, and what the text rules out.
Three things people mix up
One hospital note. Ontology keeps the world without anyone in it. The graph keeps the people without the world. DrToller keeps both — and the holes.
A hospital note
Dr. Helen Smith is a cardiologist at Mount Sinai Hospital in New York. In 2024 she received $12,400 from Pfizer for advisory work. She also teaches at the Icahn School of Medicine.
Dr. James Brown is an oncologist. He now practices at the Cleveland Clinic in Ohio, after leaving Mount Sinai in 2022. That same year he received $2,500 from Pfizer. Brown does not hold a hospital appointment in New York.
Ontology
A schema of the domain, written before the facts — or instead of them. Types, allowed relations, constraints. No Smith. No Brown.
Provider
Hospital
Specialty
Company
Payment
School
Location
Provider ── specializes_in ──> Specialty
Provider ── works_at ──> Hospital
Provider ── teaches_at ──> School
Provider ── receives ──> Payment
Payment ── from ──> Company
Hospital ── located_in ──> Location
CONSTRAINT
Payment.recipient : Provider
Payment.payer : Company
PROHIBITION
one current hospital city
Knowledge graph
Extracted facts. Brown works at the Cleveland Clinic. A node may be tagged Doctor; that tag is not a description of the class. The graph does not say what a Doctor may have, must have, or still lacks.
Brown is a Provider in an induced model. The profile is filled from the note — and the model still shows what that type allows but this person does not have.
Brown : Provider
filled
specializes_in Oncology
works_at Cleveland Clinic
formerly Mount Sinai
received Pfizer $2,500
empty (type allows it)
teaches_at —
(Smith has Icahn; Brown has no evidence)
known-not
hospital post in New York
The graph cannot tell you teaches_at is missing — it only fails to store the edge. The ontology cannot tell you Brown exists. A warehouse never sees the note.
Same question
Cardiologists in New York who received money from a drug company.
Ontology
No instances — nothing to return.
cannot answer
(no Smith in the schema)
Knowledge graph
Cypher, if the triples were loaded and you already know the labels.
MATCH (p:Provider)-[:SPECIALIZES_IN]->(s)
WHERE s.name = "Cardiology"
AND (p)-[:WORKS_AT]->()-[:IN]->(c)
AND c.name = "New York"
AND (p)-[:RECEIVED]->()-[:FROM]->(:Company)
RETURN p
DrToller
Smith. The model knows Provider, specialty, city, payment; the answer cites the sentence. Brown is the wrong specialty and the wrong city — and the note says so.
Q cardiologists in New York
who received pharma money
A Smith
← "Dr. Helen Smith is a
cardiologist at Mount Sinai
Hospital in New York."
What each approach covers
An empty slot is not an absent triple. DrToller is the only column that holds the class model, the people in it, and the holes.
OntologyGraphDrToller
World model✓–✓
Instance facts–✓✓
Empty slots the type allows––✓
More corpus, stabler types––✓
Ask without Cypher––✓
Cite the sentence––✓
World modelTypes, roles, allowed relations, constraints: a Provider may teach at a School; a Payment needs a payer Company. A knowledge graph has labels on nodes, not this model of the class.
Instance factsBrown works at the Cleveland Clinic; Smith received $12,400 from Pfizer. An ontology without instances has no Brown.
Empty slots the type allowsA missing triple is not a known hole. The graph simply has no teaches_at edge for Brown. DrToller still knows a Provider may teach — Smith does, Brown has no evidence.
More corpus, stabler typesA hand-drawn schema does not get truer from a million documents. An induced model does: types, roles, and prohibitions stabilize when the pattern repeats.
Ask without CypherA graph still wants Cypher or SPARQL. DrToller answers in domain terms from the induced model.
Cite the sentenceThe answer points at the line in the note, not at a node id. Graph provenance, when it exists, is not this.
The path
Documents
Recurring patterns in context
Induced types, roles, relations
Instances filled against that model
Known gaps, then questions
The model is richer than a list of classes and arrows. It carries roles, frames, scoped assertions, constraints, known gaps, and a link from each claim back to the sentence that supports it.
What we are not
Not a hand-drawn ontology you later populate.The schema is induced from the corpus. It is not a prior OWL file waiting for facts.
Not a knowledge graph of triples without a class model.A graph may store what was found. It does not say what a Doctor may still lack.
Not a warehouse metric layer.Industry “semantic layer” usually means tables, joins, and measures. We start from text, not from a warehouse.
Not a chatbot over PDFs.Answers are structured: identifiers, pass/fail, counts, diffs, coverage — with evidence, not a free paragraph.
What you get
A domain model that can be released, compared between versions, and asked competency questions — including what is still unfilled. Every assertion points at its source. The raw corpus can stay in your environment; only opaque identifiers cross the boundary.