Skip to main content

SchemaConfig Overview

Every schema in MAPS is stored as a SchemaConfig record. It is the canonical representation, regardless of whether the original format is JSON, Avro, Protobuf, CBC, CBOR, XML, CSV, MessagePack, RAW, or Native.

MAPS uses SchemaConfig for:

  • schema registration
  • topic binding
  • transformations
  • statistics
  • selector evaluation
  • schema-to-schema conversion

1. Core Fields​

versionId​

String representing this schema version.

epoch​

Monotonically increasing long used for ordering.

name / title​

Human-readable identifier.

description / documentation​

Short and long-form documentation for UI and API usage.

format​

Schema type:

  • avro
  • cbc
  • cbor
  • csv
  • json
  • msgpack
  • native
  • protobuf
  • raw
  • xml

2. Schema Body​

schema (JsonObject)​

Unified schema model stored as JSON. Used for:

  • Avro
  • CBC (layout as JSON)
  • CBOR
  • CSV
  • JSON
  • MessagePack
  • Native types
  • Protobuf
  • XML

schemaBase64​

Used for binary/external canonical schema:

  • Protobuf .desc
  • CBC compiled layout
  • Any binary IDL

3. Lifecycle Metadata​

createdAt / modifiedAt​

Audit timestamps.

notBefore / expiresAfter​

Validity interval allowing timed schema activation/deprecation.


4. Labels (Metadata)​

matchExpression​

Regex determining which topics the schema applies to.

Example:

/sensors/temperature/.*

JSON-escaped:

"/demo(/[^/]+)+/power-generation/GEN[0-9]+"

uniqueId​

Stable external schema ID.

interface​

Describes the CoAP interface type for .well-known/core discovery.

Used to generate entries such as:

if="sensor"
if="telemetry"
if="config"

This is part of the CoRE Link Format model.

resource​

Describes the CoAP resource type for .well-known/core.

rt="device"
rt="battery"
rt="ship.subsystem.engine-room"
rt="aircraft.telemetry"

MAPS automatically includes this value in link-format discovery responses so CoAP clients can find typed resources.

source​

Where the schema originated:

  • protobuf
  • avro
  • json
  • manual
  • imported
  • iot-nano

comments​

Free-form notes.


5. Other Behaviour​

pack() / packAsBytes()​

Serialize SchemaConfig to JSON or bytes.

toMap()​

Deprecated legacy converter.

coerceNumber()​

Ensures correct numeric Java type (int/long/double).


6. How MAPS Uses SchemaConfig​

  1. Match schema via matchExpression.
  2. Load schema body (JSON or base64).
  3. Produce Typed Event.
  4. Process through filtering, transforms, statistics, conversions.

SchemaConfig is the core of MAPS schema operations.


CBC Representation Example

Below is a realistic CBC serialization of a SchemaConfig:

{
"cbcFormat": {
"messageKey": 0,
"fields": [
{
"name": "sensorId",
"type": "uint",
"size": 16,
"optional": false,
"fixed": true
},
{
"name": "temperatureC",
"type": "int",
"size": 12,
"optional": false,
"fixed": true
}
]
},
"versionId": "2f8b4235-343b-495f-952c-21855cf222e7",
"description": "Unit test schema for temperature readings",
"labels": {
"uniqueId": "cb063e73-e754-4a5b-9a41-2aaeef3a369c",
"comments": "Unit Tests",
"resource": "sensor",
"interface": "Temperature C",
"source": "tcp://localhost:1883/topic2"
},
"format": "cbc",
"schema": {
"messageKey": 0,
"fields": [
{
"name": "sensorId",
"type": "uint",
"size": 16
},
{
"name": "temperatureC",
"type": "int",
"size": 12
}
]
},
"notBefore": "2025-11-07T02:05:12.235223Z"
}