Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
9c72960
The bs2: namespace retires: the component modes take their names from…
namedgraph Sep 7, 2026
b491d8a
The browser chrome sheds Bootstrap 2 for the design system: the page …
namedgraph Sep 7, 2026
be118d6
The label catalog resolves like the system ontologies do, fixing the …
namedgraph Sep 7, 2026
f1e64ec
The base edit form earns its keep as the inherited default under Link…
namedgraph Sep 7, 2026
fc36d43
Edit and Delete are document-scoped: they act on the graph a PUT or D…
namedgraph Sep 7, 2026
6e80fea
The map mode moves to OpenLayers over OSM tiles and the Google Maps d…
namedgraph Sep 7, 2026
d51d324
The read-mode property list survives multi-valued properties: one dt …
namedgraph Sep 7, 2026
3d7f9e8
Map mode goes full-bleed: a MapMode xhtml:Body override stamps body.m…
namedgraph Sep 7, 2026
da78b1c
The full-bleed map gets its height back: the base .content aligns its…
namedgraph Sep 7, 2026
584c3c5
The rdf:type/@rdf:resource value rule is the single type-pill emitter…
namedgraph Sep 8, 2026
1b69154
The form chrome gets its shared emitters: ac:FieldShell is the one wr…
namedgraph Sep 8, 2026
76a2478
The inline alert becomes one emitter: ac:Alert takes variant, icon an…
namedgraph Sep 8, 2026
206d540
The design tokens' lineage comment names the platform's legacy palett…
namedgraph Sep 8, 2026
0187cb4
The single type-pill rule gains a tunneled $link switch: linkless cal…
namedgraph Sep 8, 2026
dcc463b
imports/rdf.xsl declares the ac namespace its linkless branch referen…
namedgraph Sep 8, 2026
c14091e
The xhtml: mode namespace narrows to what its pun can honestly claim:…
namedgraph Sep 8, 2026
483e986
The object-position value controls come home to the Client layer, res…
namedgraph Sep 9, 2026
b09f5c5
Web-Client sheds everything LinkedDataHub-specific and becomes an hon…
namedgraph Sep 9, 2026
a9fc69b
The proxy's error branch re-serves RDF diagnostic bodies through cont…
namedgraph Sep 9, 2026
ebdc006
Two mode names catch up with the design system where the markup alrea…
namedgraph Sep 9, 2026
8e37295
The field shell grows the rest of its anatomy, and every Tag paints. …
namedgraph Sep 9, 2026
0ef9327
The shared layer gets a single spelling: common.xsl aggregates everyt…
namedgraph Sep 9, 2026
e5233ca
The page shell sheds the last Bootstrap 2 class names while keeping W…
namedgraph Sep 10, 2026
cf34be6
The core kit's vocabulary takes the design system's current prefix: 1…
namedgraph Sep 11, 2026
7da52da
The vendored core kit catches up with the design system after sitting…
namedgraph Sep 11, 2026
2b521dd
The vendored core kit picks up DataTable's return to table layout. su…
namedgraph Sep 11, 2026
5a9e1f1
surfaces.css re-vendors the kit's corner-radius comment, which gains …
namedgraph Sep 11, 2026
f5a44b6
The generic modules stop carrying vocabulary, and a dead ontology-tra…
namedgraph Sep 11, 2026
39223ef
Web-Client stops knowing about constraint violations, which it cannot…
namedgraph Sep 11, 2026
bc57cf2
SPIN and SHACL leave Web-Client entirely.
namedgraph Sep 11, 2026
7129c79
The client ontology drops two unused prefixes and spells AtomGraph.
namedgraph Sep 11, 2026
3614b55
Breadcrumbs and the document hierarchy leave Web-Client.
namedgraph Sep 11, 2026
d7cac46
The ldt: namespace leaves Web-Client's stylesheets and writer.
namedgraph Sep 11, 2026
a659748
The action bar states that its controls sit at the end of the row.
namedgraph Sep 11, 2026
7abb022
A constructor can declare a language-tagged literal.
namedgraph Sep 12, 2026
0e6767b
A failed response says why it failed, and the alert it says it in bec…
namedgraph Sep 13, 2026
6ff5904
Static files say what encoding they are written in
namedgraph Sep 13, 2026
302d83f
A statement's RDFa attributes come from one mode, and a description c…
namedgraph Sep 13, 2026
e4d58aa
Semantic markup carries the design system's dress on the element itself.
namedgraph Sep 14, 2026
01c31e6
An alert's body spaces its children once, not twice.
namedgraph Sep 14, 2026
2788328
Merge dry-xsl-accessors into develop
namedgraph Sep 14, 2026
28d7df4
A property list and a statement row collapse where they are narrow.
namedgraph Sep 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ Release workflow uses `release.sh` which runs `mvn release:clean release:prepare

### XSLT Rendering

Stylesheets live in `src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/`. The main entry points are:
Stylesheets live in `src/main/webapp/static/com/atomgraph/client/xsl/`. The main entry points are:
- `external-layout.xsl` — for external Linked Data (default in `web.xml`)
- `internal-layout.xsl` — for internal graph stores
- `layout.xsl` — Bootstrap 2.3.2 based, handles RDF-to-HTML transformation
- `layout.xsl` — handles RDF-to-HTML transformation, emitting the LinkedDataHub design system's `ac-*` primitives against the vendored kit in `static/com/atomgraph/client/css/`

XSLT extension functions in `writer/function/` (`Construct`, `ConstructForClass`, `UUID`) are registered in `Application.java` and callable from stylesheets.

Expand Down Expand Up @@ -70,3 +70,9 @@ Multi-stage build targeting Tomcat 10.1.4. The `entrypoint.sh` transforms `conte
- **AtomGraph Core 4.1.x** — shared infrastructure (DataManager base, StartupListener)
- **Jakarta Servlet 5.0 / Jersey** — JAX-RS implementation
- **Java 21**, packaged as `ROOT.war` for Tomcat

