A structured way of organizing Roam Research
Using Roam Research for managing my busy life - Ontology
This post is part of a series of articles explaining how I use Roam Research to manage my work, side projects, and private life. While the basic ideas will be freely available, additional background information and unique customizations will only be available to paying subscribers.
My last article outlined my needs and core principles when designing my PKM system. This time, I will explain the ontology I have established to gain maximum benefits from my system and let you explore it in a demo graph.
An ontology formally represents knowledge that defines the concepts and relationships within a particular domain. It is used to capture and organize knowledge in a structured way, enabling better understanding, categorization, and reasoning about the domain.
Ontologies typically consist of classes (also known as concepts), properties (sometimes called attributes) describing the relationships between and characteristics of classes and instances, and instances, which are specific examples of classes or concepts (also known as objects). Classes and instances together are often referred to as items.
The famous author Douglas Adams (the instance) is a specific example of the class “human.” He has particular properties such as date of birth, eye color, and (unfortunately) date of death. You are also a specific example of this class (unless you are a bot crawling this article).
Combining items and properties forms a statement (Douglas Adams was occupied as a playwright).
Ontologies are employed in various fields, including artificial intelligence, information science, and philosophy, to facilitate knowledge sharing, data integration, and automated reasoning.
I use a customized ontology based on Wikidata for structuring my Personal Knowledge Management System in Roam Research.
Why do you also need an ontology?
The complicated thing about a PKM is not getting information inside but getting it out. Has it ever happened to you that you were looking for something, and after a while, you gave up in frustration? A well-thought-out ontology prevents this and provides efficient tools to find and link information.
My ontology helps me answer the following questions:
Which notable articles have I read about the climate crisis?
What are the most important open decisions in a specific project?
What are the essential agenda items for my next 1:1 with one of my employees?
Who is responsible for those critical defects that are still open?
When did I first read about Roam Research?
I will show you certain use cases in the following articles. But let's start with diving a bit deeper into my ontology.
Classes
Classes represent a category of entities and provide a framework for defining their shared characteristics, properties, and relationships. They form the basis for organizing knowledge and reasoning about the entities within a specific domain.
Within Roam Research I define classes with the tag #class, give them a short description, indicate if they are based on another class (subclass of), link an item that shows the usage of this class (model item), and link to the corresponding Wikidata item, if my class is based on it.
I have a bunch of useful classes in my ontology:
Album
Book
Defect
Decision
Project
Snippet
…
I add classes whenever needed and try not to foresee everything but to let the system grow evolutionarily. I often search Wikidata for a corresponding class.
Hint: The Wikidata Graph Builder is very helpful for giving you an overview of the various classes and their relationship.
You can explore a subset of my classes with many examples in my sample graph.
Paying subscribers can access a regularly updated graph with download possibilities. Let me know if you want access and provide both the email you used to subscribe and the email you use for your Roam Research account.
Properties
In ontology, a property represents a characteristic or attribute associated with an instance or class. It can also be used to define a relationship between instances.
An property is a characteristic or a data element associated with an instance or a class. It defines the state or properties of an object. Attributes can hold different types of data, such as integers, strings, or booleans, and provide information about the object's characteristics or qualities.
Within Roam Research I use the tag #property for this.
I use a lot of properties in my ontology. Most of the time, they are class-specific, with just a few overarching ones.
Examples are:
author: main creator(s) of a written work (use on works, not humans)
main subject: primary topic of a work
has status: status of an item (planned, open, cancelled, …)
same as: this item is said to be the same as that item, though this may be uncertain or disputed
reference url: should be used for Internet URLs as references.
I use the attribute:: notation of Roam Research to note the properties.
Hint: If you type :: in a new block you get a list of all defined attributes for quick selection.
Again, if I need additional properties, I search Wikidata for them. The Wikidata Property Explorer is a great external tool for this.
Instances
In the context of an ontology, an instance refers to a specific individual or occurrence within the knowledge domain represented by the ontology. It is a particular example or realization of a concept or class defined in the ontology. They are tagged with the names of the corresponding classes.
Instances can have various attributes or properties associated with them, which describe their characteristics or features. They are used to represent real-world entities, events, or concepts within the formal structure of the ontology.
This is where your PKM starts living. The project you are currently working on is an instance of #project having a defined #deliverable to satisfy a #stakeholder with #decisions to make and #work packages to complete.
Also, my ever-growing list of keywords, subjects, and genres is based on items in my ontology.
Templates
Many of my classes have specific templates that define a valuable set of properties and relationships:
Whenever I create a new human within my Personal Knowledge Management system, I give them at least the tag #human. Often I apply the whole template by pressing the keyboard shortcut ;; and choosing the appropriate template.
I only fill in the essential properties in the specific case and delete unneeded ones to keep the clutter low. Sometimes, I do the reverse way and open the template in the right sidebar and pick the relevant properties.
The demo graph contains a lot of templates for you to play with.
Status and Priority
Many items have important properties regarding status and priority. I use a simple scheme for both and use the tag notation to display them. The most accessible status information is the inbuilt TODO/DONE of Roam Research. I often use this combined with more detailed properties to indicate that loose threads are needed to collect.
Status is something like: #draft, #planned, #cancelled, #complete, #open, …
Priority is: #low, #medium, #high
Hint: If you tag pages with status #draft you can easily get back to them later, when you have more time to fill in the details. This is part of my “Graceful Degradation" principle I explained in the last article.
Blocks or Pages?
I use the classes and properties both on pages and within blocks. Some classes’ entities always get their dedicated page (this includes people, projects, teams, and results). This is necessary whenever I want to use the entity in longer sentences because otherwise, it would not be apparent which parts the tags and properties would refer to.
However, if the whole block represents an entity (as often with bookmarks, defects, ideas, and decisions), I tag the block directly and put the property underneath if needed.
Conclusion
I underestimated the importance of a simple, precise ontology at the beginning of my journey. In the meantime, I have found a way to minimize the maintenance effort while ensuring I can trust my system and find the information when needed.
Feel free to let me know if anything is unclear or if you want me to elaborate on certain aspects. I will describe specific use cases in the following articles and gladly take up yours.
If you like the whole thing and want to support me, I'll be happy if you sign up for a paid subscription.
Lastly, don't forget to look at the demo graph.
Thank you so much for this article. You make very persuasive arguments firstly for developing one’s PKB around an ontology and secondly for leveraging external ontologies like Wikidata. I have been using Roam for a while now and what you have demonstrated looks very effective. I also went on to read some articles by Ivo Velitchkov and now I am wondering how deep to go with all of this.
I wondered if you had any thoughts about:
Whether it is useful (and feasible) to maintain a personal ontology which could be used across multiple PKB (either in different platforms, or even the same platform but as different databases - as Roam has no or limited ability to share links across graphs for the same user).
Whether your method is doable with Heptabase (I read your review of that and consequently am trying it out long term).
Hi, how do subscribers get access to the "export" option in your demo graph?