AI Skill Report Card
Building Ontology Conceptualizations
Quick Start13 / 15
Given a domain (e.g., "hospital patient scheduling"), produce:
- Conceptualization (language-independent): the objects, concepts, and relationships that matter for the purpose at hand.
- Objects:
Patient,Appointment,Provider,Resource - Relationships:
Patient books Appointment,Appointment requires Resource,Provider conducts Appointment
- Objects:
- Ontology (language-dependent realization): the same conceptualization expressed in a specific formal language.
- OWL:
Patient ⊑ Person,hasAppointment(Patient, Appointment) - JSON Schema:
{"Patient": {"appointments": ["Appointment"]}} - SQL DDL:
CREATE TABLE Patient (id, ...),CREATE TABLE Appointment (patient_id FK, ...)
- OWL:
- Ontological commitment: the subset of concepts/relationships every realization must preserve (e.g., every ontology must have some representation of "a Patient can have multiple Appointments," regardless of syntax).
Output: one conceptualization document + N ontology mappings + a commitment table showing what's invariant across all N.
Recommendation▾
Add a third example showing a failure case (e.g., where skipping commitment extraction caused a real interoperability bug) to demonstrate contrast between good/bad outcomes
Workflow14 / 15
Progress:
- Step 1: Scope the purpose — what questions must this model answer? (Purpose bounds what counts as "of interest.")
- Step 2: Enumerate concepts — list candidate objects/entities; for each, ask "does this matter for the stated purpose?"
- Step 3: Define relationships — map how concepts relate (cardinality, dependency, hierarchy)
- Step 4: Group into sub-conceptualizations — cluster related concepts if the domain is large (these become candidate sub-ontologies)
- Step 5: Choose realization language(s) — decide target formalism(s): OWL/RDF, UML, JSON Schema, relational schema, pseudocode
- Step 6: Formalize — write the ontology in each target language, preserving all conceptual relationships
- Step 7: Extract ontological commitment — diff the realizations; identify the invariant core shared by all
- Step 8: Validate — check that no realization silently drops a relationship required by the conceptualization (this is the failure mode that causes interoperability breakage)
Recommendation▾
Include a concrete template/table format for the 'ontological commitment' deliverable rather than just describing it prose-wise
Examples17 / 20
Example 1: Input: "We have two teams — one using a graph database, one using a relational database — both modeling 'customer orders,' and they can't agree on how to integrate." Output:
- Conceptualization:
Customer places Order;Order contains OrderLine;OrderLine references Product; cardinalities: one Customer→many Orders, one Order→many OrderLines. - Ontology A (graph): nodes
Customer,Order,Product; edgesPLACES,CONTAINS,REFERENCES. - Ontology B (relational): tables
customers,orders,order_lines,products; FKs encode the same edges. - Ontological commitment: both must preserve "one Order belongs to exactly one Customer" and "an OrderLine cannot exist without an Order." Integration point: map graph edges to FK constraints 1:1; any relationship in one system without an equivalent in the other signals a missing commitment — surface it before building the integration layer.
Example 2: Input: "Define a conceptualization for 'document versioning' before we pick a tech stack." Output:
- Concepts:
Document,Version,Author,Change. - Relationships:
Document has many Version;Version authored-by Author;Version derived-from previous Version(linear or branching — must decide as part of scope);Change belongs-to Version. - Explicitly out of scope (per purpose): rendering format, storage backend, UI — these belong to ontology realizations, not the conceptualization.
- Deliverable: a language-neutral diagram/table, reusable regardless of whether the eventual system uses Git-like DAGs, simple linear history, or event sourcing.
Recommendation▾
Consider trimming Best Practices and Common Pitfalls slightly since some points overlap (e.g., 'confusing ontology for conceptualization' repeats the Quick Start distinction)
Best Practices
- Separate "what" from "how." The conceptualization answers what exists and relates; the ontology answers how it's encoded. Never let implementation syntax leak into the conceptualization step.
- Bound scope by purpose. A conceptualization is not "everything about the domain" — it's the selected slice relevant to the stated task. Reject concepts that don't serve the purpose, even if they're "true" of the domain.
- Make ontological commitment explicit and written down. Vague agreement ("we both model orders") isn't a commitment; a commitment is a checkable list of concepts/relationships every realization must contain.
- Expect non-uniqueness. The same conceptualization can be validly realized by several different ontologies (different granularity, different grouping) — this is normal, not an error to fix.
- Use pseudocode/diagrams as an intermediate language when moving from conceptualization to multiple formal ontologies (mirrors the pseudocode → Lisp/Fortran pattern) — it catches conceptual gaps before formal-language quirks obscure them.
- When reconciling two existing systems, extract each system's implicit conceptualization first (reverse-engineer from schemas/code), then diff them — don't start from a blank slate.
Common Pitfalls
- Confusing an ontology for the conceptualization. If you can't restate a concept without referencing a specific language/schema syntax, you've slipped into ontology-level thinking prematurely.
- Skipping the commitment step. Two teams thinking they "agree on the model" while only agreeing loosely leads to silent integration failures later — always make the shared core explicit and testable.
- Over-scoping. Including every conceivable entity "just in case" defeats the purpose of simplification; a conceptualization is deliberately partial.
- Assuming one-to-one ontology mapping. Don't force two independently-built ontologies into structural equality; align only at the level of the shared ontological commitment.
- Ignoring cardinality/dependency details. "Order contains OrderLine" is incomplete without specifying whether an OrderLine can exist independently — these details are exactly what later ontologies will get wrong if left implicit.