--fragmentparameter to CLI scripts that can be used to specify the fragment ID of the resource paired with the document (defaults to UUID)ENABLE_LINKED_DATA_PROXYenv parameter that allows disabling the Linked Data proxy/browser (enabled by default)
- Fixed double
On-Behalf-Ofheader value when both WebID and OIDC agent contexts were delegated - Fixed Linked Data proxy fallback to a local
DESCRIBEquery when the external URL does not dereference - Fixed IP address check in the setup script
- Jena upgraded to 4.5.0
- Fuseki Docker image upgraded to 4.5.0
- Saxon-JS upgraded to 2.4
key()lookups enabled in client-side XSLT as HTML page mutations do not break indexes anymore (fixed in 5036)
- Spanish UI localization
- Reconciliation of OIDC accounts with existing agents by email address
- Document tree widget
- New
/clearendpoint which is used to clear ontologies from memory - Second nginx port which has WebID client certificate authentication always enabled
--proxyparameter to CLI scripts
- CSV and RDF imports write data directly to the backend Graph Store
- Only namespace, signup, OAuth2 login, WebID profiles and public keys can be public in admin apps, nothing else (hardcoded in the admin authorization query)
- When graph URI not explicitly specified, the Graph Store always returns
201 Created(even if the graph existed) - Fuseki image upgraded to 4.3.2
- Interactivity to the graph SVG layout
- Notifications to the requesting agent when its access request is granted (requires email server)
- JSON-LD export option for documents
append-contentCLI script that appends content resources to documentcreate-fileCLI script automatically recognizes the MIME type of the file being uploaded- Linked Data browser functionality in graph layout mode
- Javadoc comments
- The setup script requirements relaxed to make it easier to run on MacOS
- Fixed CSV imports
- Linked Data browser now supports relative URIs
- Upgraded Java from 11 to 17
- A built-in HTTP API constraint does not allow
PUTon documents without the document description in request body - A built-in HTTP API constraint does not allow to
DELETEthe root document - A built-in HTTP API constraint does not allow to
DELETEorPUTthe the app owner's and secretary's WebID documents - Shell script interpreter line
- Dydra-specific code
- Ability to copy (fork) RDF data into the local dataspace
- Block-based content layout (
ldh:ContentListmode) and editor - Login with Google (OpenID Connect)
- Ability to load JSON-LD data from
<script>elements in HTML - Namespace endpoint, which is an in-memory SPARQL endpoint over the app's ontology
- The HTTP CRUD API is now Graph Store Protocol, not Linked Data Templates
- HTML documents are hydrated HTML fragments over AJAX
- XSLT stylesheets now load constraints and constructors using SPARQL over the namespace endpoint
- The URIs of ontology terms are not relative to the app's base URI anymore
- Additional assertions added to external ontology terms instead of subclassing them
- Every UI state generates a distinct URL which is loaded consistently on both server- and client-side
- Upgraded Jena to 4.3.2
- Upgraded Saxon-JS to 2.3
- Upgraded Fuseki, Varnish and nginx Docker images
- Linked Data Templates support (still supported by Processor)
- HTTP smoke tests for SPARQL endpoint and Graph Store
- HTTP test for RDF import without mapping query
add-data.shCLI script which POSTs RDF data to URLExceptionMapperconstructors with injection in order to align with Processor- An option to override request URI using the
?uri=URL param, implemented inApplicationFilter Dispatcheras the new "entrypoint" JAX-RS resource which routes betweenResourceBase(if app is not empty) andProxyResourceBase(if app is empty)- Missing XML namespace definitions to client-side XSLT stylesheets
$output-json-ldparameter inxhtml:Scripttemplate which outputs the RDF document as JSON-LD in the<script>element
select-labelledquery in the end-user dataset to include a default graph patternspin:queryproperty is now optional forapl:RDFImport- Entrypoint script logic to load agent metadata only when
$LOAD_DATASETSis true - Injecting
Optional<Application>,Optional<Service>,Optional<Ontology>instead ofApplication,Service,Ontology - Using
javax.inject.Provider<>for injection into providers that are not in the request scope - If no application matches request URI,
NotFoundExceptionis not thrown anymore --Optional.empty()is used as application instead - Auth filters skipped if the matched application is not an instance of
lapp:EndUserApplicationorlapp:AdminApplication - Simplified
ResourceBase::describeby removing the?uri=indirection logic
- Proxy injections from injection factory binders
- varnish-admin service that proxy-caches the fuseki-admin triplestore
purge_backend_cachefunction to the HTTP test runner script run.shpurge_backend_cachecalls to clear proxy caches before each HTTP scriptBackendInvalidationFilterresponse filter with backend proxy cache invalidation heuristics- Basic environment variable documentation to README
- Upgraded Processor and Web-Client to the latest versions
- Upgraded Saxon-JS to 2.1
- End-user and admin Services passed to import
Executorinstead ofDatasetAccessor - Defined HTTP method -> ACL mode mapping as the
AuthorizationFilter.ACCESS_MODESmap
- Unused Docker mounts from linkeddatahub service
ban()calls fromResourceBase-- now handled by theBackendInvalidationFilter
apl:baseUrias a static XSLT stylesheet param
bs2:PropertyControlXSLT mode can handle multiple RDF types on a resource- Replaced error alerts with inline HTML warning blocks
- Refactored
bs2:SignUptemplate to make it more extensible
ORDER BYinapl:ResultCountsmode in client.xsl
$request_baseparameter support in scripts allows to use a base URI for HTTP requests which is different from the RDF dataset base URI. Useful when multiple LDH instances on different domains or port numbers are backed by the same dataset. E.g. one with WebID-TLS auth enabled and the other without.- Dydra-specific
QuadStoreClientandGraphStoreClientwith support for asynchonous GSP requests
- Ontology classes that used to be in the
ns:namespace (${base}ns#) moved tonsds:(${base}ns/domain/system#) - Ontology classes that used to be in the
def:namespace (${base}def#) moved tonsdd:(${base}ns/domain/default#) pythonusages replaced withpython2in CLI scripts- Mounting only
ssl/owner/public.peminstead of the wholessl/ownerfolder which includes the private key
- Expensive join with the provenance graph from the
laclt:ConstructAgentItemquery. As a result,dct:createdvalue is not included in agent's description. - Unnecessary methods from the
ImportJava interface. Passing arguments directly toImportListenerinstead