Skip to content
Course outline

AcademyModule 2 · Build and maintain a knowledge graph

Ontology basics: entities, relationships, and sources

Lesson 3 of 615 min

What you'll learn

  • you can explain what an ontology is and why Consilience builds one from your notes
  • you can name the three parts of a triple and turn a real sentence into triples by hand
  • you can explain how named graphs record which note asserted each fact
  • you can explain the 11 core entity kinds and how custom kinds refine them
  • you can explain why a graph answers questions that folders and tags cannot

Three weeks ago you typed one line into a meeting note: "Jiwoo Park founded Haneul Robotics, which is headquartered in Busan." Today you want to ask, "who do I know that's connected to a robotics company in Busan?"

Folders can't answer that, and neither can tags, because no tag saw the question coming. But if that sentence was saved as structured facts, the answer sits one hop away.

This lesson follows a sentence into queryable facts without changing your Markdown. Facts from source notes can be re-extracted; export the graph, vocabulary, and human decisions together to preserve the complete ontology.

What an ontology actually is

An ontology is a shared vocabulary that answers two questions. First, what kinds of things exist? (people, organizations, places). Second, how do things relate? (founded, headquartered in, develops).

Now suppose every note's facts speak that one vocabulary. A fact from a 2024 meeting note and a fact from a 2026 reading note land in the same model and connect, even though the two notes never mention each other.

Ontology, in one sentence

An ontology is an agreed vocabulary of things (entity kinds) and relations (predicates). It keeps facts pulled from different notes compatible, so you can query all of them as one graph.

Consilience's ontology has three parts you'll meet here: a base vocabulary of 11 entity kinds, with custom refinements (what things are), an open vocabulary of relation verbs (how things connect), and literal attributes (plain values like dates and numbers). A fourth part, Statements, captures your own decisions and questions word for word; it gets its own lesson.

Where this idea comes from

The data model under Consilience is RDF (Resource Description Framework), the W3C standard behind the "semantic web" effort. The idea: store knowledge as small machine-readable facts instead of prose only humans can parse.

The method is simple: model a domain as objects, links, and properties, then investigate by walking the links. Large organizations use the same approach to trace connections across huge case files. Consilience points it at a domain of one: your own notes.

Entities have identity

In plain markdown, "PostgreSQL" is just a run of characters. Search finds those characters, but nothing in the file knows that the "PostgreSQL" in your January note and the "PostgreSQL" in your June note are the same thing.

The graph's first job is identity. Every extracted thing becomes an entity, and its address comes from its normalized label (trimmed, whitespace collapsed, lowercased). Mention "PostgreSQL" in twenty notes and all twenty mentions land on one node, and that node carries four things:

  • A canonical display label: the name the entity shows everywhere.
  • Aliases: other names your note actually prints, so every alias traces straight back to your own words.
  • A one-line description of what the entity is or does.
  • An optional kind, recorded per note, from the built-in kinds or your configured custom kinds.

Same label, same node. Different labels, resolved for you

Write "PostgreSQL" in two different notes and both facts attach to the same entity. Identical normalized labels are one node by construction.

"k8s" and "Kubernetes" are different labels, so they start as different nodes. A separate resolution layer notices they almost certainly mean the same thing and proposes a merge, which you can split apart again later. It gets its own lesson. For now, remember: exact matches are free, near-matches get resolved for you.

Triples: subject, predicate, object

the field of .

Subject — the thing the fact is about.

Every fact in the graph is one triple: a subject, a predicate, and an object. Click each role to explore.

The graph stores exactly one shape of fact: the triple, which reads subject → predicate → object. "Jiwoo Park founded Haneul Robotics." The subject is the entity the fact is about. The predicate is the typed relation. The object is another entity, or a plain value. That's the whole atom. Anything you can say about your world breaks down into these.

When you save a note, the extractor reads each sentence and pulls out the entities it finds plus the relations between them. Here's our opening sentence, taken apart:

One sentence → triples
Sentence in your note:
  "Jiwoo Park founded Haneul Robotics, which is
   headquartered in Busan."

The facts it becomes:

  (Jiwoo Park)       is a                (Person)
  (Haneul Robotics)  is an               (Organization)
  (Busan)            is a                (Place)
  (Jiwoo Park)       founded →           (Haneul Robotics)
  (Haneul Robotics)  headquartered in →  (Busan)

Objects don't have to be entities. Numbers, dates, and measures are stored as literals, plain values that sit at the end of a triple. So "launched in 2024" becomes a value on the entity instead of a dead-end node cluttering your graph. Most of these come from imported tables and CSV rows.

Ontology
The shared vocabulary of what exists (kinds) and how things relate (predicates).
Entity
A thing with stable identity across notes, stored as a node rather than plain text.
Triple
Subject, predicate, object: the smallest complete fact.
Predicate
The typed relation linking a subject to an object, like founded or headquartered in.
Literal
A plain value (number, date, text) as a triple's object.
Named graph
A per-note container recording which note asserted each fact.
RDF
The W3C standard data model Consilience stores all of this in.

