Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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):

  1. Incompleteness must be loud. A measurement column with no resolvable unit carries an explicit unit: UNRESOLVED token (mirroring the pipeline’s UNRESOLVED strata) so no consumer can silently assume.
  2. Gate claims on missing axes. Refuse assertions that depend on un-modeled semantics (e.g. “these two mass columns are compatible”) until the relevant module is represented.
  3. 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:InformationContentEntityatelier:ICEcco: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 moduleCCO anchor (readable)Reachable viaApplied status (fixture)Owner of grounding
1Information Entitycco:InformationContentEntity (ont00000958)CTA ★★★✓ strong — id, name, title, description, genreAegir (imported)
2Agentcco:Agent / Person, OrganizationCTA ★★★✓ author, publisherAegir (imported)
3Timecco:TemporalRegionCTA ★★★✓ date, duration, yearAegir (todo)
4Qualitycco:Quality (BFO quality)CTA ★★★✓ length, width (measure)Aegir (todo)
5Units of Measurecco:MeasurementUnitCTA ★★☆ (implicit)◐ via measure valuesAegir (todo)
6Geospatialcco:GeospatialRegionCTA ★★★ (SOTAB-rich)◐ only stateAegir (todo)
7Currency Unitcco:CurrencyUnitCTA ★★☆◐ priceAegir (todo)
8Eventcco:Act / process (occurrent)CTA ★☆☆Aegir (todo)
9Artifactcco:ArtifactCTA ★☆☆ (thin in web tables)Aegir (todo)
10Facilitycco:FacilityCTA ★☆☆ (thin)Aegir (todo)
11Extended Relationobject properties (is_input_of, affects…)CPA✓ SOTAB CPA relation leavesAegir (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-gittables fixture now includes all three.
  • CPA-covered: Extended Relation — sotab_cpa_candidates() adds SDG.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

ConcernAegir (upstream)Atelier / signals (applied)
Import all 11 CCO module TTLsconsumes
Ground leaves in canonical CCO classesconsumes vocab
Per-domain synth corpora + model trainingconsumes models
CCO-rooted classification taxonomy
Public fixtures spanning every reachable module✓ (extend test-gittables + SOTAB + CPA)
Module-level coverage evaluation

Phased plan (applied side)

  1. 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).
  2. 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).
  3. Admit EAV-pattern tables (in progress) → Units of Measure as classifiable column content (11/11) — the last EAV-gated module.
  4. 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.