## XSLT Mode Namespaces

- `xhtml:` modes are childless element primitives: the mode's local name is the XHTML element it emits (`xhtml:Input`, `xhtml:Anchor`, `xhtml:Option`, `xhtml:Title`, `xhtml:Meta`, `xhtml:Script`) — one element, attributes as parameters, content at most a text label, no design-system classes baked in.
- Emitters with internal element structure are components and take `ac:` with the design system's component name (`ac:AppShell`, `ac:Head`, `ac:Stylesheets`, the `ac:ResultsTable*` family, `ac:PropertyListLabel`/`ac:PropertyListValue`, `ac:FieldShell`). Downstream consumers (LinkedDataHub) name their own components in their own namespace.
- The unnamed mode is the value leaf: mode-less `apply-templates` renders an object/literal via the default-mode value emitters.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Features

What AWC provides for users as out-of-the-box generic features:
* loading RDF data from remote Linked Data sources
* multilingual, responsive user interface built with Twitter Bootstrap (currently [2.3.2](https://getbootstrap.com/2.3.2/))
* multilingual, responsive user interface built on the [LinkedDataHub design system](https://github.com/AtomGraph/LinkedDataHub) — vendored design tokens and `ac-*` component primitives, no CSS framework
* multiple RDF rendering modes (currently item/list/table/map/graph/grid)
* RDF editing mode based on [RDF/POST](https://atomgraph.github.io/RDF-POST/) encoding
* SPARQL endpoint with interactive results
Expand Down Expand Up @@ -45,7 +45,7 @@ It accepts the following environment variables (that become webapp context param

Requires Java 21.

Run Web-Client with the [default XSLT stylesheet](https://github.com/AtomGraph/Web-Client/blob/master/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/layout.xsl) like this:
Run Web-Client with the [default XSLT stylesheet](https://github.com/AtomGraph/Web-Client/blob/master/src/main/webapp/static/com/atomgraph/client/xsl/layout.xsl) like this:

docker run -p 8080:8080 atomgraph/web-client

Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

<groupId>com.atomgraph</groupId>
<artifactId>client</artifactId>
<version>5.0.5-SNAPSHOT</version>
<version>6.0.0-SNAPSHOT</version>
<packaging>${packaging.type}</packaging>

<name>AtomGraph Web-Client</name>
Expand Down
10 changes: 6 additions & 4 deletions src/main/java/com/atomgraph/client/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,15 @@
import com.atomgraph.client.mapper.ClientErrorExceptionMapper;
import com.atomgraph.client.mapper.NotFoundExceptionMapper;
import com.atomgraph.client.mapper.RiotExceptionMapper;
import com.atomgraph.client.model.impl.ProxiedGraph;
import com.atomgraph.client.filter.request.ProxyRequestFilter;
import com.atomgraph.client.resource.Root;
import com.atomgraph.core.provider.QueryParamProvider;
import com.atomgraph.core.io.ResultSetProvider;
import com.atomgraph.core.io.UpdateRequestProvider;
import com.atomgraph.client.vocabulary.AC;
import com.atomgraph.client.writer.ModelXSLTWriter;
import com.atomgraph.client.writer.ResultSetXSLTWriter;
import com.atomgraph.client.writer.function.ConstructForClass;
import com.atomgraph.client.interceptor.RDFPostMediaTypeInterceptor;
import com.atomgraph.client.writer.function.UUID;
import com.atomgraph.core.client.GraphStoreClient;
import com.atomgraph.core.io.ModelProvider;
Expand Down Expand Up @@ -129,7 +130,6 @@ public Application(final MediaTypes mediaTypes, final Client client, final Integ
RDFWriterRegistry.register(Lang.RDFXML, RDFFormat.RDFXML_PLAIN);

xsltProc.registerExtensionFunction(new UUID());
xsltProc.registerExtensionFunction(new ConstructForClass(xsltProc, resolver.getRepository()));

try
{
Expand All @@ -150,9 +150,11 @@ public Application(final MediaTypes mediaTypes, final Client client, final Integ
@PostConstruct
public void init()
{
register(ProxiedGraph.class);
register(Root.class);
register(ProxyRequestFilter.class);
register(new HttpMethodOverrideFilter());

register(new RDFPostMediaTypeInterceptor()); // for application/x-www-form-urlencoded
register(new ModelProvider());
register(new ResultSetProvider());
register(new QueryParamProvider());
Expand Down
Loading