Shared understanding
Among people or software agents. If sites publish the same underlying ontology, agents can extract and aggregate across them.
Noy & McGuinness (Stanford, 2001) in 25 pages: why an ontology exists, what is in one, three rules that precede every step, the seven-step method, the traps in a class hierarchy, the facets of a slot, and the naming conventions. This page carries the whole argument in distilled form — then does the one thing the paper could not: it runs every rule against a live domain ontology that an agent loads before it edits.
Two markers are used throughout. 101 §x.y cites the paper
— that is its claim, not ours. VLSC marks where this
site's own practice answers the rule, with the artifact named so the
mapping can be checked rather than believed.
Written for domain experts rather than AI laboratories, in the era of Protégé-2000 and frame systems. Its first stated reason for building an ontology is "to share common understanding of the structure of information among people or software agents" — a phrase that read as boilerplate in 2001 and is now the whole point.
| Field | Value |
|---|---|
| Title | Ontology Development 101: A Guide to Creating Your First Ontology |
| Authors | Natalya F. Noy, Deborah L. McGuinness — Stanford |
| Length | 25 pages, 8 sections, 9 figures |
| Tooling era | Protégé-2000 (examples), Ontolingua (library), Chimaera (diagnostics); RDF and DAML named as emerging W3C/DARPA work |
| Running example | Wine & food pairing, descended from the CLASSIC tutorial knowledge base (Brachman et al. 1991) |
| Intellectual lineage | Gruber 1993 (definition), Gruninger & Fox 1995 (competency questions), Uschold & Gruninger 1996 and Gómez-Pérez 1998 (alternative methodologies), Rosch 1978 (levels of generality) |
| Source | protege.stanford.edu — ontology101.pdf |
Among people or software agents. If sites publish the same underlying ontology, agents can extract and aggregate across them.
Time, units, devices: model once, reuse everywhere; or integrate several existing ontologies into a larger one.
Hard-coded assumptions are hard to find, understand and change — especially for someone without programming expertise.
Describe the task's domain separately from the program that solves it: the same configuration algorithm drives PCs and elevators when each is fed its own ontology.
Once terms are declared, they can be analyzed formally — which matters most when reusing or extending someone else's ontology.
Often an ontology of the domain is not a goal in itself. Developing an ontology is akin to defining a set of data and their structure for other programs to use.
101 §1 — the sentence that makes an ontology legitimate as agent context: it is data for a consumer, not a monument.
Noy & McGuinness 2001, §1
The paper's working definition, because the AI literature contains many and they contradict one another (§2).
| Term | Also called | What it is (101 §2) | Wine example |
|---|---|---|---|
| Class | concept | A concept in the domain of discourse; the focus of most ontologies. |
Wine, Red Wine,
Pauillac, Winery
|
| Slot | role, property | A property of a class or instance, describing a feature or attribute. |
body, maker, color,
produces
|
| Facet | role restriction | A restriction on a slot: value type, allowed values, cardinality, defaults. |
body: enumerated {light, medium, full};
produces: multiple, instance-type
Wine
|
| Instance | individual | A specific member of a class. Ontology plus instances constitutes a knowledge base. |
Chateau-Morgon-Beaujolais, a winery, a vintage
|
An ontology together with a set of individual instances of classes constitutes a knowledge base. In reality, there is a fine line where the ontology ends and the knowledge base begins.
101 §2
Noy & McGuinness 2001, §2
requests, changes, yields,
sampled-as, framed-as, plus
inherits / consumes /
implements / inspired-by between product
families); the facets carried by the 52 machine-readable constraints
(severity, sdd_ref, scope glob,
patterns); and the instances — radio profiles, specific
stations, dated evidence records. Census 2026-09-12.
"These rules may seem rather dogmatic. They can help, however, to make design decisions in many cases" (§3). Everything later in the guide is an application of these three.
"There is no one correct way to model a domain — there are
always viable alternatives. The best solution almost always
depends on the application that you have in mind and the
extensions that you anticipate." 101 §3
"Ontology development is necessarily an iterative process."
Start rough, refine, fill in detail — and expect the first
version to be revised once it meets an application or an expert.
101 §3
"Concepts in the ontology should be close to objects (physical or
logical) and relationships in your domain of interest" — most
likely the nouns and verbs of the sentences that describe it.
101 §3
The spine of the guide (§3). Steps 4 and 5 are "closely intertwined… also the most important steps in the ontology-design process" — which is why §4 and §5 of the paper go back over them in detail, and why sections 05 and 06 below do the same.
| Step | What 101 asks | The rule that decides | VLSC artifact |
|---|---|---|---|
| 1 Domain & scope | What domain? For what use? Which questions must it answer? Who uses and maintains it? | Scope is task-shaped: the same domain yields different ontologies for different consumers. | 12 competency questions, five product-family profiles |
| 2 Reuse | What already exists that can be refined or extended? | Reuse may be a requirement, not a preference, once other systems have committed to a vocabulary. | W3C SSN/SOSA, PROV-O, OWL-Time, SKOS, SAREF/QUDT — as conceptual reference; Hamlib vocabulary as a de-facto reuse |
| 3 Enumerate terms | Which terms do we want to make statements about, or explain? | Get the list comprehensive first; do not yet worry about overlap, relations, or class-vs-slot. | Bilingual glossary: CommandIntent, Actuation, Observation, StateReport, DeviceAdapter, Protocol Binding, Control Lease… |
| 4 Classes & hierarchy | Which terms denote objects with independent existence, and how do they generalize? | The is-a test: every instance of B is also an instance of A. | Eight top-level classes; product families as siblings; no artificial intermediate classes |
| 5 Slots | What properties describe each class? Which class does each remaining term belong to? | Attach a slot at the most general class that can have the property. |
Relations requests / changes /
yields; capability and protocol-binding slots
|
| 6 Facets | Value type, allowed values, cardinality, domain, range, defaults? |
Most general domain and range that is not overly general —
never THING.
|
Constraint severity / sdd_ref /
scope / patterns; single-owner
cardinality
|
| 7 Instances | Which individuals, at what granularity, with which slot values? | Individual instances are the most specific concepts the application needs to represent. | Radio profiles (FT-710, IC-7300, IC-7300MK2), dated evidence records, 🐞 reports on the public board |
What is the domain the ontology will cover? For what are we going to use it? For what types of questions should it provide answers? Who will use and maintain it? The answers may change during design, "but at any given time they help limit the scope of the model".
The paper's own demonstration: the same wine domain needs synonyms and part-of-speech data for natural-language processing, retail pricing for a customer choosing a bottle, wholesale pricing and availability for a buyer stocking a cellar. Three tasks, three ontologies.
"If the people who will maintain the ontology describe the domain
in a language that is different from the language of the ontology
users, we may need to provide the mapping between the languages."
101 §3
CommandIntent, 现场验证 for Field verified —
because the maintainer thinks in one language and part of the
audience reads the other. The mapping is published, not implied.
"It is almost always worth considering what someone else has done and checking if we can refine and extend existing sources for our particular domain and task."
Reuse stops being optional "if our system needs to interact with other applications that have already committed to particular ontologies or controlled vocabularies".
Most knowledge-representation systems import and export; where they cannot, translating an ontology between formalisms "is usually not a difficult one".
Start with the most general concepts and specialize:
Wine → red / white / rosé → Syrah, Red Burgundy,
Cabernet Sauvignon.
Start with the leaves and group upward: Pauillac and
Margaux → Medoc →
Bordeaux.
Define the salient concepts first, then generalize and specialize. "Often the easiest for many ontology developers, since the concepts 'in the middle' tend to be the more descriptive concepts in the domain" (Rosch 1978).
Pinot Noir is a subclass of Red Wine.
101 §3–§4.1
"The classes alone will not provide enough information to answer the competency questions from Step 1." Most of the leftover Step-3 terms become properties of the classes.
Intrinsic (a wine's flavor),
extrinsic (its name, its area),
parts — physical or abstract (the courses of a
meal) — and relationships to other individuals
(maker, linking a wine to a winery).
"A slot should be attached at the most general class that can
have that property." body and color sit
on Wine; tannin level sits on
Red Wine, because white wines are not described by
it. All subclasses inherit.
| Facet | What it constrains | Paper's example |
|---|---|---|
| Cardinality | How many values a slot may have: single vs multiple, or an explicit minimum and maximum. Maximum 0 is legal — it says a subclass may not fill the slot at all. |
body single; produces multiple;
grape min 1, max 1 for single-varietal wines
|
| Value type | What kind of value fills the slot: String, Number (Float/Integer), Boolean, Enumerated (Symbol in Protégé-2000), or Instance with a list of allowed classes. |
name String; flavor enumerated
{strong, moderate, delicate}; produces Instance
of Wine
|
| Domain | The classes a slot is attached to — the classes whose property it describes. | Winery is the domain of produces |
| Range | The allowed classes for an instance-typed slot's values. | Wine is the range of produces |
| Default value | A convenience filled in automatically for new instances — which, unlike a slot value, may be changed. See section 06 below. |
"full" as the default body when most wines in
scope are full-bodied
|
THING". (3) If the list contains a class and its
subclass, delete the subclass — it adds no information. (4) If it
contains all subclasses of A but not A, use A alone; and if it
contains all but a few subclasses of A, consider whether A is the
better answer. Slot attachment obeys the same rules where attaching
equals declaring the domain: tannin level belongs on
Red Wine, not on each red variety, and not on
Wine.
Protocol Binding ≠ Capability is an axiom here rather
than a preference: a capability declared over an overly general range
("any backend") is a claim no test can falsify. The concrete anchor is
the audio-pyaudio-rate constraint — audio rate comes
from backend capabilities, not from a model name hard-coded at the
call site [AD-011, amended V2.9/V2.14]. Cardinality shows up as an
invariant rather than a facet value: one authoritative state
owner, one serial-port owner (ft8
no-direct-serial [AD-008]; ft710 / modern
cat-direct-serial-io [AD-002]).
Chateau-Morgon-Beaujolais, carries eight values — body
light, color red, flavor delicate, tannin level low, grape
Gamay (an instance of Wine Grape), maker
Chateau-Morgon (an instance of Winery),
region Beaujolais (an instance of
Wine-Region), sugar dry. Note what the instance
demonstrates: three of its eight values are themselves instances of
other classes, which is how a knowledge base stays queryable instead
of becoming a pile of strings.
Section 4 of the paper is a defect catalogue, not a tutorial: "after defining a considerable number of new classes, it is helpful to stand back and check if the emerging hierarchy conforms to these guidelines." Read it as a review checklist — which is how an agent can use it too.
| # | Trap | The rule (101 §4) | Why it breaks |
|---|---|---|---|
| 1 | is-a read as "related to" | A is a superclass of B only if every instance of B is necessarily an instance of A — a "kind of" relation. §4.1 | Anything vaguely associated becomes a subclass, and inheritance starts carrying properties the child does not have. |
| 2 | Singular under plural |
Never define Wines and then Wine as
its subclass; pick one number and keep it everywhere. §4.1,
§6.2
|
"A single wine is not a kind of wines" — the hierarchy says something false about the domain. |
| 3 | Forgetting transitivity | If B ⊂ A and C ⊂ B then C ⊂ A. §4.1 | Constraints attached high up silently apply three levels down, where nobody expected them. |
| 4 | Direct vs indirect confusion |
A direct subclass has no class between it and its parent;
Chardonnay is a direct subclass of
White Wine, not of Wine. §4.1
|
Sibling analysis and "attach the slot at the most general class" both need the direct relation, not the transitive closure. |
| 5 | Frozen hierarchy in an evolving domain |
When white Zinfandel appeared, Zinfandel had to
split into red and white subclasses under different parents.
§4.1
|
The domain moved; the ontology now asserts a color that some of its own instances do not have. |
| 6 | Confusing a class with its name |
"Classes represent concepts in the domain and not the words
that denote these concepts." Renaming Shrimps to
Prawns changes nothing else. §4.1
|
A terminology change is mistaken for a modelling change, and everything downstream gets rebuilt. |
| 7 | Synonyms as separate classes | One concept, one class; carry synonyms, translations and presentation names as a list, or in documentation. §4.1 |
Shrimp, Prawn and
Crevette as three classes means three places to
maintain one fact.
|
| 8 | Cycles | A ⊂ B and B ⊂ A at once is a declaration that A and B are equivalent. §4.1 | The hierarchy stops being a hierarchy; traversal may not terminate. |
| 9 | Siblings at different levels of generality |
All siblings except those at the root must sit at the same
level of generality — White Wine and
Chardonnay are not siblings. Root-level classes
are major divisions and are exempt. §4.2
|
The tree reads like a book outline with a chapter and a sub-sub-section side by side. |
| 10 | Exactly one subclass | "If a class has only one direct subclass there may be a modeling problem or the ontology is not complete." Like a bulleted list with one bullet. §4.2 | Either the two classes are equivalent (delete one) or the missing siblings have not been found yet. |
| 11 | More than a dozen subclasses | Well-structured ontologies have between two and a dozen direct subclasses; beyond that, intermediate categories are probably needed. §4.2 |
Every wine type flat under Wine hides the Medoc /
Bordeaux and Côtes d'Or / Burgundy structure the domain
already has.
|
| 12 | Invented grouping classes | If no natural class exists to group a long sibling list, leave it flat — "the ontology is a reflection of the real world". §4.2 | An artificial intermediate class is a category nobody in the domain will recognise, and every future instance must be forced into it. |
| 13 | Fearing multiple inheritance |
It is legitimate: Port is both
Red Wine and Dessert Wine, and
inherits sugar = SWEET from one parent and
tannin level from the other. §4.3
|
Refusing it produces duplicate parallel hierarchies that must be kept in sync by hand. |
| 14 | New class with nothing new to say | Introduce a subclass when it has additional properties, different restrictions, or different relationships; in practice it should add slots, add slot values, or override inherited facets. §4.4 | A class that says nothing beyond its parent is a name, not a concept. |
| 15 | A subclass per restriction |
Do not create Delicate Wine,
Moderate Wine… for each value of a slot; the
distinction belongs in the slot value. §4.4–§4.5
|
Class explosion, and every facet of a value becomes a node in the tree. |
| 16 | Denying terminological hierarchies | Reference hierarchies (a classification of diseases) may add no properties at all and are still worth having: they support navigation and let the user pick a level of generality. §4.4 | Insisting every class earn new slots flattens vocabularies whose whole job is to organise terms. |
| 17 | Classes that instances migrate between |
"A class to which an individual instance belongs should not
change often." Chilled Wine is an attribute, not
a class. §4.5
|
Extrinsic properties used as class criteria make instances change class during their lifetime — and take their inherited facets with them. |
| 18 | Instances where a hierarchy exists | If concepts form a natural hierarchy, make them classes — all wine regions are classes, marked abstract where they have no direct instances. There is no such thing as a sub-instance. §4.6 |
Bourgogne as an instance cannot have
Côtes d'Or under it, so the natural structure is
lost.
|
| 19 | Over- and under-scoping | Do not specialise or generalise more than the application needs — "at most one extra level each way"; do not include every property or every conceivable relation. §4.7 | Label paper and shrimp recipes enter a wine-pairing ontology; maintenance cost rises and the competency questions do not. |
| 20 | Undeclared disjointness |
Declare classes disjoint when they cannot share instances —
Red Wine and White Wine are,
Dessert Wine and White Wine are not.
§4.8
|
Without the declaration the system cannot flag a class
subclassed from both Riesling and
Port as the modelling error it is.
|
Create a class for the distinction when
(a) the concepts with different values become
restrictions on slots of other classes, or
(b) the distinction matters in the domain and
you think of the two as different kinds of object. Otherwise keep
it in the slot value. Wine colour is the paper's exception that
proves the rule: colours are normally values, but a red wine and
a white wine pair with different foods, so
Red Merlot and White Merlot are two
classes.
Decide the lowest granularity the application needs — "the most
specific concepts that will constitute answers to [the competency
questions] are very good candidates for individuals". Pairing wine
with food stops at Sterling Vineyards Merlot; adding
a restaurant inventory pushes individual bottles down to
instances; recording per-vintage properties makes the vintage the
instance and the wine the class.
True statements may still be out of scope. An experimenter is a biological organism, but for an ontology of biology experiments that subclass would attach weight, age and species slots to every experimenter — irrelevant data, and a trap for reusers. The paper's instruction is the important half: record such design decisions in the documentation, so someone reusing the ontology for another application knows the fact was excluded deliberately.
RadioBackend and RadioCapabilities generalise
the FT-710 vertical slice into the Modern platform, which is trap 11
fixed by an intermediate category the domain actually uses. The
reverse case is documented too: SunsdrMobile is a client of
SunMRRC, not a product family, and saying so is what stops a
single-subclass branch appearing next to it.
Section 5 of the paper is short and easily skipped. Both of its topics are about redundancy and enforcement — the two things that decide whether a model can be trusted by a machine.
maker on Wine and
produces on Winery are the same fact
stated twice. Storing both directions is redundant: an application
can always infer one from the other. But from a
knowledge-acquisition standpoint both are convenient, because a
user may know the wine in one session and the winery in another —
so the system fills the inverse automatically and keeps the base
consistent.
The rule worth keeping: declare the pair, store it once, let the system maintain the mirror.
A default is convenience: when most instances share a value, new instances are pre-filled and may then be changed. It "does not enforce any new restrictions on the model or change the model in any way".
A slot value is different: if
sugar = SWEET is a value on
Dessert Wine, then every subclass and instance
carries it and it cannot be changed. One is a starting point; the
other is a constraint.
audio-pyaudio-rate constraint: rate comes from backend
capabilities. Read in the paper's terms, a value was declared where a
default — or better, a lookup — belonged, and the model asserted
something the hardware was free to contradict.
CommandIntent and the StateReport that
answers it; a 🐞 report and the answer page that closes it. The
mirror is maintained by the server, never by the client — and that
asymmetry is a safety invariant, not a convenience: a projection may
display the mirrored value, but only the authoritative side may write
it. CommandIntent ≠ Actuation and
Observation → StateReport are the ontology saying the
same thing twice: a command is not confirmed state, and only an
observation closes the loop. The ft710
ptt-release-no-verify constraint is the honest exception,
declared as such — TX0 is fire-and-forget, so there is no mirror to
maintain and no confirmation to infer [AD-007; Ch15; V1.2].
Section 6 of the paper. Naming is presented as a modelling safety device, not cosmetics: consistency is what prevents the singular / plural class error, and an explicit convention is what makes a term recognisable as a class or a slot at a glance.
| Decision (101 §6) | What the paper says | VLSC convention |
|---|---|---|
| System constraints first |
Choose the convention around the knowledge-representation
system: one namespace or separate ones for classes, slots and
instances; case sensitivity; which delimiters are legal.
Protégé-2000 is case-sensitive with a single namespace, so a
class Winery and a slot winery
coexist but two winerys do not.
|
The "system" is a repository plus an agent runtime: names must
survive as identifiers in code, as keys in
harness/index.json, and as search terms in a
constraint registry — so ASCII, no spaces, case-significant.
|
| Capitalisation | Capitalise class names, lower-case slot names, assuming the system is case-sensitive. |
Classes and ontology terms PascalCase:
CommandIntent, StateReport,
DeviceAdapter, ControlLease.
Relations lower-case: requests,
changes, yields,
inherits, consumes,
implements, inspired-by.
|
| Delimiters | Space, CamelCase, or an underscore / dash — and if you use delimiters, also decide whether each word is capitalised. Spaces are intuitive but may not survive the systems you interoperate with. |
Constraint IDs are kebab-case and read as a rule, not a thing:
cat-no-dn, no-direct-serial,
poll-stale-guard, vendor-readonly,
ptt-authority. Multi-word ontology relations use
a hyphen for the same reason.
|
| Singular or plural |
Neither is better; singular is more common in practice. Pick
one, keep it throughout — some systems make you declare the
choice in advance. Consistency is also what prevents
Wine under Wines.
|
Singular for every class and term: Product Family, Physical Entity, Information Object. Plural appears only in prose, never in a term. |
| Prefix / suffix |
has- or -of on slot names makes a
term self-identifying as a slot, at the cost of longer names.
|
Not used: verb-form relations (requests,
yields) are already unambiguous against
PascalCase classes, so the prefix would be noise.
|
| Do not annotate the kind | Never add "class", "property" or "slot" to a concept name — the context and the convention already say what it is. | Followed. The one deliberate exception is the evidence ladder, where the badge text names its own kind (Field verified, Bench pending) because the badge is read out of context, in tables and release notes. |
| Avoid abbreviations |
"Use Cabernet Sauvignon rather than
Cab."
|
Followed with one honest caveat: the radio domain's controlled vocabulary is abbreviations — PTT, CAT, SWR, IQ, EFHW, QSO, VFO, DNR. These are terms, not shorthand, and the bilingual glossary carries the expansion. The rule that actually applies is: no invented abbreviations. |
| Subclass naming |
Direct subclasses either all include the superclass name or
all omit it: Red Wine and White Wine,
or Red and White — never one of each.
|
Product names follow their family: MRRC Universal, MRRC FT-710, MRRC Modern, MRRC-FT8 — the family token is present in all of them, and SunMRRC keeps its own root because it is a different track, not a subclass. |
| Synonyms and translations | Many systems attach a list of synonyms, translations or presentation names to a class; where they cannot, list them in the class documentation. §4.1, §6 |
The bilingual glossary is exactly this list, published:
控制意图 / CommandIntent, 执行活动 /
Actuation, 观测活动 / Observation,
现场验证 / Field verified. Two names, one concept —
never two concepts.
|
Written so that it can be run by a person reviewing a model, or handed to an agent as the acceptance list for an ontology change. Every item traces to a section of the paper.
§3 Step 1
§3 Step 1
§3 Step 2
§3 Step 3
§3 Step 4
§3 Step 4
§4.1
§4.2
§4.2
§4.1
§3 Step 5
§3 Step 5
§3 Step 6
THING.§3 Step 6
§3 Step 6
§4.4
§4.5
§4.5
§4.6
§6
§6.2–§6.4
§4.1, §6
§4.7
§4.8, §8
What the paper asks for, what exists here, and — because an audit that only lists successes is advertising — what is missing. Census 2026-09-12; artifacts named so each row can be checked.
| Step | Present | Anchor | Gap / limitation |
|---|---|---|---|
| 1 Scope & competency questions | Yes | 12 published competency questions; five product-family profiles; scope stated per family in Product Families | The questions are prose, not executable: nothing fails a build when one of them stops being answerable. |
| 2 Reuse | Yes, conceptual | W3C SOSA/SSN, PROV-O, OWL-Time, SKOS, WoT TD; ETSI SAREF and QUDT; Hamlib's vocabulary as a forced commitment | No formal import: nothing is loaded from those namespaces at runtime, so the alignment is a claim maintained by hand. |
| 3 Term enumeration | Yes | Bilingual core glossary, 12 term pairs, published in the appendix | No synonym list beyond the EN/ZH pair; radio-domain aliases (CAT vs rig control, PTT vs transmit trigger) are not carried as declared synonyms. |
| 4 Classes & hierarchy | Yes, deliberately shallow |
Eight top-level classes; product families as siblings;
RadioBackend / RadioCapabilities as
the one earned intermediate level
|
Depth is at most two below the top level. That is a scope decision, not an accident — but it means the is-a test is rarely stressed. |
| 5 Slots | Yes |
requests, changes,
yields, sampled-as,
framed-as; family relations
inherits / consumes /
implements / inspired-by
|
Relations are documented in prose and SVG diagrams, not in a schema a tool can traverse. |
| 6 Facets | Partly — and better than prose where it counts |
52 machine-readable constraints across three repositories,
each with severity (block / warn /
info), sdd_ref, scope
glob and patterns; cardinality as an invariant
(one authoritative state owner, one serial owner)
|
These are enforcement facets on code, not declared facets on ontology slots. Domain and range of the relations are never stated formally. |
| 7 Instances | Yes | Radio profiles (FT-710, IC-7300, IC-7300MK2); dated evidence records; 🐞 reports classified on a public board | Instances live in three places (code profiles, release notes, the board) with no shared identity scheme. |
| §4.8 Disjointness | In prose | TX vs RX state; authoritative owner vs client projection; process evidence (B1–B4) vs product evidence (design target → field verified) | Not machine-declared, so no tool can flag a violation — the check is a human reading the invariants. |
| §6 Naming | Yes | PascalCase terms, lower-case relations, kebab-case constraint IDs, singular class names, published bilingual pairs | The convention is observable but unwritten: it lives in the artifacts, not in a style document an agent can load. |
| §8 Assessment by use | Yes — stronger than the paper |
Three consumers of one semantic: agent context,
PreToolUse(Edit|Write) gate, human review; a
reproducible block trace
(sdd_context.py check → exit 2)
|
Use is measured as blocked edits, not as answered competency questions. The litmus test of Step 1 is still manual. |
Reading a 2001 guide in 2026 requires naming its frame. None of this is criticism; the paper says of itself that it is "a starting point", and it is still the clearest one.
Quality is assessed by using the ontology in the application it was designed for — "the proof is in the pudding" (§8). The only tooling named is Chimaera, for logical correctness and common design errors. There is no cost model, no coverage measure, no notion of a regression.
Evolution appears once, as an anecdote about white Zinfandel (§4.1). There is no versioning, no ownership, no ruling process, no account of who may change a class and on what evidence.
The consumers imagined are applications and knowledge-based systems that read the model. The paper never considers a consumer that can edit the codebase — which is the consumer that turns an ontology from documentation into a gate.
Slots attach to classes; defaults exist; RDF and DAML are named as emerging work. An OWL 2 reading differs in kind: properties are global with declared domain and range, the open-world assumption applies, and there are no default values at all.
Nothing in the guide asks who is accountable when a model is wrong, who may authorize an action taken on the strength of it, or how a decision is traced back to the person who made it.
101 is a discipline for making nodes meaningful. It does not address the quality of the links between them — which is the variable that decides whether a network of models, tools and people compounds or merely amplifies noise.
Loaded before the first edit rather than consulted after a
question arises — AGENTS.md, the living SDD, and a
routing index that holds no content so references never go stale.
Severity, sdd_ref, scope and
patterns turn a modelling rule into a
PreToolUse hook that can refuse an edit before it
lands, with a non-zero exit code as the receipt.
Every claim carries source, version, environment, method, result, date and limitation — and evidence is snapshotted rather than accumulated, because a number without a cutoff time is a rumour with decimal places.
The paper's iterative loop gets a concrete driver: a field incident becomes an SDD ruling, the ruling becomes a machine-readable constraint, the constraint blocks the re-introduction. An incident is only fixed when it becomes a guard.
For every link that lets something act: who supplied the data, who chose the objective, who authorized the action, who observed the consequence, who can stop it. Recursive improvement is sustainable only when capability links and responsibility links grow together.
Six properties — clear semantics, traceable provenance, closed feedback, bounded authority, fault isolation, reviewable objectives — are what 101's node discipline needs on the links between nodes. See Connection Quality.
There is no single correct ontology for any domain. Ontology design is a creative process and no two ontologies designed by different people would be the same. "The proof is in the pudding" — we can assess the quality of our ontology only by using it in applications for which we designed it.
101 §8 — and in 2026 the application includes a consumer that reads the model, edits the code, and can be refused by it.
Noy & McGuinness 2001, §8
101 §x citation on this page.
The seven steps are 25 pages of good sense. The interesting question is what happens to them when the consumer of the ontology can also edit the code — and can be refused by it. That is the thesis page.