Named graphs: which note said this

A fact without a source is a rumor, so Consilience never stores a bare triple. Every workspace keeps its own local RDF store on your device, and every fact is filed inside a named graph that belongs to the note that asserted it. The graph's address is the note's workspace-relative path, so each fact is really a quad: subject, predicate, object, and source note.

The fourth element: provenance
Every fact is stored WITH the note that asserted it:

  (Haneul Robotics) headquartered in → (Busan)
      from note:  meetings/2026-03-kickoff.md

The source note comes straight from the note's path.
The "which note said this" record is built into every fact.
  • Re-extract a note → only that note's graph is replaced; every other note's facts are untouched.
  • Delete a note → its graph is dropped. Rename it → its graph is re-keyed to the new path.
  • Your markdown is never touched. The graph is a parallel structure you can always rebuild from the files.
  • It travels: the whole graph exports as a portable graph.nq file, and the Share dialog's "Include knowledge graph (ontology)" option bundles it for whoever you send it to.

Why provenance discipline matters

Knowledge systems rot the moment you can't tell what you said from what the machine guessed. Consilience keeps a hard wall between them. Your notes' facts live in their notes' named graphs. Machine inferences live elsewhere, each in its own separate derived graph: proposed decision revisions, AI-backfilled entity types, synonym merges, geocoded coordinates.

Because assertions and inferences never mix, you can review, reject, or rebuild any machine guess wholesale, and the record of what your notes actually say stays intact.

Core and custom kinds, open verbs

The 11 built-in kinds provide a shared base for graph colors, tables, and filters. In Ontology, you can define custom kinds with a core parent. The extractor can select these refinements; if the evidence does not justify a kind, it leaves the entity untyped.

KindWhat it coversExample
PersonIndividual peopleJiwoo Park
OrganizationCompanies, teams, institutionsHaneul Robotics
PlaceCities, buildings, regions, any locationBusan
EventSomething that happens at a point in timethe kickoff meeting
ProjectAn ongoing effort with a goalthe Aurora launch
WorkBooks, papers, films, creative outputThe Mythical Man-Month
ProductSomething made and offeredCloudPine
TechnologyTools, platforms, techniquesKubernetes
ConceptAbstract ideasprovenance
SubstanceMaterials and chemicalslithium
OrganismLiving thingshoneybee

Relation verbs come straight from your notes' own wording. "headquartered in" stays "headquartered in", and Korean verbs survive as-is. The graph speaks your notes' language and always shows predicates as plain words. In the "Domain vocabulary" panel you can declare canonical predicates and their variants. Do that, and "made" and "개발하다" both fold into one "develops" edge at extraction time.

Query across documents through relationships

A file lives in exactly one folder, so a hierarchy forces every note into a single home. Tags are flat labels you have to think of ahead of time. A graph needs neither: every fact has its own address, so you follow relationships instead of retrieving documents, the way memory actually works.

  • Multi-hop questions become mechanical: person → founded → company → headquartered in → city. "Who do I know connected to a robotics company in Busan?" is a two-hop walk.
  • Unplanned questions work: nobody tagged anything "robotics-busan", yet the answer is still there, because facts compose.
  • Convergence is automatic: twenty scattered notes that mention one project all land on the same node, and no note ever had to link to another.
  • The agent can reason over it: structured facts with provenance give an AI something to traverse and cite, well beyond keyword search.

Watch one of your notes become facts

  1. Open one of your own notes and pick a single sentence that names two or three things. Copy it onto a scratch line.
  2. Write it out by hand the way the "One sentence → triples" block above does: one line per fact, subject then predicate then object, plus a line for what each thing is.
  3. Use the core kinds table and any custom kinds you have defined to classify each thing. If nothing is supported, leave the kind open.
  4. Now open the document sidebar, click "Key facts", and read the entity cards against your list: kind chips versus your guesses, relation rows versus your predicates.

Compare your choices with extraction. A different verb, a custom refinement, or an untyped entity is a useful starting point for reviewing the source and your vocabulary.

Recap: one model, every screen

You now hold the whole model. Notes are read into entities, which get their identity from a normalized label. Entities are connected by triples, and every triple lands in the named graph of the note that asserted it. Every graph screen in this course is a different window onto that one structure: the 3D view, the entity table, the profile pages.

Knowing the shape lets you ask sharper questions

The app keeps the machinery out of the way. You work in plain language behind "Key facts", "Connections", and "In your words", and reason with the model underneath. Knowing the shape of the graph is what lets you ask sharper questions of it.

Teaching the app your own terms in "Domain vocabulary" reshapes every extraction from then on, and that panel earns a lesson of its own. Next, this structure goes on screen: the 3D graph view.

Ontology basics: entities, relationships, and sources