Skip to content

Commit 76b35e1

Browse files
committed
docs: expand ontology docs and diagrams
1 parent 6479edb commit 76b35e1

17 files changed

+842
-17
lines changed

docs/concept/.pages.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ nav:
55
- persona.md
66
- story.md
77
- concept.md
8+
- term.md
89
- outcome.md
910
- data-product.md
1011
- ontology.md

docs/concept/concept.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,3 +213,65 @@ business concepts_
213213
- **[Ontologies](ontology.md)** — Concepts link to ontology
214214
classes, properties, and shapes
215215

216+
=== "Ontology"
217+
218+
## Ontology (minimal facts we can state today)
219+
220+
--8<-- "fragment/uctm-diagram-concept.md"
221+
222+
We're not (yet) prescribing a full OWL ontology here.
223+
But we can state a small set of **facts** that people can reliably use to build their own
224+
ontology / schema / graph model around a Concept.
225+
226+
### Required facts about a Concept
227+
228+
- **Opaque universally unique identifier**
229+
- A Concept must have an **opaque**, **universally unique** identifier.
230+
- Prefer a random identifier such as **UUIDv4**.
231+
- Represent it as a URI, for example:
232+
`urn:uuid:550e8400-e29b-41d4-a716-446655440000`
233+
234+
- **Slug**
235+
- A Concept should have a kebab-cased slug.
236+
- Slug uniqueness cannot be guaranteed, but it can be used as a convenient alternative
237+
identifier next to the real identifier (with lookup/search).
238+
- Do **not** use the slug as a foreign key in the Knowledge Graph itself; use the real
239+
identifier for references.
240+
241+
- **Label Term (instead of a traditional label)**
242+
- A Concept does not have a traditional label such as `skos:prefLabel` or `rdfs:label`.
243+
- Instead, it has a **labelTerm** link to one of its **BusinessTerm** objects (a resource
244+
in the Knowledge Graph).
245+
- Learn more in [Term](term.md).
246+
247+
- **Definition**
248+
- A Concept must have a business-focused definition explaining what it means in context.
249+
250+
- **One or more Terms (required)**
251+
- A Concept must have **one or more Terms** (`Term`), which can be either a
252+
**BusinessTerm** or a **TechnicalTerm**.
253+
- A Concept without a Term has no reason to exist.
254+
- All Terms of a Concept **mean the same thing** in the context of that Concept.
255+
- Terms may include alternative spellings, abbreviations, synonyms, and technical
256+
manifestations.
257+
- Terms are **owned** by the Concept (part-of): when the Concept is deleted, its Term
258+
objects are deleted as well.
259+
- Learn more in [Term](term.md).
260+
261+
- **Contained in a Concept Vocabulary**
262+
- A Concept is a member of a Concept Vocabulary (a “container” of Concepts).
263+
- A Use Case can relate to Concept Vocabularies via relationship-objects:
264+
- it can **reference** an external vocabulary and/or
265+
- **own** a private vocabulary.
266+
267+
- **Mapping to ontologies (optional)**
268+
- A Concept can be mapped/aligned to terms in one or more ontologies (classes,
269+
properties, shapes).
270+
- Model this via mapping/alignment relationships so you can capture confidence, rationale,
271+
and provenance.
272+
273+
- **Used by Stories and Workflows**
274+
- Stories use Concepts as **input**, **output**, and **dependent** concepts.
275+
- Workflows use Concepts through the Stories they orchestrate and the vocabulary of the
276+
Use Case.
277+

