What we do

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.

(Smith)-[:WORKS_AT]->(Mount Sinai)
(Smith)-[:IN]->(New York)
(Smith)-[:SPECIALIZES_IN]->(Cardiology)
(Smith)-[:RECEIVED]->(Pfizer $12,400)
(Smith)-[:TEACHES_AT]->(Icahn)

(Brown)-[:WORKS_AT]->(Cleveland Clinic)
(Brown)-[:IN]->(Ohio)
(Brown)-[:SPECIALIZES_IN]->(Oncology)
(Brown)-[:FORMERLY]->(Mount Sinai)
(Brown)-[:RECEIVED]->(Pfizer $2,500)

DrToller

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
  1. 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.
  2. Instance factsBrown works at the Cleveland Clinic; Smith received $12,400 from Pfizer. An ontology without instances has no Brown.
  3. 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.
  4. 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.
  5. Ask without CypherA graph still wants Cypher or SPARQL. DrToller answers in domain terms from the induced model.
  6. 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

  1. Documents
  2. Recurring patterns in context
  3. Induced types, roles, relations
  4. Instances filled against that model
  5. 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

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.

That is the layer DrToller.Semantic_Layer will serve on demand, and what Private Corpus Build delivers on your documents.