Architecture and data flow
The framework is organized into six layers, each consuming only from layers below it:
graph TD
L6["Layer 6 — UI Components<br/>SemanticTable, EntityFinder, advanced components"]
L5["Layer 5 — Form Rendering<br/>SemanticJsonForm, GenericForm, JSON Forms renderers"]
L4["Layer 4 — Store Providers<br/>SPARQL, Oxigraph, REST, Prisma, in-memory"]
L3["Layer 3 — State Management<br/>React hooks, data mapping hooks"]
L2["Layer 2 — Schema → Query Translation<br/>sparql-schema, graph-traversal, db-impl packages"]
L1["Layer 1 — Foundation<br/>Core types, utils, JSON Schema utilities, JSON-LD utilities"]
L6 --> L5
L5 --> L4
L5 --> L3
L4 --> L3
L3 --> L2
L2 --> L1
Layers 1 and 2 are the server-safe core: no frontend dependencies, consumed by both browser applications and command-line tooling. Layers 3 and 4 introduce React and storage-specific code. Layers 5 and 6 are the user-facing surfaces.
The data flow for a typical read operation:
flowchart LR
A["JSON Schema<br/>definition"] --> B["sparql-schema<br/>translator"]
B --> C["SPARQL CONSTRUCT<br/>query"]
C --> D["RDF graph<br/>from store"]
D --> E["graph-traversal<br/>extractor"]
E --> F["Typed JSON<br/>object"]
F --> G["State hooks<br/>TanStack Query"]
G --> H["React<br/>component"]
Writes follow the inverse pipeline: form data is validated against the schema, transformed into RDF triples (or the equivalent for non-RDF stores), and committed via INSERT/DELETE operations.
See also
- Capabilities today — what each layer provides in product terms.
- LinkML as an authoring source for schemas — optional build-time generation of JSON Schema and companion artifacts feeding the same pipeline.
- Deployment scenarios — which layers matter in which deployments.
- Glossary — Browser/server symmetry, AbstractDatastore.