blob: abcf5996ba851dbdef395664b609de31589c7a55 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<title>Apache Jena - Schemagen Maven</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/tools/schemagen-maven.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"><a href='/documentation/tools'>TOOLS</a></li>
<li class="breadcrumb-item active">SCHEMAGEN MAVEN</li>
</ol>
</div>
<h1 class="title">Schemagen Maven</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="#pre-requisites">Pre-requisites</a></li>
<li><a href="#installing">Installing</a></li>
<li><a href="#configuration-basic-principles">Configuration: basic principles</a>
<ul>
<li><a href="#specifying-files-to-process">Specifying files to process</a></li>
<li><a href="#specifying-processing-options">Specifying processing options</a></li>
</ul>
</li>
<li><a href="#example-configuration">Example configuration</a></li>
</ul>
</nav>
</aside>
<article class="flex-column me-lg-4">
<h1 id="schemagen-maven-generating-java-source-files-from-owl-and-rdfs-ontologies-via-maven">Schemagen-maven: generating Java source files from OWL and RDFS ontologies via Maven</h1>
<p>The <a href="/">Apache Jena</a> command line tool
<a href="/documentation/tools/schemagen.html"><code>schemagen</code></a>
provides an automated way of creating
Java source code constants from ontology files in an RDF-based project. This
can be very convenient, as it provides both a level of robustness that the
names of RDF classes, properties and individuals are being used correctly, and
it can be used by IDE&rsquo;s such as Eclipse to provide name-completion for
constants from the ontology.</p>
<p>For some projects, invoking <code>schemagen</code> from the command line, perhaps via <code>ant</code>,
is sufficient. For projects organised around Apache Maven, it would be convenient to integrate
the schemagen translation step into Maven&rsquo;s normal build process. This plugin
provides a means to do just that.</p>
<h2 id="pre-requisites">Pre-requisites</h2>
<p>This plugin adds a step to the Maven build process to automatically translate RDFS
and OWL files, encoded as RDF/XML, Turtle or N-triples into Java source files.
This plugin is designed to be used with a Java project that is already using Apache Maven to
control the build. Non-Java projects do not need this tool. Projects that are
not using Maven should see the <a href="schemagen.html">schemagen documentation</a>
for ways to run <code>schemagen</code> from the command line.</p>
<h2 id="installing">Installing</h2>
<p>Schemagen is available from the maven central repository. To use it, add
the following dependency to your <code>pom.xml</code>:</p>
<pre><code>&lt;build&gt;
&lt;plugins&gt;
&lt;plugin&gt;
&lt;groupId&gt;org.apache.jena&lt;/groupId&gt;
&lt;artifactId&gt;jena-maven-tools&lt;/artifactId&gt;
&lt;version&gt;x.y.z&lt;/version&gt;
&lt;executions&gt;
&lt;execution&gt;
&lt;id&gt;schemagen&lt;/id&gt;
&lt;goals&gt;
&lt;goal&gt;translate&lt;/goal&gt;
&lt;/goals&gt;
&lt;/execution&gt;
&lt;/executions&gt;
&lt;/plugin&gt;
&lt;/plugins&gt;
&lt;/build&gt;
&lt;dependencies&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.jena&lt;/groupId&gt;
&lt;artifactId&gt;jena-core&lt;/artifactId&gt;
&lt;version&gt;x.y.z&lt;/version&gt;
&lt;/dependency&gt;
&lt;/dependencies&gt;
</code></pre>
<p>Replace the <code>x.y.z</code> above with the latest versions as found by
browsing <a href="http://central.maven.org/maven2/org/apache/jena/jena-maven-tools/">jena-maven-tools</a>
and <a href="http://central.maven.org/maven2/org/apache/jena/jena-core/">jena-core</a> in Maven Central.</p>
<h2 id="configuration-basic-principles">Configuration: basic principles</h2>
<p>Schemagen supports a large number of options, controlling such things as the name of the
input file, the RDF namespace to expect, which Java package to place the output in and
so forth. For a command line or Ant-based build, these options are normally passed on
a per-file basis. When using maven, however, we point the plugin at a whole collection of input
files to be converted to Java, and let the plugin figure out which ones need updating (e.g. because
the RDF source is newer than the Java output, or because the Java file has not yet
been generated). So we need:</p>
<ul>
<li>a mechanism to specify which files to process</li>
<li>a mechanism to specify common options for all input files</li>
<li>a mechanism to specify per-file unique options</li>
</ul>
<p>In Maven, all such configuration information is provided via the <code>pom.xml</code> file. We tell
Maven to use the plugin via the <code>&lt;build&gt; &lt;plugins&gt;</code> section:</p>
<pre><code>&lt;build&gt;
&lt;plugins&gt;
&lt;plugin&gt;
&lt;groupId&gt;org.apache.jena&lt;/groupId&gt;
&lt;artifactId&gt;jena-maven-tools&lt;/artifactId&gt;
&lt;version&gt;x.y.z&lt;/version&gt;
&lt;configuration&gt;
&lt;/configuration&gt;
&lt;executions&gt;
&lt;execution&gt;
&lt;id&gt;schemagen&lt;/id&gt;
&lt;goals&gt;
&lt;goal&gt;translate&lt;/goal&gt;
&lt;/goals&gt;
&lt;/execution&gt;
&lt;/executions&gt;
&lt;/plugin&gt;
&lt;/plugins&gt;
&lt;/build&gt;
</code></pre>
<p>Replace the <code>x.y.z</code> above with the latest versions as found by
browsing <a href="http://central.maven.org/maven2/org/apache/jena/jena-maven-tools/">jena-maven-tools</a>
in Maven Central.</p>
<p>The configuration options all nest inside the <code>&lt;configuration&gt;</code> section.</p>
<h3 id="specifying-files-to-process">Specifying files to process</h3>
<p>An <code>&lt;include&gt;</code> directive specifies one file pattern to include in the set of
files to process. Wildcards may be used. For example, the following section
specifies that the tool will process all Turtle files, and the <code>foaf.rdf</code> file,
in <code>src/main/vocabs</code>:</p>
<pre><code>&lt;includes&gt;
&lt;include&gt;src/main/vocabs/*.ttl&lt;/include&gt;
&lt;include&gt;src/main/vocabs/foaf.rdf&lt;/include&gt;
&lt;/includes&gt;
</code></pre>
<h3 id="specifying-processing-options">Specifying processing options</h3>
<p>Options are, in general, given in the <code>&lt;fileOptions&gt;</code> section. A given
<code>&lt;source&gt;</code> refers to one input source - one file - as named by the
<code>&lt;input&gt;</code> name. The actual option names are taken from the RDF <a href="/documentation/tools/schemagen.html">config
file property names</a>,
omitting the namespace:</p>
<pre><code> &lt;fileOptions&gt;
&lt;source&gt;
&lt;!-- Test2.java (only) will contain OntModel declarations --&gt;
&lt;input&gt;src/main/vocabs/demo2.ttl&lt;/input&gt;
&lt;ontology&gt;true&lt;/ontology&gt;
&lt;/source&gt;
&lt;/fileOptions&gt;
</code></pre>
<p>The special source <code>default</code> provides a mechanism for specifying shared defaults
across all input sources:</p>
<pre><code> &lt;source&gt;
&lt;input&gt;default&lt;/input&gt;
&lt;package-name&gt;org.example.test&lt;/package-name&gt;
&lt;/source&gt;
</code></pre>
<h2 id="example-configuration">Example configuration</h2>
<p><strong>Note:</strong> Replace the <code>x.y.z</code> below with the latest versions as found by
browsing <a href="http://central.maven.org/maven2/org/apache/jena/jena-maven-tools/">jena-maven-tools</a>
and <a href="http://central.maven.org/maven2/org/apache/jena/jena-core/">jena-core</a> in Maven Central.</p>
<pre><code>&lt;build&gt;
&lt;plugins&gt;
&lt;plugin&gt;
&lt;groupId&gt;org.apache.jena&lt;/groupId&gt;
&lt;artifactId&gt;jena-maven-tools&lt;/artifactId&gt;
&lt;version&gt;x.y.z&lt;/version&gt;
&lt;configuration&gt;
&lt;includes&gt;
&lt;include&gt;src/main/vocabs/*.ttl&lt;/include&gt;
&lt;include&gt;src/main/vocabs/foaf.rdf&lt;/include&gt;
&lt;/includes&gt;
&lt;fileOptions&gt;
&lt;source&gt;
&lt;input&gt;default&lt;/input&gt;
&lt;package-name&gt;org.example.test&lt;/package-name&gt;
&lt;/source&gt;
&lt;source&gt;
&lt;!-- Test2.java (only) will contain OntModel declarations --&gt;
&lt;input&gt;src/main/vocabs/demo2.ttl&lt;/input&gt;
&lt;ontology&gt;true&lt;/ontology&gt;
&lt;!-- caution: the config file property name 'inference' is mapped to 'use-inf' --&gt;
&lt;use-inf&gt;true&lt;/use-inf&gt;
&lt;/source&gt;
&lt;/fileOptions&gt;
&lt;/configuration&gt;
&lt;executions&gt;
&lt;execution&gt;
&lt;id&gt;schemagen&lt;/id&gt;
&lt;goals&gt;
&lt;goal&gt;translate&lt;/goal&gt;
&lt;/goals&gt;
&lt;/execution&gt;
&lt;/executions&gt;
&lt;/plugin&gt;
&lt;/plugins&gt;
&lt;/build&gt;
&lt;dependencies&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.jena&lt;/groupId&gt;
&lt;artifactId&gt;jena-core&lt;/artifactId&gt;
&lt;version&gt;x.y.z&lt;/version&gt;
&lt;/dependency&gt;
&lt;/dependencies&gt;
</code></pre>
</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="#pre-requisites">Pre-requisites</a></li>
<li><a href="#installing">Installing</a></li>
<li><a href="#configuration-basic-principles">Configuration: basic principles</a>
<ul>
<li><a href="#specifying-files-to-process">Specifying files to process</a></li>
<li><a href="#specifying-processing-options">Specifying processing options</a></li>
</ul>
</li>
<li><a href="#example-configuration">Example configuration</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>