IA spec — Logical-tier presentation

    This document specifies how the Logical-tier presentation of the draft ontology derived from the PDTF schema is laid out. It is a blueprint: the actual Logical-tier docs that follow this spec are a separate deliverable. The ontology is a separate technical artefact and evidence for SPDTF, not an endorsed scheme.

    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)

    1. # <Entity name> — H1 matches the Concept-tier file name exactly.

    2. ## 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.

    3. ## Attributes — typed table:

      Attribute Type Cardinality Required Identity-bearing Description
      <name> <type> <lo>..<hi> Y/N Y/N
      • Type is platform-independent: string, integer, boolean, date, dateTime, decimal, uri, EnumScheme:<SchemeName>, Ref:<EntityName>. No xsd: prefixes; no SQL types; no sh:datatype.
      • Cardinality uses 0..1, 1..1, 0..*, 1..*.
      • Required is Y when cardinality lower bound is 1.
      • Identity-bearing is Y when the attribute participates in the Identity Criterion (the Logical-tier rendering of the Concept-tier IC).
    4. ## 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.
      • Inverse is the named inverse relationship if any (empty otherwise).
    5. ## 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.

    6. ## 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.

    7. ## 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
    8. ## ER diagram — Mermaid erDiagram block showing the entity + its directly-related entities + cardinalities. Per-module ER diagrams live in docs/manual/logical/diagrams/<module>-er.mmd and may be referenced rather than inlined.

    9. ## Source ODR + ADR — links to the supporting technical ODR and any implementation ADR (typically ADR-0011 for module entities).

    Per-enumeration section shape (mandatory)

    1. # <SchemeName> — H1.

    2. ## 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 — see concept-model-ia.md §"Cross-tier traceability"); the link target is the using-entity narrative, not a scheme file.

    3. ## Members — table:

      Notation Label Definition Source
      <notation> <prefLabel> <dct:source IRI or "this scheme" if internal>
    4. ## Cardinality discipline — links to ## Constraints of any entity that binds an attribute to this scheme. Open/closed flag (whether overlays may subset or extend).

    5. ## Source ODR + ADR — typically ADR-0010 + the scheme's per-scheme ODR if any.

    Diagram conventions

    • Mermaid erDiagram only at this tier — no plain flowchart (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.mmd shows all cross-module relationships at a glance.
    • Per-module ER diagrams at docs/manual/logical/diagrams/<module>-er.mmd show 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>.md shape across tiers.
    • Per-attribute mapping: every Logical-tier attribute row must be traceable to a Physical-Ontology tier owl:DatatypeProperty or owl: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:ObjectProperty URI in the Physical-Ontology tier.
    • Per-enumeration mapping: every Logical-tier scheme maps to one skos:ConceptScheme URI in the Physical-Ontology tier; every member row maps to one skos:Concept URI.
    • Cross-tier consistency CI: a planned tool walks the four tiers and asserts the mappings are 1:1 (with explicit out-of-scope annotations for entities that exist in one tier but not another).

    Out of scope for this tier

    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