blob: f5f9fbee55fb687c5976215154e00af7ef7e6d49 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<title>Apache Jena - Migrating from Jena2 to Jena3</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/css/bootstrap.min.css" rel="stylesheet" media="screen">
<link href="/css/bootstrap-icons.css" rel="stylesheet" media="screen"><link rel="stylesheet" type="text/css" href="https://jena.apache.org/sass/jena.1b17c39a117e22b46db4c66f6395dc27c134a60377d87d2d5745b8600eb69722.css" integrity="sha256-GxfDmhF&#43;IrRttMZvY5XcJ8E0pgN32H0tV0W4YA62lyI=">
<link rel="shortcut icon" href="/images/favicon.ico" />
</head>
<body>
<nav class="navbar navbar-expand-lg bg-body-tertiary" role="navigation">
<div class="container">
<div class="navbar-header">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="/index.html">
<img class="logo-menu" src="/images/jena-logo/jena-logo-notext-small.png" alt="jena logo">Apache Jena</a>
</div>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li id="homepage" class="nav-item"><a class="nav-link" href="/index.html"><span class="bi-house"></span> Home</a></li>
<li id="download" class="nav-item"><a class="nav-link" href="/download/index.cgi"><span class="bi-download"></span> Download</a></li>
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-journal"></span> Learn <b class="caret"></b></a>
<ul class="dropdown-menu">
<li class="dropdown-header">Tutorials</li>
<li><a class="dropdown-item" href="/tutorials/index.html">Overview</a></li>
<li><a class="dropdown-item" href="/documentation/fuseki2/index.html">Fuseki Triplestore</a></li>
<li><a class="dropdown-item" href="/documentation/notes/index.html">How-To's</a></li>
<li><a class="dropdown-item" href="/documentation/query/manipulating_sparql_using_arq.html">Manipulating SPARQL using ARQ</a></li>
<li><a class="dropdown-item" href="/tutorials/rdf_api.html">RDF core API tutorial</a></li>
<li><a class="dropdown-item" href="/tutorials/sparql.html">SPARQL tutorial</a></li>
<li><a class="dropdown-item" href="/tutorials/using_jena_with_eclipse.html">Using Jena with Eclipse</a></li>
<li class="dropdown-divider"></li>
<li class="dropdown-header">References</li>
<li><a class="dropdown-item" href="/documentation/index.html">Overview</a></li>
<li><a class="dropdown-item" href="/documentation/query/index.html">ARQ (SPARQL)</a></li>
<li><a class="dropdown-item" href="/documentation/io/">RDF I/O</a></li>
<li><a class="dropdown-item" href="/documentation/assembler/index.html">Assembler</a></li>
<li><a class="dropdown-item" href="/documentation/tools/index.html">Command-line tools</a></li>
<li><a class="dropdown-item" href="/documentation/rdfs/">Data with RDFS Inferencing</a></li>
<li><a class="dropdown-item" href="/documentation/geosparql/index.html">GeoSPARQL</a></li>
<li><a class="dropdown-item" href="/documentation/inference/index.html">Inference API</a></li>
<li><a class="dropdown-item" href="/documentation/ontology/">Ontology API</a></li>
<li><a class="dropdown-item" href="/documentation/permissions/index.html">Permissions</a></li>
<li><a class="dropdown-item" href="/documentation/extras/querybuilder/index.html">Query Builder</a></li>
<li><a class="dropdown-item" href="/documentation/rdf/index.html">RDF API</a></li>
<li><a class="dropdown-item" href="/documentation/rdfconnection/">RDF Connection - SPARQL API</a></li>
<li><a class="dropdown-item" href="/documentation/rdfstar/index.html">RDF-star</a></li>
<li><a class="dropdown-item" href="/documentation/shacl/index.html">SHACL</a></li>
<li><a class="dropdown-item" href="/documentation/shex/index.html">ShEx</a></li>
<li><a class="dropdown-item" href="/documentation/tdb/index.html">TDB</a></li>
<li><a class="dropdown-item" href="/documentation/tdb2/index.html">TDB2</a></li>
<li><a class="dropdown-item" href="/documentation/query/text-query.html">Text Search</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-journal-code"></span> Javadoc <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="/documentation/javadoc.html">All Javadoc</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/arq/">ARQ</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/fuseki2/">Fuseki</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/geosparql/">GeoSPARQL</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/jena/">Jena Core</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/permissions/">Permissions</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/extras/querybuilder/">Query Builder</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/shacl/">SHACL</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/tdb/">TDB</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/text/">Text Search</a></li>
</ul>
</li>
</ul>
<form class="d-flex" role="search" action="/search" method="GET">
<div class="input-group">
<input class="form-control border-end-0 border m-0" type="search" name="q" id="search-query" placeholder="Search...." aria-label="Search" style="width: 10rem;">
<button class="btn btn-outline-secondary border-start-0 border" type="submit">
<i class="bi-search"></i>
</button>
</div>
</form>
<ul class="navbar-nav">
<li id="ask" class="nav-item"><a class="nav-link" href="/help_and_support/index.html" title="Ask"><span class="bi-patch-question"></span><span class="text-body d-none d-xxl-inline"> Ask</span></a></li>
<li class="nav-item dropdown">
<a href="#" title="Get involved" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-megaphone"></span><span class="text-body d-none d-xxl-inline"> Get involved </span><b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="/getting_involved/index.html">Contribute</a></li>
<li><a class="dropdown-item" href="/help_and_support/bugs_and_suggestions.html">Report a bug</a></li>
<li class="dropdown-divider"></li>
<li class="dropdown-header">Project</li>
<li><a class="dropdown-item" href="/about_jena/about.html">About Jena</a></li>
<li><a class="dropdown-item" href="/about_jena/architecture.html">Architecture</a></li>
<li><a class="dropdown-item" href="/about_jena/citing.html">Citing</a></li>
<li><a class="dropdown-item" href="/about_jena/team.html">Project team</a></li>
<li><a class="dropdown-item" href="/about_jena/contributions.html">Related projects</a></li>
<li><a class="dropdown-item" href="/about_jena/roadmap.html">Roadmap</a></li>
<li><a class="dropdown-item" href="/about_jena/security-advisories.html">Security Advisories</a></li>
<li class="dropdown-divider"></li>
<li class="dropdown-header">ASF</li>
<li><a class="dropdown-item" href="https://www.apache.org/">Apache Software Foundation</a></li>
<li><a class="dropdown-item" href="https://www.apache.org/foundation/sponsorship.html">Become a Sponsor</a></li>
<li><a class="dropdown-item" href="https://www.apache.org/licenses/LICENSE-2.0">License</a></li>
<li><a class="dropdown-item" href="https://www.apache.org/security/">Security</a></li>
<li><a class="dropdown-item" href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
</ul>
</li>
<li class="nav-item" id="edit"><a class="nav-link" href="https://github.com/apache/jena-site/edit/main/source/documentation/migrate_jena2_jena3.md" title="Edit this page on GitHub"><span class="bi-pencil-square"></span><span class="text-body d-none d-xxl-inline"> Edit this page</span></a></li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-12">
<div id="breadcrumbs">
<ol class="breadcrumb mt-4 p-2 bg-body-tertiary">
<li class="breadcrumb-item"><a href='/documentation'>DOCUMENTATION</a></li>
<li class="breadcrumb-item active">MIGRATE JENA2 JENA3</li>
</ol>
</div>
<h1 class="title">Migrating from Jena2 to Jena3</h1>
<main class="d-flex flex-xl-row flex-column">
<aside class="text-muted align-self-start mb-3 p-0 d-xl-none d-block">
<h2 class="h6 sticky-top m-0 p-2 bg-body-tertiary">On this page</h2>
<nav id="TableOfContents">
<ul>
<li><a href="#key-changes">Key Changes</a></li>
<li><a href="#packaging">Package Name Changes</a>
<ul>
<li><a href="#vocabularies-unchanged">Vocabularies unchanged</a></li>
<li><a href="#assemblers">Assemblers</a></li>
<li><a href="#logging">Logging</a></li>
</ul>
</li>
<li><a href="#rdf-11">RDF 1.1</a>
<ul>
<li><a href="#rdf11-plain-literals">RDF 1.1 changes for plain literals</a></li>
</ul>
</li>
<li><a href="#persistent-data">Persistent Data</a></li>
<li><a href="#permissions-changes">Security package renamed to Permissions</a></li>
<li><a href="#other">Other</a></li>
</ul>
</nav>
</aside>
<article class="flex-column me-lg-4">
<p>Apache Jena3 is a major version release for Jena - it is not binary compatible with
Jena2. The migration consists of package renaming and database reloading.</p>
<h2 id="key-changes">Key Changes</h2>
<ul>
<li><a href="#packaging">Package renaming</a></li>
<li><a href="#rdf11-plain-literals">RDF 1.1 Semantics for plain literals</a></li>
<li><a href="#persistent-data">Persistent data (TDB, SDB) should be reloaded.</a></li>
<li>Java8 is required.</li>
<li><a href="#permissions-changes">Security renamed to Permissions. Security Evaluator changes required</a></li>
</ul>
<h2 id="packaging">Package Name Changes</h2>
<p>Packages with a base name of <code>com.hp.hpl.jena</code> become <code>org.apache.jena</code>.</p>
<p>Global replacement of <code>import com.hp.hpl.jena.</code> with <code>import org.apache.jena.</code> will cover the majority of cases.</p>
<p>The Jena APIs remain unchanged expect for this renaming.</p>
<h3 id="vocabularies-unchanged">Vocabularies unchanged</h3>
<p>Only java package names are being changed. Vocabularies are not affected.</p>
<h3 id="assemblers">Assemblers</h3>
<p>Migration support is provided by mapping <code>ja:loadClass</code> names beginning
<code>com.hp.hpl.jena</code> internally to <code>org.apache.jena</code>. A warning is logged.</p>
<h3 id="logging">Logging</h3>
<p>This will also affect logging: logger names reflect the java class naming
so loggers for <code>com.hp.hpl.jena</code> become <code>org.apache.jena</code></p>
<h2 id="rdf-11">RDF 1.1</h2>
<p>Many of the changes and refinements for RDF 1.1 are already in Jena2. The
parsers for Turtle-family languages already follow the RDF 1.1 grammars
and output is compatible with RDF 1.1 as well as earlier output details.</p>
<h3 id="rdf11-plain-literals">RDF 1.1 changes for plain literals</h3>
<p>In RDF 1.1, all literals have a datatype. The datatype of a plain
literal with no language tag (also called a &ldquo;simple literal&rdquo;) has datatype
<code>xsd:string</code>. A plain literal with a language tag has datatype
<code>rdf:langString</code>.</p>
<p>Consequences:</p>
<p><code>&quot;abc&quot;</code> and <code>&quot;abc&quot;^^xsd:string</code> are the same RDF term in RDF 1.1. Jena2
memory models have always treated these as the same value, but different
terms. Jena2 persistent models treated them as two separate term and two
separate values.</p>
<p>Data is not invalidated by this change.</p>
<ul>
<li>
<p>The parsers will give datatypes to all data read, there is no need to
change the data.</p>
</li>
<li>
<p>Output is in the datatype-less form (an abbreviated syntax) even in
N-triples.</p>
</li>
<li>
<p>Applications which explicitly use <code>^^xsd:string</code> (or in RDF/XML,
<code>rdf:datatype=&quot;http://www.w3.org/2001/XMLSchema#string&quot;</code>) will see a change
in appearance.</p>
</li>
<li>
<p>Applications with a mix of plain literals and explicit <code>^^xsd:string</code>
(the RDF 1.1 Work Group believed these to be uncommon) may see changes.</p>
</li>
<li>
<p>Applications that do their own RDF output need to be careful to not assume
that having datatype excludes the possibility of also having a language tag.</p>
</li>
</ul>
<h2 id="persistent-data">Persistent Data</h2>
<p>For data stored in <a href="tdb/">TDB</a> and <a href="sdb/">SDB</a>, it is advisable to reload data.</p>
<p>Data that does not use explicit <code>xsd:string</code> should be safe but it is still
recommended that data is reloaded at a convenient time.</p>
<p>Data that does use explicit <code>xsd:string</code> must be reloaded.</p>
<h2 id="permissions-changes">Security package renamed to Permissions</h2>
<p>Jena Security has been renamed Jena Permissions and the Maven
<em>artifact id</em> has been changed to <em>jena-permissions</em> to reflect this change.</p>
<p>Shim code that was introduced to map Jena classes to security classes
has been removed. This change requires changes to <code>SecurityEvaluator</code>
implementations. More details are available at the
<a href="permissions/migration2To3.html">Permissions
migration documentation</a>.</p>
<h2 id="other">Other</h2>
<ul>
<li><code>GraphStore</code> interface has been removed</li>
<li><code>ModelFactory.createFileModelMaker</code> has been removed</li>
<li><code>LateBindingIterator</code> has been removed: use <code>LazyIterator</code> instead</li>
<li><code>EarlyBindingIterator</code> has been removed: no replacement</li>
<li><code>UniqueExtendedIterator</code> has been removed: use <code>ExtendedIterator</code> with unique filter</li>
</ul>
</article>
<aside class="text-muted align-self-start mb-3 mb-xl-5 p-0 d-none d-xl-flex flex-column sticky-top">
<h2 class="h6 sticky-top m-0 p-2 bg-body-tertiary">On this page</h2>
<nav id="TableOfContents">
<ul>
<li><a href="#key-changes">Key Changes</a></li>
<li><a href="#packaging">Package Name Changes</a>
<ul>
<li><a href="#vocabularies-unchanged">Vocabularies unchanged</a></li>
<li><a href="#assemblers">Assemblers</a></li>
<li><a href="#logging">Logging</a></li>
</ul>
</li>
<li><a href="#rdf-11">RDF 1.1</a>
<ul>
<li><a href="#rdf11-plain-literals">RDF 1.1 changes for plain literals</a></li>
</ul>
</li>
<li><a href="#persistent-data">Persistent Data</a></li>
<li><a href="#permissions-changes">Security package renamed to Permissions</a></li>
<li><a href="#other">Other</a></li>
</ul>
</nav>
</aside>
</main>
</div>
</div>
</div>
<footer class="bd-footer py-4 py-md-5 mt-4 mt-lg-5 bg-body-tertiary">
<div class="container" style="font-size:80%" >
<p>
Copyright &copy; 2011&ndash;2024 The Apache Software Foundation, Licensed under the
<a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
</p>
<p>
Apache Jena, Jena, the Apache Jena project logo, Apache and the Apache feather logos are trademarks of
The Apache Software Foundation.
<br/>
<a href="https://privacy.apache.org/policies/privacy-policy-public.html"
>Apache Software Foundation Privacy Policy</a>.
</p>
</div>
</footer>
<script src="/js/popper.min.js.js" type="text/javascript"></script>
<script src="/js/bootstrap.min.js" type="text/javascript"></script>
<script src="/js/improve.js" type="text/javascript"></script>
<script type="text/javascript">
(function() {
'use strict'
const links = document.querySelectorAll(`a[href="${window.location.pathname}"]`)
if (links !== undefined && links !== null) {
for (const link of links) {
link.classList.add('active')
let parentElement = link.parentElement
let count = 0
const levelsLimit = 4
while (['UL', 'LI'].includes(parentElement.tagName) && count <= levelsLimit) {
if (parentElement.tagName === 'LI') {
parentElement.querySelector('a:first-child').classList.add('active')
}
parentElement = parentElement.parentElement
count++
}
}
}
})()
</script>
</body>
</html>