Backlinks
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.
| 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.
| 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.
| 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.
| 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() |