Showcase
A data viewer with no viewer to build
The usual data table ships three times: the data, the component
that renders it, and the wiring between them. SemText's
sem-table collapses that to the
markup: the authored <table>
is the contract — sort and filter are chrome the reading bundle adds,
and extraction returns the rows in authored order. A model reads the
same cells a human sorts.
The document
Render it: headers become sort buttons (an
aria-sort cycle), the filter box
narrows rows, and the sticky header survives the scroll.
data-value is an ordinary HTML
sort key on a plain cell, not vocabulary syntax.
data-viewer example
Render view: this block wires to the SemText runtime bundle in the full example viewer (port-reference lane) — the source beside it is the same file, byte for byte.
Why this works
-
No payload duplication: there is no JSON beside the table to go
stale — the
<table>is the only copy of the data. -
Extraction is in on it: the record comes back as
{caption, columns[], rows[]}in authored order — the one recorded exception, stamped so the order is stable under sorting. - With scripts off the table is an ordinary, valid HTML table — the data never depended on the bundle.
The full visualizer family —
sem-data-source,
sem-data-join,
sem-data-query — renders live on
/dataviz/
; each tag's contract is on
its reference page
.