7. Example Manifests
Manifests describe what a SpatialDDS node or dataset provides: capabilities, coverage, and assets. They are small JSON documents discoverable via the same bus or HTTP endpoints.
Structure Overview
| Field | Purpose |
|---|---|
id |
Unique manifest identifier (UUID or URI) |
profile |
Manifest schema name and version (e.g., spatial.manifest@1.4) |
caps |
Supported profiles, features, and capabilities |
coverage |
Spatial or temporal extent of data |
assets |
Referenced content (tiles, descriptors, etc.) |
Example Manifest (minimal)
{
"id": "manifest-001",
"profile": "spatial.manifest@1.4",
"caps": {
"supported_profiles": [
{ "name": "core", "major": 1, "min_minor": 0, "max_minor": 3 }
],
"features": ["lidar.range", "radar.tensor"]
},
"coverage": {
"frame_ref": { "fqn": "earth-fixed", "uuid": "ae6f0a3e-7a3e-4b1e-9b1f-0e9f1b7c1a10" },
"has_bbox": true,
"bbox": [-122.420, 37.790, -122.410, 37.800],
"geohash": ["9q8y"],
"elements": [{
"type": "volume",
"has_bbox": false,
"has_aabb": true,
"aabb": { "min": [-122.420, 37.790, -10], "max": [-122.410, 37.800, 100] },
"global": false
}],
"global": false
},
"assets": [{
"kind": "features:ORB:v1",
"uri": "https://example.org/descriptors/1",
"mime": "application/x-array",
"hash": "sha256:0000000000000000000000000000000000000000000000000000000000000000"
}]
}
Field Notes
- Capabilities (
caps) — declares supported profiles and feature flags. Peers use this to negotiate versions. - Coverage (
coverage) — uses explicit presence flags. Whenhas_bboxistrue,bboxis authoritative; whenfalse, omit it from coverage calculations. All shapes share the canonicalframe_refdeclared on the coverage record; producers MUST transform element geometry into this frame ahead of publication. Elements use their ownhas_bbox/has_aabbflags to gate coordinates. Producers MAY also provide geohashes or detailedelements. Setglobal = truefor worldwide coverage. - Frame identity. The
uuidfield is authoritative;fqnis a human-readable alias. Consumers SHOULD match frames by UUID and MAY showfqnin logs or UIs. - Assets (
assets) — URIs referencing external content. Each has akind,uri, and optionalmimeandhash. - All orientation fields use canonical GeoPose order
(x, y, z, w); older forms likeq_wxyzare removed.
Practical Guidance
- Keep manifests small and cacheable; they are for discovery, not bulk metadata.
- When multiple frames exist, use one manifest per frame for clarity.
- Use HTTPS, DDS, or file URIs interchangeably — the
urischeme is transport-agnostic. - Assets should prefer registered MIME types for interoperability.
Summary
Manifests give every SpatialDDS resource a compact, self-describing identity. They express what exists, where it is, and how to reach it — without version-negotiation clutter or legacy fields.
Coverage Semantics (Normative)
coverage.frame_refis canonical.bbox,aabb, and everyCoverageElementgeometry SHALL be expressed in this frame. Per-element frames are not permitted.- When
coverage_eval_timeis present, consumers SHALL evaluate any supplied transforms at that instant before interpretingcoverage.frame_ref. global == truemeans worldwide coverage regardless of any regional hints. Producers MAY omitbbox,geohash, orelementsin that case.- When
global == false, producers MAY supply any combination ofbbox,geohash, andelements. Consumers SHOULD treat the union of all provided regions as the effective coverage. - Presence flags govern coordinate validity. When a flag is
false, consumers MUST ignore the associated coordinates.NaNhas no special meaning in any coverage coordinate; non-finite values MUST be rejected.
Validation Guidance (Non-normative)
- Reject
has_bbox == trueorhas_aabb == truewhen any coordinate is non-finite (NaN/Inf). - Enforce axis ordering:
west ≤ east,south ≤ north, and for AABBs ensuremin ≤ maxper axis. - When
global == true, consumers MAY ignore conflicting regional hints and treat coverage as worldwide.