Comprehensive CCO Coverage
Atelier’s classification vocabulary is grounded in the
Common Core Ontologies
(CCO v2.1) via the CCO-mediated BFO alignment in
ontology/README.md. To date
the applied pipeline has imported only 3 of CCO’s 11 modules
(Information Entity, Agent, Extended Relation) — a deliberate scoping while
we iterated toward the PII/metadata target. The program goal is now
comprehensive coverage across all 11 CCO modules, driven on two fronts:
- Upstream — Aegir (ontology owner): import the remaining modules, ground classification leaves in canonical CCO classes, generate synth corpora per domain, train models. See project_ontology_migration_to_aegir.
- Applied — Atelier / signals: a CCO-rooted classification taxonomy, public-data fixtures (GitTables/SOTAB) that exercise every reachable module, and a coverage evaluation that reports module-level completeness.
Why completeness is correctness, not thoroughness
Treat full 11/11 coverage as a correctness and safety invariant, not a milestone. This is an epistemic claim: incomplete ontological coverage does not yield partially-correct output — it yields confident, complete-looking output that has silently dropped a load-bearing dimension.
The two modules we don’t yet cover, Units of Measure and Extended
Relation, are precisely the interface-semantics modules: a measurement
value is meaningless without its unit; an entity/column is meaningless in
isolation without its relations. A classifier that labels a column mass but
cannot represent the unit emits a valid-looking classification missing
the load-bearing axis — and you cannot flag what you cannot represent, so
the omission is invisible at the source and only surfaces downstream, wherever
a consumer (Atlas sync, data integration, cross-column compatibility, an
EAV/relational read) fills the missing axis with its own assumption. (The
canonical real-world cost of exactly this — a silent unit assumption at a
boundary — is the Mars Climate Orbiter.)
The principled response is epistemic honesty: represent the un-modeled axis
explicitly as first-class uncertainty (Jøsang subjective logic; the DST core
already does this for within-frame ignorance via Θ and Pl − Bel), rather
than letting it default to a silent assumption. See
atelier.classify.semantic_absence.
Design consequences (binding):
- Incompleteness must be loud. A measurement column with no resolvable
unit carries an explicit
unit: UNRESOLVEDtoken (mirroring the pipeline’s UNRESOLVED strata) so no consumer can silently assume. - Gate claims on missing axes. Refuse assertions that depend on
un-modeled semantics (e.g. “these two
masscolumns are compatible”) until the relevant module is represented. - EAV/Units is correctness work, prioritized now — not phase-3 coverage. EAV tables make units explicit data instead of an implicit wide-table assumption (see the table-shape note below).
The classification-target nuance
Every column Atelier classifies is an Information Content Entity
(cco:InformationContentEntity ≡ atelier:ICE ≡ cco:ont00000958). The
other ten CCO modules describe what an ICE is about — its referent. A
column of country names is a DesignativeICE (ont00000686) that
designates a Geospatial entity; a column of masses is a
DescriptiveICE (ont00000853) that describes a Quality. So:
Comprehensive CCO coverage = the vocabulary’s ICE leaves collectively denote referents spanning all 11 CCO modules, across the ICE trichotomy (Designative / Descriptive / Prescriptive).
The taxonomy stays ICE-rooted (the target is always an ICE); the CCO module is the referent domain carried as a second axis on each leaf.
Coverage matrix (11 CCO modules)
Reachability = which public annotation task surfaces the domain. CTA (Column Type Annotation, GitTables + SOTAB) labels a column’s entity/value type; CPA (Column Property Annotation, SOTAB) labels the relation a column expresses — the only vehicle for the relational module.
| # | CCO module | CCO anchor (readable) | Reachable via | Applied status (fixture) | Owner of grounding |
|---|---|---|---|---|---|
| 1 | Information Entity | cco:InformationContentEntity (ont00000958) | CTA ★★★ | ✓ strong — id, name, title, description, genre | Aegir (imported) |
| 2 | Agent | cco:Agent / Person, Organization | CTA ★★★ | ✓ author, publisher | Aegir (imported) |
| 3 | Time | cco:TemporalRegion | CTA ★★★ | ✓ date, duration, year | Aegir (todo) |
| 4 | Quality | cco:Quality (BFO quality) | CTA ★★★ | ✓ length, width (measure) | Aegir (todo) |
| 5 | Units of Measure | cco:MeasurementUnit | CTA ★★☆ (implicit) | ◐ via measure values | Aegir (todo) |
| 6 | Geospatial | cco:GeospatialRegion | CTA ★★★ (SOTAB-rich) | ◐ only state | Aegir (todo) |
| 7 | Currency Unit | cco:CurrencyUnit | CTA ★★☆ | ◐ price | Aegir (todo) |
| 8 | Event | cco:Act / process (occurrent) | CTA ★☆☆ | ✗ | Aegir (todo) |
| 9 | Artifact | cco:Artifact | CTA ★☆☆ (thin in web tables) | ✗ | Aegir (todo) |
| 10 | Facility | cco:Facility | CTA ★☆☆ (thin) | ✗ | Aegir (todo) |
| 11 | Extended Relation | object properties (is_input_of, affects…) | CPA ✓ | ✓ SOTAB CPA relation leaves | Aegir (imported) |
Readable cco: labels follow the vocab-README convention; canonical
ont… IRIs resolve from the module TTLs (Aegir’s grounding job). Only the
ICE IRIs are pinned above because they are the classification root.
Reachability is conditioned on table shape, not fundamental
The ✗/◐ on Units of Measure and Extended Relation above hold only
for wide / relational tables, where units hide inside Quality values
("5.0 m") and relations hide in the schema (the column’s property).
They are not fundamental CCO gaps. Entity-Attribute-Value (EAV)
tables — relational support in progress — relocate both axes into column
content and thereby surface both modules:
- the EAV attribute/property column holds relation/property names as
values (
mass,has_currency) → Extended Relation is classifiable column content, not a schema-level CPA annotation; - the EAV unit column holds units as values (
kg,m,USD) → Units of Measure is a column type, with no value-level unit detector.
So full 11/11 coverage follows from admitting EAV-pattern tables, which is strictly more general than the CPA-only path (EAV reaches both residual modules at once). CPA remains a complementary route to Extended Relation for wide tables.
What the public data reaches today
- Strong from CTA (GitTables + SOTAB): Information Entity, Agent, Time, Quality, Geospatial — 5 modules with abundant labeled columns.
- Moderate from CTA: Units of Measure (units ride on quality values), Currency Unit (Currency/price types).
- Recovered by strided scanning: Event, Artifact, Facility — sparse in
the corpus prefix but present once the scan strides across all ~562k
tables; the
test-gittablesfixture now includes all three. - CPA-covered: Extended Relation —
sotab_cpa_candidates()addsSDG.REL.*leaves from/raid/datasets/sotab/sotab_cpa_*, where each column is annotated by the relation (DBpedia property) it expresses to the table’s subject. This is the data face CTA cannot reach. - EAV-gated: Units of Measure — units are value-level in wide/CPA tables; only an EAV unit column makes them a column type.
Net: 10 of 11 modules data-covered — the strided GitTables CTA fixture (Information Entity, Agent, Time, Quality, Geospatial, Currency, Event, Artifact, Facility) plus the SOTAB CPA producer (Extended Relation). The residual 1 (Units of Measure) is EAV-gated, not data-scarce — admitting EAV tables closes the gap to 11/11.
Module coverage ≠ per-read resolution: once Extended Relation is covered
(the vocabulary exists), a relational read whose relation is unresolved is
still a positively-represented relation: UNRESOLVED absence — the two are
deliberately decoupled.
Division of labor
| Concern | Aegir (upstream) | Atelier / signals (applied) |
|---|---|---|
| Import all 11 CCO module TTLs | ✓ | consumes |
| Ground leaves in canonical CCO classes | ✓ | consumes vocab |
| Per-domain synth corpora + model training | ✓ | consumes models |
| CCO-rooted classification taxonomy | — | ✓ |
| Public fixtures spanning every reachable module | — | ✓ (extend test-gittables + SOTAB + CPA) |
| Module-level coverage evaluation | — | ✓ |
Phased plan (applied side)
- Re-root the taxonomy by CCO module — DONE. Every leaf carries its
referent
cco_module+ ICE trichotomy class; the coverage matrix falls out of the taxonomy (populated modules vs gaps). - Broaden the fixture across modules — DONE. Strided scanning across the full corpus took the fixture to 9 modules (CTA), and the SOTAB CPA producer added Extended Relation → 10 of 11 (30 leaf types).
- Admit EAV-pattern tables (in progress) → Units of Measure as classifiable column content (11/11) — the last EAV-gated module.
- Module-level coverage scenario — a BDD/eval assertion that reports per-CCO-module coverage and fails if a targeted module regresses to zero exercised leaves.
See sotab-coverage.md for the SOTAB CTA label set and
test-gittables
for the current fixture.