IA spec — Logical-tier presentation
This document specifies how the Logical-tier presentation of OPDA's ontology model is laid out. It is a blueprint: the actual Logical-tier docs that follow this spec are a separate deliverable.
Audience
Data engineers, solution architects, integration architects, technical product managers. Comfortable with entity-relationship modelling; reads UML or Mermaid ER diagrams fluently; does not need (and does not want) RDF / SHACL / SKOS syntax at this tier.
Purpose
Show the entity-relationship structure of OPDA's data model in platform-independent form: typed attributes with cardinalities, named relationships with cardinality, identity keys, enumeration constraints, derivation rules — without committing to RDF, JSON, or SQL. Reader should be able to evaluate the model's shape and dependencies before deciding which physical encoding to consume.
File layout
docs/manual/logical/
├── README.md Tier overview + reading order + module catalogue + entity index + master ER diagram
├── <module>/
│ ├── README.md Module-level entity inventory + module ER diagram
│ ├── <entity>.md One file per Logical entity
│ └── enumerations/
│ └── <scheme>.md One file per SKOS scheme (Logical view)
└── diagrams/
├── master-er.mmd Cross-module ER diagram
└── <module>-er.mmd Per-module ER diagrams
- One file per Logical entity, mirroring Concept-tier layout for traceability.
- Enumerations split out into their own subdirectory because they're typed attributes' value sets and warrant separate treatment.
Per-entity section shape (mandatory)
# <Entity name>— H1 matches the Concept-tier file name exactly.## Summary— one paragraph linking back to Concept ([Concept tier →](../../concept/<module>/<entity>.md)); names the UFO Kind in technical brackets (e.g. "Substance Kind; held UFO meta-category"). Logical tier may use the 7-category UFO vocabulary; Concept tier may not.## Attributes— typed table:Attribute Type Cardinality Required Identity-bearing Description <name><type><lo>..<hi>Y/N Y/N Typeis platform-independent:string,integer,boolean,date,dateTime,decimal,uri,EnumScheme:<SchemeName>,Ref:<EntityName>. Noxsd:prefixes; no SQL types; nosh:datatype.Cardinalityuses0..1,1..1,0..*,1..*.Requiredis Y when cardinality lower bound is 1.Identity-bearingis Y when the attribute participates in the Identity Criterion (the Logical-tier rendering of the Concept-tier IC).
## Relationships— typed table:Predicate Target entity Cardinality Inverse Description <predicate-name><EntityName><lo>..<hi><inverse-predicate>- Predicate names are Logical-tier names; the Physical-Ontology tier may pick different URIs.
Inverseis the named inverse relationship if any (empty otherwise).
## Identity key— the typed shape of the entity's Identity Criterion. Names the attributes / relationships that, together, identify a unique instance. Cross-references the Concept tier IC narrative.## Constraints— non-cardinality business rules: value-range bounds, format patterns, mutually-exclusive attribute groups, conditional cardinalities. One bullet per constraint; cross-references the SHACL severity tier (Violation/Warning/Info) where applicable so the Physical-Ontology tier knows what to emit.## Derived attributes— attributes computed from other attributes via a rule (SHACL-AF in the Physical-Ontology tier). Table:Attribute Derived from Rule summary Severity <name><source attrs/rels>Info/Warning## ER diagram— MermaiderDiagramblock showing the entity + its directly-related entities + cardinalities. Per-module ER diagrams live indocs/manual/logical/diagrams/<module>-er.mmdand may be referenced rather than inlined.## Source ODR + ADR— links to the ratifying ODR and any implementation ADR (typically ADR-0011 for module entities).
Per-enumeration section shape (mandatory)
# <SchemeName>— H1.## Summary— one paragraph; links to the using entity at Concept tier (the entity that primarily binds this scheme; if multiple entities bind it, link to the module's Concept-tier README) via[Concept tier — <UsingEntity> →]; names the UFO meta-category (one of the 7 per ODR-0011 §8a). The Concept tier has no per-scheme pages (Concept narrates Kinds, not Schemes — seeconcept-model-ia.md§"Cross-tier traceability"); the link target is the using-entity narrative, not a scheme file.## Members— table:Notation Label Definition Source <notation><prefLabel>< dct:sourceIRI or "this scheme" if internal>## Cardinality discipline— links to## Constraintsof any entity that binds an attribute to this scheme. Open/closed flag (whether overlays may subset or extend).## Source ODR + ADR— typically ADR-0010 + the scheme's per-scheme ODR if any.
Diagram conventions
- Mermaid
erDiagramonly at this tier — no plainflowchart(those belong in the Concept tier) and no UML class diagrams (over-specified for the audience). - Master ER diagram at
docs/manual/logical/diagrams/master-er.mmdshows all cross-module relationships at a glance. - Per-module ER diagrams at
docs/manual/logical/diagrams/<module>-er.mmdshow within-module relationships in depth. - Diagram entities use Logical-tier names; predicate labels use Logical-tier predicate names.
Voice and style
- Technical but platform-independent. UFO category names are allowed and encouraged (they earn the reader's trust); UFO is not introduced or explained at this tier (that's
docs/manual/concept/foundation/ufo-categories.md). - Tables over prose where structure permits. Bullet lists for constraints. Mermaid for relationships.
- Active voice for relationships ("Property has Address", not "Address is had by Property"); inverse relationships listed in the inverse column.
- No code samples. No JSON snippets. No Turtle snippets. Cross-link to the relevant Physical tier for those.
Cross-tier traceability
- File-path mapping:
<concept-tier>/property/property.md↔<logical-tier>/property/property.md. Same<module>/<entity>.mdshape across tiers. - Per-attribute mapping: every Logical-tier attribute row must be traceable to a Physical-Ontology tier
owl:DatatypePropertyorowl:ObjectProperty(the Physical-Ontology tier provides the URI). The reverse (every TBox property has a Logical attribute) is also enforced. - Per-relationship mapping: every Logical-tier predicate name maps to one
owl:ObjectPropertyURI in the Physical-Ontology tier. - Per-enumeration mapping: every Logical-tier scheme maps to one
skos:ConceptSchemeURI in the Physical-Ontology tier; every member row maps to oneskos:ConceptURI. - Cross-tier consistency CI: a planned tool walks the four tiers and asserts the mappings are 1:1 (with explicit
out-of-scopeannotations for entities that exist in one tier but not another).
Out of scope for this tier
- Business-language narrative — see
concept-model-ia.md. - Deployment topology, named-graph layout, derived consumer profiles, BASPI5 overlay composition — see
physical-database-ia.md. - OWL / SHACL / SKOS / Turtle syntax — see
physical-ontology-ia.md.
Worked-template excerpt (one entity, schematic)
# <EntityName>
## Summary
<One paragraph linking to Concept tier and naming the UFO meta-category in
technical brackets. Example: "[Concept tier →](../../concept/<module>/<entity>.md).
UFO Substance Kind; persists through changes to its content via succession
events.">
## Attributes
| Attribute | Type | Cardinality | Required | Identity-bearing | Description |
|---|---|---|---|---|---|
| `<name>` | `string` | `0..1` | N | N | <…> |
| `<name>` | `EnumScheme:<Scheme>` | `1..1` | Y | N | <…> |
## Relationships
| Predicate | Target entity | Cardinality | Inverse | Description |
|---|---|---|---|---|
| `<predicate>` | `<TargetEntity>` | `0..*` | `<inverse>` | <…> |
## Identity key
<Typed shape of the IC: e.g. "Identity key = `<attr-A>` + `<rel-B>`. Stability through
<events> via PROV-O lifecycle reification.">
## Constraints
- <constraint, severity tier in brackets>
- …
## Derived attributes
| Attribute | Derived from | Rule summary | Severity |
|---|---|---|---|
| `<name>` | `<source>` | <…> | `Info` |
## ER diagram
```mermaid
erDiagram
<EntityName> ||--o{ <RelatedA> : "<predicate>"
<EntityName> }o--|| <RelatedB> : "<predicate>"
Source ODR + ADR
- ODR-NNNN —
, Council Session NNN - ADR-0011 — Module TBox emission — implementation
## Generation discipline
Logical-tier files generate mechanically from the source TTLs only:
- `source/03-standards/ontology/opda-<module>.ttl` — entity inventory (one entity per `owl:Class`); canonical attribute set (one row per `owl:DatatypeProperty` / `owl:ObjectProperty` with `rdfs:domain` matching the entity); identity criterion paraphrase from `rdfs:comment` "IC:" clause; UFO meta-category from `skos:scopeNote`
- `source/03-standards/ontology/opda-<module>-shapes.ttl` — cardinalities (`sh:minCount` / `sh:maxCount` → `cardinality` column); identity-key column (Cat 1 IdentityKey shapes flag attributes as identity-bearing); constraint rows (each shape with severity tier); derived-attribute rows (each `sh:rule` SHACL-AF rule)
- `source/03-standards/ontology/opda-vocabularies.ttl` — enumeration member tables + per-scheme metadata (`opda:ufoCategory`, `dct:source`, `opda:hasSteward`)
**The ODR corpus is not a source** — it is the modelling-decision audit trail; the A9 per-kind discipline embedded the IC + hard cases + UFO citation directly in the TTL's `rdfs:comment` + `skos:scopeNote` (per [ADR-0007 §"A9 per-kind discipline output"](../adr/ADR-0007-ontology-generator-specification.md)). The PDTF JSON Schemas are upstream input to the Council programme, not a source for this tier.
Generation produces a complete first draft from the TTLs alone; manual review tightens platform-independent naming + constraint-prose voice.
Comments