Skip to main content

6.0.0

RDF4J 6.0.0 is a major release of the Eclipse RDF4J framework. It adds broad RDF 1.2 and SPARQL 1.2 support, moves the project to Java 25 and Jakarta, replaces the public Apache HttpClient 4 integration, and includes improvements to LMDB, FedX, query execution, security and deployment. The 6.0.0 milestone contains 46 completed issues.

Highlights

  • RDF 1.2 triple terms, literals with base direction, version announcements and updated RDF formats across the model, Rio, protocols and stores.
  • SPARQL 1.2 grammar and evaluation.
  • Correlated queries with LATERAL, implemented separately from SPARQL 1.2.
  • Java 25, Jakarta Servlet, Spring 7, Jetty 12, Tomcat 11, Lucene 10, Elasticsearch 9 and Jackson 3.
  • A client-neutral HTTP API with Apache HttpComponents 5 and JDK backends, plus Server HTTP support for gzip, deflate, Brotli and Zstandard compression.
  • LMDB value-ID, regular-import, reader-recovery and cardinality-estimation improvements.
  • FedX grouped source selection and initial RDF 1.2 query support.
  • Query circuit breakers, slow-query logging and additional query-planning work.
  • Hardened XML processing and broad dependency-security updates.

For a complete overview, see all issues completed for 6.0.0.

Upgrade notes

Java 25, Jakarta and application servers

Java 25 is the minimum supported Java version (GH-5643). RDF4J Server and Workbench have moved from javax.servlet to Jakarta Servlet APIs (GH-3559). The associated platform upgrade includes Spring 7, Jetty 12 EE11 and Tomcat 11.

Applications embedding Server or Workbench, supplying servlet filters, or deploying RDF4J into an application server must update javax.* imports and use a compatible Jakarta runtime. The supplied Docker configurations now use Java 25 with Jetty 12 or Tomcat 11 (GH-5801).

Other major dependency changes include Lucene 10, adoption of Jackson 3 in core areas (GH-5744) and the Elasticsearch 9 Java client (GH-4776). Jackson 2 remains in a limited set of compatibility and integration paths. Applications using implementation-specific APIs from these libraries should be tested and migrated separately.

HTTP client API

RDF4J no longer exposes Apache HttpClient 4 types through its public HTTP APIs (GH-5723). The new rdf4j-http-client-api module defines a client-neutral facade, immutable configuration and a ServiceLoader-based backend SPI.

Two implementations are included:

  • Apache HttpComponents 5 in rdf4j-http-client-apache5, selected by default when present.
  • The JDK java.net.http.HttpClient in rdf4j-http-client-jdk.

Ordinary HTTPRepository use does not require selecting or constructing a client explicitly. Code that supplied a custom Apache HttpClient 4 instance through HttpClientDependent or HttpClientSessionManager must migrate to RDF4JHttpClient, RDF4JHttpClientConfig and the new authentication APIs.

RDF-star and RDF 1.2 API names

The model and format APIs now use RDF 1.2 triple-term terminology. Code using RDF-star-specific Triple types, parser or writer names, or result-format constants must migrate to the corresponding TripleTerm and RDF/SPARQL 1.2 APIs. Legacy RDF-star-specific result formats have been replaced by the standard RDF/SPARQL 1.2 formats.

The RDF 1.2 reification conversion helper has also been renamed to convertRDF12ToStandardReification to describe its behavior more accurately (GH-5865).

Removed and changed integrations

  • Solr Sail and its associated modules have been removed after being deprecated in RDF4J 5.3 (GH-5631).
  • Deprecated FedX evaluation and join classes have been removed as FedX moves to a unified evaluation strategy.
  • The identifier produced by BNODE("label") now uses the supplied label as its prefix while retaining solution- and invocation-specific disambiguation (GH-5909). Applications must not depend on the former fixed bnode_ prefix.

RDF 1.2 and SPARQL 1.2

RDF4J 6.0.0 adds broad support for the current RDF 1.2 and SPARQL 1.2 specifications (GH-5327). The implementation includes the emerging W3C conformance suites and covers the model, parsers, writers, query algebra, evaluation, result serialization, HTTP protocols and storage layers.

RDF 1.2

  • Triple terms are represented as first-class model values and supported in object position across the relevant RDF formats and stores.
  • Literals can retain both a language tag and base direction.
  • Parsers and writers support RDF version announcements.
  • Turtle, TriG, N-Triples, N-Quads, RDF/JSON and RDF/XML have been updated for RDF 1.2 syntax and semantics.
  • RDF/XML parsers and writers now support RDF 1.2 triple terms, base direction and version announcements (GH-5878).
  • Turtle, TriG and N3 writers can optionally emit SPARQL-style PREFIX, BASE and VERSION directives instead of the legacy @prefix, @base and @version forms (GH-5852).
  • MemoryStore, NativeStore and LMDBStore persist and query the new RDF 1.2 value kinds.

SPARQL 1.2

The SPARQL parser, algebra, evaluator and renderer have been updated for SPARQL 1.2 syntax and semantics. This includes triple-term query patterns, additional built-in functions and updated result handling.

The generated SPARQL parser has also been simplified to reduce expensive bounded lookahead paths and the amount of patched generated code (GH-5856).

LATERAL queries

Separately from the SPARQL 1.2 work, RDF4J 6.0.0 adds support for LATERAL correlated queries across parsing, algebra, evaluation, rendering and optimizer handling (GH-4315). LATERAL is not part of SPARQL 1.2.

