Skip to content

Component Interactions

Runtime collaboration

flowchart TB
    subgraph CLI["CLI Layer (Picocli)"]
        ConvertCmd["ConvertCommand\n(extends BaseConvertCommand)"]
        ValidateCmd["ValidateCommand\n(extends BaseValidateCommand)"]
        RenderCmd["RenderCommand\n(extends BaseRenderCommand:\nindex, IRIs, output, exit codes)\nBPMN + PlantUML only"]
    end

    subgraph Parsing["Parsing Layer"]
        Parser["Parser\n(ExchangeParser / BpmnXmlToRdf / PlantUmlParser)"]
        TypeMap["TypeMapping\n(loads YAML config)"]
    end

    subgraph Emission["Emission Layer"]
        Emitter["LinkedArchiEmitter\n(extends BaseLinkedArchiEmitter)"]
        Vocab["LinkedArchiVocab\n(pre-resolved IRIs)"]
        Minting["IriMinting\n(notation + modelId → stable IRIs)"]
        BaseEmitter["BaseLinkedArchiEmitter\n• emitStandardFolders()\n• emitFolderMember()\n• emitProvenance()"]
    end

    subgraph Output["Output Layer"]
        RdfIo["RdfIo\n(writer factory + serialization)"]
        Format["OutputFormat\n(TRIG / TURTLE / JSONLD / ...)"]
    end

    subgraph Verification["Verification Layer (tests)"]
        Verifier["ConversionVerifier\n• checkRelationshipsHaveEndpoints()\n• checkViewNodesHaveView()\n• checkNoGeneratedIris()\n• countEntities()"]
    end

    subgraph SVG["SVG Rendering"]
        SvgRend["Notation renderer\nBpmnSvgRenderer (builds SVG from BPMNDI)\nPumlSvgRenderer (PlantUML layout engine)"]
    end

    ConvertCmd -->|"loads"| TypeMap
    ConvertCmd -->|"invokes"| Parser
    ConvertCmd -->|"passes model to"| Emitter
    ConvertCmd -->|"writes via"| RdfIo
    ValidateCmd -->|"loads shapes + data"| RdfIo
    RenderCmd -->|"delegates to"| SvgRend

    Parser -->|"produces"| Emitter
    Emitter -->|"inherits"| BaseEmitter
    Emitter -->|"uses"| Vocab
    Emitter -->|"uses"| Minting
    Emitter -->|"reads overrides from"| TypeMap
    BaseEmitter -->|"uses"| Vocab
    BaseEmitter -->|"uses"| Minting

    RdfIo -->|"resolves"| Format

    Verifier -.->|"validates output of"| Emitter

Step-by-step execution

  1. ConvertCommand (CLI entry point) parses CLI args, loads TypeMapping from YAML, creates the notation-specific Parser
  2. Parser reads the source file → produces an intermediate model (data classes)
  3. LinkedArchiEmitter receives the model + options and:
    • Creates IriMinting (parameterized by notation slug + model ID)
    • Creates LinkedArchiVocab (resolves arch:, archvis:, dct:, schema: IRIs once)
    • Calls BaseLinkedArchiEmitter.emitStandardFolders() for the folder hierarchy
    • Emits elements/relationships using TypeMapping for type resolution and IriMinting for IRI construction
    • Calls BaseLinkedArchiEmitter.emitFolderMember() for ordered membership
    • Calls BaseLinkedArchiEmitter.emitProvenance() for the provenance graph
  4. RdfIo takes the in-memory model + OutputFormat and serializes to file
  5. ConversionVerifier (used in tests) validates the emitted model against the foundational ontology contract

Core components reference

Component Role
UriUtil IRI normalization (ensureTrailingSlash) and path joining
IriMinting Mints stable IRIs: {base}{notation}/{modelId}/{segment}/{id}
TypeMapping Loads YAML type-mapping files; unified superset of all sections
OutputFormat Enum of supported RDF serialization formats with extension inference
RdfIo Writes RDF models with explicit writer factory registration
LinkedArchiVocab Pre-resolved IRI constants for arch:, archvis:, dct:, schema:
BaseLinkedArchiEmitter Abstract base: folder emission, membership, provenance
ConversionVerifier Validation checks for converter output
DiagramsIndex Parses diagram-index.yaml for batch conversion
BaseConvertCommand Picocli base with shared CLI flags
BaseValidateCommand Picocli base for SHACL validation commands