docs/concept/outcome.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,3 +206,51 @@ from a Use Case, providing the "why" behind every business requirement_
206206
This integration ensures that outcomes are not abstract goals but
207207
concrete, measurable results that drive the EKG's value
208208
proposition.
209+
210+
=== "Ontology"
211+
212+
## Ontology (minimal facts we can state today)
213+
214+
--8<-- "fragment/uctm-diagram-outcome.md"
215+
216+
We're not (yet) prescribing a full OWL ontology here.
217+
But we can state a small set of **facts** that people can reliably use to build their own
218+
ontology / schema / graph model around an Outcome.
219+
220+
### Required facts about an Outcome
221+
222+
- **Opaque universally unique identifier**
223+
- An Outcome should have an **opaque**, **universally unique** identifier.
224+
- Prefer a random identifier such as **UUIDv4**, represented as a URI:
225+
`urn:uuid:550e8400-e29b-41d4-a716-446655440000`
226+
227+
- **Business-friendly name**
228+
- An Outcome must have a human-readable name expressed in business language.
229+
230+
- **Definition**
231+
- An Outcome must have a definition explaining the expected benefit/result.
232+
233+
- **Stereotype**
234+
- An Outcome can have an **Outcome Stereotype** (e.g. KPI, Goal, Objective, Success
235+
Criteria, Definition of Done).
236+
- Stereotypes categorize outcomes without changing the underlying “Outcome” concept.
237+
238+
- **Time horizon (optional)**
239+
- Outcomes often imply a time horizon (short/mid/long term). Capture it explicitly if
240+
it matters.
241+
242+
- **Measurability (optional but recommended)**
243+
- Outcomes should have measurable success criteria where possible (metrics, thresholds,
244+
targets, baselines).
245+
246+
- **Owned by a Use Case (optional)**
247+
- Outcomes are often defined/owned by a Use Case, but can be referenced by other Use
248+
Cases (e.g., children).
249+
250+
- **Use Case ↔ Outcome relationship-object (recommended)**
251+
- Model the connection between a Use Case and an Outcome via a **relationship-object**
252+
(not just a direct link).
253+
- This supports:
254+
- **Inheritance**: a child Use Case referencing an Outcome defined on a parent Use Case
255+
- **Contribution mapping**: describing *how* the child contributes to that desired Outcome
256+
- **Local outcomes**: linking to Outcomes owned by the current Use Case as well

docs/concept/persona.md

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,6 @@ or entities — involved in a Use Case, defined using business language_
211211
`<persona-B>`, then the user is also associated with
212212
`<persona-B>`.
213213

214-
215214
=== "Model"
216215

217216
## Overview
@@ -239,3 +238,46 @@ or entities — involved in a Use Case, defined using business language_
239238
integrated components of the Enterprise Knowledge Graph,
240239
enabling automated reasoning, policy enforcement, and
241240
composability.
241+
242+
=== "Ontology"
243+
244+
## Ontology (minimal facts we can state today)
245+
246+
--8<-- "fragment/uctm-diagram-persona.md"
247+
248+
We're not (yet) prescribing a full OWL ontology here.
249+
But we can state a small set of **facts** that people can reliably use to build their own
250+
ontology / schema / graph model around a Persona.
251+
252+
### Required facts about a Persona
253+
254+
- **Opaque universally unique identifier**
255+
- A Persona should have an **opaque**, **universally unique** identifier.
256+
- Prefer a random identifier such as **UUIDv4**, represented as a URI:
257+
`urn:uuid:550e8400-e29b-41d4-a716-446655440000`
258+
259+
- **Business-friendly name**
260+
- A Persona must have a human-readable name (e.g., “Auditor”, “Chief Risk Officer”).
261+
262+
- **Slug**
263+
- A Persona should have a kebab-cased slug (convenient identifier; do not use as a foreign
264+
key in the Knowledge Graph).
265+
- Example: `auditor`, `chief-risk-officer`, `legal-entity-maintainer`
266+
267+
- **Definition**
268+
- A Persona should have a definition describing who it represents in the domain.
269+
270+
- **Persona inheritance (optional)**
271+
- Personas can be related via `isSubPersonaOf` for hierarchical organization.
272+
273+
- **Persona taxonomy membership (required)**
274+
- Personas are `skos:Concept`.
275+
- Every Persona is a member of exactly one **PersonaTaxonomy** (a `skos:ConceptScheme`)
276+
via `skos:inScheme`.
277+
- Each Use Case can have **zero or one PersonaTaxonomy** that provides the scheme for
278+
Personas used in that Use Case.
279+
280+
- **Participation in Stories (relationship-object)**
281+
- Stories reference Personas in the “Who” part.
282+
- Model the connection via a relationship-object if you need to capture context such as
283+
role, responsibility, entitlement, or provenance.