Storage engines

LMDBStore

LMDB values now use an extensible identifier layout with a one-bit inline-double marker and a six-bit type field (GH-4950). Ordinary payloads are shifted by seven bits, while inlined integer values are limited to 56 bits. Common booleans, numbers, dates and short strings can be encoded directly in the identifier instead of always requiring a separate dictionary lookup (GH-4774). The layout also supports RDF 1.2 triple terms.

The normal RDF import path now uses more efficient write batching and cursor reuse, with additional import telemetry. This is an optimization of regular repository imports, not a separate offline bulk loader or deferred index-building facility.

Further LMDB changes include:

  • Persistence of RDF 1.2 triple terms and base-direction-aware literals (GH-3723).
  • Recovery from exhausted or stale LMDB readers without discarding active transactions.
  • A page-walking cardinality estimator that reads LMDB index pages directly (GH-5686).
  • Sketch-based statistics and join-planning infrastructure.

Sketch-based LMDB planning is disabled by default while the estimator and planner continue to be tested and refined (GH-5868). It must be enabled explicitly.

NativeStore

NativeStore now persists RDF 1.2 triple terms and base-direction-aware literals through restart and write-ahead-log recovery. The release also restores and hardens transaction-status and concurrency behavior after regressions found during 6.0 verification (GH-5876). Memory-mapped transaction status remains an explicit opt-in.

HTTP, protocols and federation

RDF4J Server HTTP requests and responses can use gzip, deflate, Brotli and Zstandard compression (GH-5919). Its servlet filter performs response content negotiation and request decompression, including compressed RDF detection. Workbench reuses the shared Rio compression detection for uploaded RDF and negotiates gzip for query-result downloads.

Query maximum-execution-time settings are also applied as client-side response timeouts by the JDK and Apache HttpComponents 5 backends. The Apache backend exposes request construction to subclasses that need to capture and cancel active requests.

FedX source selection can group remote checks by endpoint (GH-5813). Rather than issuing one ASK for every statement-pattern and endpoint pair, it can use grouped SELECT queries with BIND(EXISTS { ... }). Grouped source selection is enabled by default and can be disabled with FedXConfig#withEnableGroupedSourceSelection(false).

FedX also includes:

  • Initial RDF 1.2 triple-term query support (GH-5870).
  • A unified federation evaluation strategy and removal of deprecated execution paths.
  • Sail-compatible exception handling for connection and write failures.
  • An extension point for propagating application context through federated worker threads.

Query evaluation and operations

Query planning

The release contains new sketch-based, unified and Cascades-style planning work (GH-5720), together with runtime telemetry and plan-comparison tooling. This work includes the LMDB page-walking estimator and a Pareto-aware join-planning memo. Experimental planning components are not enabled by default unless explicitly documented by their configuration.

The standard evaluation pipeline also received fixes and optimizations for joins, filters, DISTINCT, ordering and left joins. In particular, optimizer ordering was corrected for a BIND and filter-scope regression (GH-5860).

Query circuit breakers

RDF4J Server and Workbench can monitor JVM memory pressure while a query is executing (GH-5809). When pressure becomes unsafe, the circuit-breaker infrastructure can reject or interrupt work in memory-intensive operators including DISTINCT, GROUP BY and ORDER BY, and release the associated query resources.

Slow-query logging

Sail-backed repositories can log queries that exceed a configurable threshold before producing their first result (GH-5819). The timing context is propagated through Sail evaluation so the log can report the query and time to first result.

Custom aggregates

The custom aggregate SPI now supports n-ary aggregate operators, including arity validation, tuple-level DISTINCT handling and evaluation through GroupIterator (PR-5715).

Security and deployment

XML processing has been hardened across transaction XML, RDF/XML, TriX and SPARQL XML results (GH-5824). DOCTYPE declarations, external entities and external DTDs are rejected by default. Workbench server selection also rejects unsafe URL, file and path-prefix probes before attempting a connection.

The release includes a broad dependency-security update (GH-5917). The OSV scan used during the release work went from 101 recorded findings to zero across the 556 scanned dependency coordinates at that time.

Docker configurations and end-to-end tests have been updated for Ubuntu Noble, Java 25, Jetty 12 EE11 and Tomcat 11. Local Server and Workbench testing and Docker Compose workflows are documented in the repository.

Vocabularies

RDF4J now includes additional EU data, annotation and bibliographic vocabularies: ADMS, CPSV, the SEMIC Core Vocabularies (CV), ELI, CiteDCAT-AP, DCAT-AP HVD, GeoDCAT-AP, HealthDCAT-AP, MobilityDCAT-AP, ActivityStreams 2.0 (AS), OA, DQV, DUV, BIBO, CiTO, FRBR and FaBiO (GH-5709). The PROV-O vocabulary also exposes the inverse properties suggested by PROV-O (GH-5706).

Acknowledgements

This release was made possible by contributions from Andreas Schwarte, Bart Hanssens, Dancho Ivanov, Desislava Hristova, Håvard M. Ottestad, Ken Wenzel, Mohammad Alreeni, Ralitsa Dimitrova, Sarah Grand, and Sava Savov.

We also thank Ontotext, Bloomberg, Fraunhofer, and metaphacts for their support, and the Sovereign Tech Fund for funding parts of this work.

Back to the top