Layer: T-Box (Terminological)
File: ui/patterns/ui-patterns.ttl
Triples: 196 axioms
Role: Schema — defines classes, properties, and constraints

The T-Box holds terminological knowledge: the vocabulary of the domain. Classes and properties are declared here. Domain experts never touch this layer — it defines what can exist, not what does exist.

Eight view patterns are declared as OWL classes, each a subclass of uip:View. Four interaction types (Navigate, Select, Filter, Submit) are declared as OWL classes under uip:Interaction. Layout roles (Header, Content, Sidebar, Footer) anchor the composition model.

uip:View ⊑ bfo:IndependentContinuant
uip:TableView ⊑ uip:View
uip:FormView ⊑ uip:View
uip:CompositeView ⊑ uip:View
uip:hasColumn rdfs:domain uip:TableView
uip:hasField rdfs:domain uip:FormView

SHACL shapes in ui/shapes/ validate every A-Box file against these constraints before code generation runs.

A-Box: Healthcare Domain Instances

File: ui/domains/healthcare-ui.ttl

What the A-Box does

The A-Box asserts that concrete individuals are members of T-Box classes. Domain experts edit here. They describe specific screens, not abstract patterns. The same T-Box can serve many A-Boxes: healthcare, EDGAR, CRM.

View instances

  • hc:PatientList — a uip:TableView
  • hc:EncounterForm — a uip:FormView
  • hc:PatientDetail — a uip:DetailView
  • hc:MainLayout — a uip:CompositeView

Property assertions

  • hc:PatientList uip:hasColumn hc:nameColumn
  • hc:PatientList uip:hasColumn hc:dobColumn
  • hc:PatientList uip:hasColumn hc:statusColumn
  • hc:nameColumn uip:dataKey "patient.name"
  • hc:nameColumn rdfs:label "Patient Name"
  • hc:EncounterForm uip:hasField hc:diagnosisField
  • hc:diagnosisField uip:fieldType uip:SelectField

SHACL validation

  • TableView must have ≥1 Column — passes
  • Field must have label + dataKey — passes
  • fieldType ∈ {text, number, date, select, confirm} — passes
  • CompositeView children must declare layout role — passes

Code generation output

  • Charm (Go TUI) — lipgloss table component
  • Lit (Web) — <ak-table> web component
  • Ratatui (Rust TUI) — StatefulWidget impl
  • React — typed FC + hooks + CSS Modules
Ontology Knowledge Base
aktagon/ontologies
Knowledge Base
UI Ontology Stack — aktagon/ontologies
20 TTL files
Triples
2,461
+214 this sprint
OWL Classes
48
BFO 2.0 grounded
Frameworks
4
Go · Rust · Web ×2
SHACL Tests
24
All passing
T-Box Layers
LayerTriples
Upper Ontology (BFO 2.0)187
Core Vocabulary42
Language Vocabs ×3284
Library T-Boxes ×4612
UI Patterns + Mapping296
A-Box Domains
DomainInstances
Healthcare UI847
EDGAR / SEC293
SPARQL endpoint: active
Reasoner: HermiT 1.4
query.sparql
Run Query
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# A-Box query: all views with columns
# for the healthcare domain
PREFIX uip: <https://aktagon.com/ontology/ui/ui-pattern#>
PREFIX hc: <https://aktagon.com/ontology/ui/healthcare#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT ?view ?viewLabel ?column ?dataKey
WHERE {
  ?view a uip:TableView ;
       rdfs:label ?viewLabel ;
       uip:hasColumn ?column .
  ?column uip:dataKey ?dataKey .
  FILTER( STRSTARTS( STR(?view), STR(hc:)))
}
ORDER BY ?view ?column
# R-Box: role hierarchy axioms
# uip:hasColumn ⊑ uip:hasPart
# uip:hasField ⊑ uip:hasPart
# uip:hasSubView ⊑ uip:hasPart (transitive)
# Select mapping for output target
SELECT ?mapping ?framework ?template
WHERE {
  ?mapping a map:UIMapping ;
         map:targetFramework ?framework ;
         map:templateFile ?template .
  VALUES ?framework { lit:LitElement rct:FunctionComponent }
}
ORDER BY ?framework
# C-Box: defined concepts (TDL syntax)
# TableView ≡ View ⊓ ∃hasColumn.Column
# FormView ≡ View ⊓ ∃hasField.Field
# ≥1 hasColumn ⊤ (SHACL: minCount 1)

From pilot to production without committees, roadmaps, or handoffs.

One engineer. Research to production. Healthcare. Finance. Compliance.

The AI is cheap. Making it work is expensive.

80% of UK businesses neither use nor plan to use AI
60% cite limited AI skills, expertise, and knowledge as a barrier
71% of NLP solutions are purchased externally, not built in-house

We’re just not technically smart enough to try and create our own. We don’t have that experience.

You cannot 1-click install AI into a messy CRM or a 15-year-old server. I research the data, design the integration, automate the workflows, and deploy to production.

Source: AI Adoption Research, UK Department for Science, Innovation and Technology, January 2026