What 6.0.0 changes for an application stylesheet, a deployment and an API client

There is no data migration. An existing deployment re-seeds: its dataspace descriptions and every document in its stores are typed in namespaces this release no longer reads.

Stylesheets

The platform stylesheet is xsl/layout.xsl. An xsl:import of xsl/bootstrap/2.3.2/layout.xsl fails to compile, which is the first error an application stylesheet hits.

Class vocabulary

Legacy Bootstrap buttons (btn, btn-primary, btn-large) become the ac-btn intent, appearance and size vocabulary: ac-btn in-primary ap-solid sz-md. The stylesheets page lists the axes and the classes on each.

pull-left and pull-right have no replacement, because the design system lays out with flex and grid. A stylesheet that extends the removed vocabulary can be diffed against ldh.css, the one app layer LinkedDataHub loads over the vendored design kits.

Template modes

Every bs2: mode takes its design-system component name. This is the change that makes the release a major one: an override of a bs2: mode still compiles, never fires, and reports nothing.

Template modes renamed in 6.0.0
5.x 6.0.0
bs2:Row ldh:BlockRow
bs2:Header ac:BlockHeader
bs2:PropertyList ac:PropertyEditor
bs2:Form ac:ResourceForm
bs2:NavBar ac:Header
bs2:Lookup ldh:Combobox
ac:ModeList ac:ModeSwitcher
ldh:LeftSidebar ldh:DataspaceDrawer

Parameters and functions

The $ac:langs and $ac:lang parameters become the ac:langs() and ac:langs()[1] functions. An xsl:with-param left behind is silently ignored. A stylesheet still declaring xmlns:lapp compiles and silently binds nothing.

Stylesheet parameters and functions renamed in 6.0.0
5.x 6.0.0
$lapp:origin $lds:origin
$lapp:Context $lds:Context
lapp:origin() lds:origin()
lapp:base() lds:base()
lapp:application-description() lds:dataspace-description()
ldt:base() lds:base()
$ldt:base removed

Removed libraries

Overrides depending on bootstrap.js, jQuery, WYMEditor or the sprite icons need rewriting. IXSL templates drive the dropdowns and modals, the msi font draws the icons, and the RDFa editor edits rdf:XMLLiteral content.

Namespaces

Every namespace LinkedDataHub defines now lives under https://w3id.org/atomgraph/linkeddatahub. Stylesheets and stored data are both affected.

Namespace URIs in 5.x and 6.0.0
Prefix 5.x 6.0.0
dh: https://www.w3.org/ns/ldt/document-hierarchy# https://w3id.org/atomgraph/linkeddatahub/document-hierarchy#
lapp: becomes lds: https://w3id.org/atomgraph/linkeddatahub/apps# https://w3id.org/atomgraph/linkeddatahub/dataspaces#
ldt: https://www.w3.org/ns/ldt removed
ct:, c: sibling namespaces of ldt: removed

The dh: prefix, its class names and DH.java are unchanged, but every dh:Container and dh:Item already in a triplestore is typed in the old namespace.

The dataspace classes are renamed with the prefix: lapp:Application becomes lds:Dataspace, lapp:EndUserApplication becomes lds:EndUserDataspace, lapp:AdminApplication becomes lds:AdminDataspace, and the three constructor individuals follow. The lapp:applicationLink relation that names the dataspace a response belongs to becomes lds:dataspace. lapp:Dataset, lapp:Package and the remaining properties keep their local names under the new prefix, and lds:prefix and lds:versioningRepository — used in configuration and read in Java, but never declared — are now declared.

ldt:ontology, ldt:service and ldt:base become lds:ontology, lds:service and lds:base, and the ldt#ontology and ldt#baseLink relations with them, so config/dataspaces.trig and config/system.trig each need one prefix where they needed two. The Java LDT vocabulary, the bundled ldt.ttl and the rdfs:subClassOf ldt:Application on the dataspace class are gone, and lacl:requestAccess now ranges over foaf:Document.

lapp:frontendProxy is removed with no replacement under the new prefix, having been read by nothing. The frontend (Varnish) proxy used for cache-invalidation requests comes from the ldhc:frontendProxy servlet parameter, set from FRONTEND_PROXY by platform/entrypoint.sh. lds:backendProxy stays, since a proxied lds:Dataset is read through it.

Deployment

Triplestore

One fuseki service replaces fuseki-admin and fuseki-end-user, holding an end-user and an admin TDB2 dataset per dataspace, declared in config/fuseki/config.ttl and persisted under fuseki/<dataset>/. Datasets are named after the dataspace origin with the deployment host dropped and the role appended: end-user, admin, northwind-traders.demo.end-user.

An existing deployment moves its two TDB2 directories under the new dataset names, points every lds:service in config/system.trig at http://fuseki:3030/<dataset>/, and merges the two stores heap settings and mem_limit. varnish-admin and varnish-end-user stay as they were. The triplestores page describes the resulting layout.

Client-side package composition

Composing package stylesheets into the client SEF needs the new sef-compiler service. A deployment with its own compose file adds it, the platform service's depends_on on it, and the ./sef bind mount at /var/www/linkeddatahub/sef. SEF_ROOT and SEF_COMPILER are optional: without them, packages compose server-side only, as in 5.10.0.

CLIENT_STYLESHEET names the client stylesheet the SEF is composed from, and defaults to the platform's client.xsl. A deployment bootstrapping its own sets it to that stylesheet's webapp path. Such a stylesheet must import the platform's client.xsl directly, and its layout prefers ldh:client-stylesheet() over its own SEF.

Package directory

A deployment with its own compose file adds the ./packages bind mount at /var/www/linkeddatahub/packages (PACKAGE_ROOT), where copies of imported package stylesheets survive a redeploy.

OAuth grants

The oauth2-login and oauth2-authorize grants move from the administration store to the end-user application's namespace-ontology.trig.template, as acl:accessTo on the login and callback URLs. An existing deployment re-seeds or migrates them.

Packages

A package stylesheet is composed right after hooks.xsl. It can specialise an open mode — ldh:RowHook, the tree node, the value leaves in imports/values.xsl — and no longer replaces a sealed mode, a typed rule or a global.

A package ontology imported before this release is materialized under admin/ontologies/ on the next request, and is edited there from then on. A later change to the published package reaches the application only after that document is deleted.

HTTP API

A write to a document that already exists must be conditional: If-Match with the document's current ETag, or If-None-Match: * to create. An unconditional write is answered 428 Precondition Required.

A client that wrote unconditionally now reads the tag first, as the ldh CLI does for you. An entity tag identifies a negotiated variant, so the read supplying the validator must send the same Accept as the write quoting it, or the write is refused 412. The HTTP API page has the request shapes.

The access control query fails closed on a typeless resource, so a request for a URL that does not exist is answered 403 rather than 404 unless the agent is the owner.

ldh:container leaves the ontology, the ldh:ViewConstructor form and the view query. A view's Create button determines the container from the view's own solutions.

Java API

Server-side extensions move with the model. The names below changed together; nothing else in the API did.

Java packages, classes and accessors renamed in 6.0.0
5.x 6.0.0
com.atomgraph.linkeddatahub.apps com.atomgraph.linkeddatahub.dataspaces
Application, AdminApplication, EndUserApplication Dataspace, AdminDataspace, EndUserDataspace
LAPP LDS
getApplication(), getAdminApplication(), getEndUserApplication() getDataspace(), getAdminDataspace(), getEndUserDataspace()