docs/concept/story.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,3 +201,54 @@ defines what a Persona needs to accomplish within a Use Case_
201201
This integration ensures that Stories are not isolated
202202
requirements but part of a cohesive, semantic model of the
203203
enterprise.
204+
205+
=== "Ontology"
206+
207+
## Ontology (minimal facts we can state today)
208+
209+
--8<-- "fragment/uctm-diagram-story.md"
210+
211+
We're not (yet) prescribing a full OWL ontology here.
212+
But we can state a small set of **facts** that people can reliably use to build their own
213+
ontology / schema / graph model around a Story.
214+
215+
### Required facts about a Story
216+
217+
- **Opaque universally unique identifier**
218+
- A Story must have an **opaque**, **universally unique** identifier.
219+
- Prefer a random identifier such as **UUIDv4**.
220+
- Represent it as a URI, for example:
221+
`urn:uuid:550e8400-e29b-41d4-a716-446655440000`
222+
223+
- **Business-friendly name**
224+
- A Story should have a concise, human-readable name.
225+
226+
- **Slug**
227+
- A Story should have a kebab-cased slug that is unique at least within the organization.
228+
- Example: `assess-risk-position`, `verify-stakeholders`
229+
230+
- **Business-focused definition**
231+
- A Story must have a plain-language definition of what the user needs.
232+
233+
- **Structured statement (who / what / why)**
234+
- A Story should capture:
235+
- **Who**: a reference to a Persona (or persona-like Concept)
236+
- **What**: the capability/action needed
237+
- **Why**: a reference to an Outcome (the intended business value)
238+
239+
- **Owned by a Use Case**
240+
- A Story is **part-of** a Use Case: the Use Case **owns** the Story.
241+
- If the owning Use Case is deleted, its Stories are deleted as well.
242+
243+
- **Concept usage (relationship-object)**
244+
- Model the relationship between a Story and a Concept as a **relationship-object**
245+
(not a direct link), because it carries meaning about *how* the Concept is used.
246+
- The relationship-object defines a usage type, for example:
247+
- **Input Concept** — required/mandatory input parameter (or optional)
248+
- **Output Concept** — definition of the output (often a shape/compound object)
249+
- **Dependent Concept** — referenced in filters/constraints (e.g., SQL/SPARQL `WHERE`)
250+
251+
- **Workflow participation**
252+
- A Story can participate as a **Step** in one or more WorkflowDefinitions.
253+
- Model this via a relationship-object (e.g. a “WorkflowStep”) so you can capture step
254+
order, conditions, and other execution semantics.

