Concepts¶
The vocabulary CORA publishes — the terms a consuming team will encounter when looking up a field, reading a crosswalk, or integrating CORA's artifacts into a pipeline. The corresponding code-side vocabulary (seams, adapters, extractor protocol) lives under Contributing and is not needed to use the data.
Canonical concept¶
A canonical concept is a single, field-level thing that recurs across real assets data — postal_code, street_address, email_address, lease_end_date. CORA names each one explicitly and maintains one record of how it appears in every participating standard.
Concept names are lowercase snake_case (postal_code, not PostalCode). Aliases are recorded so a search for zip, zip_code, postcode, or postal_zip all resolve to the same concept.
A concept is intentionally leaf-level. CORA crosswalks today map a single field per standard, not a whole composite type. "The address concept" is out of scope; "the postal code part of an address" is in scope. This keeps the mapping unambiguous and the confidence label honest.
Per-standard mapping¶
A concept's mapping for one standard names the inventory path where that concept lives in that standard's schema, and how confident CORA is that the mapping is right.
mappings:
mits:
field: AddressType/PostalCode
version: '4.0'
confidence: exact
ibpdi:
field: Address/PostalCode
version: '1.0'
confidence: exact
redi:
field: Zip_Postal_Code
version: '1.0'
confidence: exact
Three pieces of information for each standard: the field path (where the concept lives in that standard's inventory), the version of the standard the path is verified against, and a confidence label.
When a standard does not represent a concept, the mapping uses field: null with confidence: not_present and a narrative explaining the absence.
Confidence vocabulary¶
Each mapping is labeled with one of five confidence values. The label is editorial; it records the maintainer's honest assessment of how well the two fields align.
| Value | Meaning |
|---|---|
exact |
The fields are identical in name (modulo casing), semantics, and cardinality. Same concept, same shape. |
close |
Same concept, minor differences in name, formatting, or optionality. Safe to use interchangeably with care. |
partial |
Same concept, meaningful differences in scope or definition. Check the notes before relying on equivalence. |
divergent |
Same word, different concept. Requires narrative notes. The mapping warns rather than enables. |
not_present |
The concept genuinely does not exist in this standard. Requires field: null and narrative notes. |
divergent and not_present always carry narrative notes explaining why. The CI gate enforces this.
Inventory¶
An inventory is a normalized YAML view of one module of one standard — the format-agnostic substrate every crosswalk reads from. One file per module: standards/<std>/current/inventory/<module>.yaml. MITS has seven, IBPDI has seven, REDI has one.
The shape is consistent across standards regardless of the original source format (XSD, JSON, Excel):
standard: mits
module: property-marketing
version: '5.0'
source_label: xsd
types:
- name: PropertyType
extends: Identifiable
definition: A property listed for marketing.
fields:
- path: PropertyType/PropertyID
domain: PropertyType
range: Identification
cardinality: required
definition: Unique identifier for the property.
Every committed inventory passes structural and field-count validation in CI before publication. The shape is documented in detail under Consuming inventories.
Crosswalk¶
A crosswalk is the YAML that ties one canonical concept to its per-standard mappings. One file per concept: crosswalks/concepts/<concept>.yaml.
%%{init: {'themeCSS': '.concept .nodeLabel p, .concept .nodeLabel span, .concept .nodeLabel { color: #fafaf8 !important; } .flowchart-link, .edgePath .path { stroke: var(--cora-text) !important; } marker, .arrowheadPath { fill: var(--cora-text) !important; }'}}%%
flowchart LR
classDef concept fill:#2b4257,stroke:#1f3243,color:#fafaf8
classDef target fill:#f5f3ee,stroke:#d4d0c7,color:#1a1a1a
postal_code["postal_code"]:::concept
mits_postal["MITS<br/>AddressType/PostalCode"]:::target
ibpdi_postal["IBPDI<br/>Address/PostalCode"]:::target
redi_postal["REDI<br/>Zip_Postal_Code"]:::target
postal_code -- exact --> mits_postal
postal_code -- exact --> ibpdi_postal
postal_code -- exact --> redi_postal
The crosswalk is the unit of consumption. A pipeline that needs to unify postal codes across three sources reads one file (crosswalks/concepts/postal_code.yaml), follows the per-standard paths into each inventory, and produces a single column from three differently-shaped inputs.
The shape and walkthrough of a crosswalk lives under Reading a crosswalk.
Coverage matrix¶
The coverage matrix is a single Markdown view of concepts × standards with confidence indicators. It answers one question quickly: which fields are safe to rely on across the sources my organization actually receives? A partial cell warns that pipeline logic needs to handle a definitional gap; a not_present cell warns that one source simply cannot answer that question.
The matrix regenerates on every change to any crosswalk or inventory and lives in the repository at docs/generated/coverage-matrix.md.
Standard, module, version¶
A standard is one of the participating industry standards CORA maintains inventories for — mits, ibpdi, redi today. A module is one logical unit within a standard, sized to a meaningful chunk of the schema (MITS Property-Marketing, IBPDI Financials). A version is the standard-body-assigned version label of the source artifact the inventory was extracted from.
Versions are tracked per-mapping in every crosswalk. When a standard releases a new version, CORA's drift register surfaces which mappings need re-verification.
Next: What CORA publishes — the catalogue of inventories, crosswalks, and the coverage matrix.