docs/concept/term.md

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
---
2+
description: "A manifestation of a Concept: a business-facing or technical term (e.g., synonyms, abbreviations, variable names) that all mean the same thing in the Concept’s context. Learn how Terms work in the Use Case Tree Method."
3+
keywords:
4+
- term
5+
- business term
6+
- technical term
7+
- concept term
8+
- EKG method
9+
- enterprise knowledge graph
10+
schema_type: "Article"
11+
---
12+
13+
# Term
14+
15+
<!--summary-start-->
16+
_A manifestation of a Concept: the words (business-facing and technical) used to refer to the same underlying meaning_
17+
<!--summary-end-->
18+
19+
=== "Business & Management Audience"
20+
21+
## What Is a Term?
22+
23+
A **Term** is a word or phrase people use to refer to a [Concept](concept.md) in a given
24+
context.
25+
Concepts are about **meaning**; Terms are about **how that meaning shows up** in language.
26+
27+
A Concept can have multiple Terms (synonyms, abbreviations, variations), but they all refer
28+
to the **same meaning** in the context of that Concept.
29+
30+
## Business Terms vs Technical Terms
31+
32+
Terms come in two broad categories:
33+
34+
- **Business Terms** — user-facing terminology used in conversations, documentation, UI, and
35+
policies (e.g., “Customer”, “Counterparty”, “Risk Position”)
36+
- **Technical Terms** — manifestations in code and data (e.g., variable names, column names,
37+
API parameters, query bindings)
38+
39+
Treat both as Terms, because both are used by people, and both need to be linked back to the
40+
Concept so everyone stays aligned.
41+
42+
=== "Data & Tech Audience"
43+
44+
## Terms as Concept Manifestations
45+
46+
A Term is a **manifestation** of a Concept.
47+
It can be:
48+
49+
- a preferred business phrase
50+
- an abbreviation
51+
- a synonym
52+
- a technical symbol in code (e.g., `_customer`, `cust_id`, `?cust`, `/customers`)
53+
54+
Terms allow the Knowledge Graph to connect human language and technical artifacts back to a
55+
consistent semantic core (the Concept).
56+
57+
## Discovering Technical Terms in code and data
58+
59+
Technical Terms can often be **discovered automatically** by scanning the organization’s
60+
repositories and data artifacts:
61+
Python/Java code, SQL, configuration, CSV column headers, API specs, and more.
62+
63+
Each detected manifestation becomes a **Technical Term** that links to:
64+
65+
- the **Concept** it manifests, and optionally
66+
- the **Business Term** it corresponds to in that context.
67+
68+
Example:
69+
If you detect the CSV header `P`, you can link that Technical Term to the Concept and also to
70+
the Business Term “Patient”.
71+
72+
Technical Terms also include **semantic/validation artifacts** introduced later in the Use
73+
Case lifecycle (especially during the Build phase), such as:
74+
75+
- OWL classes/properties/axioms in an ontology, and
76+
- SHACL shapes and constraints.
77+
78+
In those cases, you link the Concept (and optionally a Business Term) to the ontology/shapes
79+
term via a **special mapping relationship** (e.g. “representsClass”, “representsProperty”,
80+
“constrainedByShape”), pointing at the ontology IRI.
81+
82+
Example:
83+
If the Concept “patient” corresponds to the OWL class `hospital:Patient` in a Hospital
84+
ontology, create a Technical Term representing that ontology term and link it with something
85+
like **representsClass → `hospital:Patient`**.
86+
87+
## Preferred Term
88+
89+
Concepts don’t need a traditional `rdfs:label` / `skos:prefLabel` label.
90+
Instead, a Concept can point to a **preferred Term** (a Term object) that represents the
91+
preferred expression in that context.
92+
93+
=== "Ontology"
94+
95+
## Ontology (minimal facts we can state today)
96+
97+
--8<-- "fragment/uctm-diagram-term.md"
98+
99+
We're not (yet) prescribing a full OWL ontology here.
100+
But we can state a small set of **facts** that people can reliably use to build their own
101+
ontology / schema / graph model around a Term.
102+
103+
### Required facts about a Term
104+
105+
- **Opaque universally unique identifier**
106+
- A Term should have an **opaque**, **universally unique** identifier.
107+
- Prefer a random identifier such as **UUIDv4**, represented as a URI:
108+
`urn:uuid:550e8400-e29b-41d4-a716-446655440000`
109+
110+
- **One or more forms (lexical variants)**
111+
- A Term must have **one or more textual forms** (the actual strings).
112+
- Business Terms often need multiple forms for different UI / communication contexts, for
113+
example:
114+
- **Singular**: “Patient”
115+
- **Plural**: “Patients”
116+
- **Abbreviation**: “Pat.”
117+
- **Short label**: “P”
118+
- These are variations of the **same Term** (think “sub-manifestations” of the Term).
119+
They should not be mixed with the forms of a different Term.
120+
121+
Example:
122+
If “Patient” and “Client” are both used to mean the same thing in a given Use Case
123+
context, model them as **two separate Business Term objects**, each with their own
124+
lexical forms.
125+
Both Terms link to the same Concept, and the Concept defines the shared meaning.
126+
127+
- **Term kind**
128+
- A Term should indicate whether it is a **Business Term** or a **Technical Term**.
129+
130+
- **Owned by a Concept**
131+
- Terms are **owned** by a Concept (part-of): when the Concept is deleted, its Term
132+
objects are deleted as well.
133+
- A Concept must have **one or more Terms**.
134+
- All Terms for a Concept **mean the same thing** in that Concept’s context.
135+
136+
### Optional but useful facts
137+
138+
- **Language**: natural language tag for business terms (e.g., `en`, `nl`)
139+
- **System / artifact**: where a technical term appears (e.g., codebase, dataset, API)
140+
- **Term subtype**: for technical terms (e.g., `VariableName`, `ColumnName`, `ApiFieldName`,
141+
`QueryBinding`)
142+
- **Provenance**: who introduced the term, when, and why
143+
144+
### Optional facts for Technical Terms (recommended)
145+
146+
When a Term is discovered in code/data, capture **where it came from**:
147+
148+
- **Repository URL** (e.g., GitHub repo)
149+
- **File path**
150+
- **Line range** (or equivalent location for non-text artifacts)
151+
- **Commit / tag / revision**
152+
- **Language / format** (e.g., Python, Java, SQL, CSV)
153+
- **Locator URL** (deep link to the exact source line / blob for traceability)
154+
155+
When a Term represents an ontology or validation artifact, capture:
156+
157+
- **Ontology / shape identifier** (IRI), e.g. `hospital:Patient`
158+
- **Mapping kind** (e.g., representsClass / representsProperty / constrainedByShape)
159+

0 commit comments

Comments
 (0)