blob: ea1c0ee4f28cb1ba508b42abbcb939b02a587de4 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<title>Apache Jena - Command-line and other tools for Jena developers</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/__index.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">TOOLS</li>
</ol>
</div>
<h1 class="title">Command-line and other tools for Jena developers</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>
<ul>
<li><a href="#index-of-tools">Index of tools</a></li>
<li><a href="#setting-up-your-environment">Setting up your Environment</a></li>
<li><a href="#running-the-tools">Running the Tools</a></li>
<li><a href="#common-issues-with-running-the-tools">Common Issues with Running the Tools</a></li>
<li><a href="#command-line-tools-quick-reference">Command Line Tools Quick Reference</a>
<ul>
<li><a href="#riot-and-related">riot and Related</a></li>
<li><a href="#sparql-queries-on-local-files-and-endpoints">SPARQL Queries on Local Files and Endpoints</a></li>
<li><a href="#querying-and-manipulating-fuseki-datasets">Querying and Manipulating Fuseki Datasets</a></li>
<li><a href="#other-handy-command-line-tools">Other Handy Command Line Tools</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</aside>
<article class="flex-column me-lg-4">
<p>Jena includes various command-line utilities which can help you with
a variety of tasks in developing Jena-based applications.</p>
<h3 id="index-of-tools">Index of tools</h3>
<ul>
<li><a href="schemagen.html">schemagen</a></li>
<li><a href="schemagen-maven.html">using schemagen from maven</a></li>
</ul>
<h3 id="setting-up-your-environment">Setting up your Environment</h3>
<p>An environment variable <code>JENA_HOME</code> is used by all the command line tools to configure the class path automatically for you. You can set this up as follows:</p>
<p><strong>On Linux / Mac</strong></p>
<ul>
<li><code>export JENA_HOME=</code><em>the directory you downloaded Jena to</em></li>
<li><code>export PATH=$PATH:$JENA_HOME/bin</code></li>
</ul>
<p><strong>On Windows</strong></p>
<ul>
<li><code>SET JENA_HOME =</code><em>the directory you downloaded Jena to</em></li>
<li><code>SET PATH=%PATH%;%JENA_HOME%\bat</code></li>
</ul>
<h3 id="running-the-tools">Running the Tools</h3>
<p>Once you&rsquo;ve done the above you should now be able to run the tools from the command line like so:</p>
<p><strong>On Linux / Mac</strong></p>
<ul>
<li><code>sparql --version</code></li>
</ul>
<p><strong>On Windows</strong></p>
<ul>
<li><code>sparql.bat --version</code></li>
</ul>
<p>This command will simply print the versions of Jena and ARQ used in your distribution, all the tools support the <code>--version </code> option. To find out how to use a specific tool add the <code>--help</code> flag instead.</p>
<p>Note that many examples of using Jena tools typically use the Linux style invocation because most of the Jena developers work on Linux/Mac platforms. When running on windows simply add <code>.bat</code> as an extension to the name of the command line tool to run it, on some versions of Windows this may not be required.</p>
<h3 id="common-issues-with-running-the-tools">Common Issues with Running the Tools</h3>
<p>If you receive errors stating that a class is not found then it is most likely that <code>JENA_HOME</code> is not set correctly. As a quick check you can try the following to see if it is set appropriately:</p>
<p><strong>On Linux / Mac</strong></p>
<ul>
<li><code>cd $JENA_HOME</code></li>
</ul>
<p><strong>On Windows</strong></p>
<ul>
<li><code>cd %JENA_HOME%</code></li>
</ul>
<p>If this command fails then <code>JENA_HOME</code> is not correctly set, please ensure you have set it correctly and try again.</p>
<p>Windows users may experience problems if trying to run the tools when their <code>JENA_HOME</code> path contains spaces in it, there are two workarounds for this:</p>
<ol>
<li>Move your Jena installation to a path without spaces</li>
<li>Grab the latest scripts from <a href="https://github.com/apache/jena/tree/main/apache-jena/bat/">main</a> where they have been fixed to safely handle this. Future releases will include this fix and resolve this issue</li>
</ol>
<h3 id="command-line-tools-quick-reference">Command Line Tools Quick Reference</h3>
<h4 id="riot-and-related">riot and Related</h4>
<p>See <a href="https://jena.apache.org/documentation/io/">Reading and Writing RDF in Apache Jena</a> for more information.</p>
<ul>
<li>
<p><strong><code>riot</code></strong>: parse RDF data, guessing the syntax from the file extension. Assumes that standard input is N-Quads/N-Triples unless
you tell it otherwise with the <code>--syntax</code> parameter. <code>riot</code> can also do RDFS <a href="https://jena.apache.org/documentation/inference/">inferencing</a>, count triples, convert serializations,
validate syntax, concatenate datasets, and more.</p>
</li>
<li>
<p><strong><code>turtle</code></strong>, <strong><code>ntriples</code></strong>, <strong><code>nquads</code></strong>, <strong><code>trig</code></strong>, <strong><code>rdfxml</code></strong>: specialized versions of <code>riot</code> that assume that the input is in the named serialization.</p>
</li>
<li>
<p><strong><code>rdfparse</code></strong>: parse an RDF/XML document, for which you can usually just use <code>riot</code>, but this can also pull triples out of <code>rdf:RDF</code> elements
embedded at arbitrary places in an XML document if you need to deal with those.</p>
</li>
</ul>
<h4 id="sparql-queries-on-local-files-and-endpoints">SPARQL Queries on Local Files and Endpoints</h4>
<p>See <a href="https://jena.apache.org/documentation/query/cmds.html">ARQ - Command Line Applications</a> for more about these.</p>
<ul>
<li>
<p><strong><code>arq</code></strong> and <strong><code>sparql</code></strong>: run a query in a file named as a command line parameter on a dataset in one or more files named as command line parameters.</p>
</li>
<li>
<p><strong><code>qparse</code></strong>: parse a query, report on any problems, and output a pretty-printed version of the query.</p>
</li>
<li>
<p><strong><code>uparse</code></strong>: do the same thing as <code>qparse</code> but for update requests.</p>
</li>
<li>
<p><strong><code>rsparql</code></strong>: send a local query to a SPARQL endpoint specified with a URL, giving you the same choice of output formats
that <code>arq</code> does.</p>
</li>
<li>
<p><strong><code>rupdate</code></strong>: send a local update query to a SPARQL endpoint specified with a URL, assuming that is accepting updates from you.</p>
</li>
</ul>
<h4 id="querying-and-manipulating-fuseki-datasets">Querying and Manipulating Fuseki Datasets</h4>
<p>The following utilities let you work with data stored using a local
<a href="https://jena.apache.org/documentation/fuseki2/">Fuseki</a> triplestore. They can
be useful for automating queries and updates of data stored there. Each
requires an <a href="https://jena.apache.org/documentation/assembler/assembler-howto.html">assembler file</a>
pointing at a dataset as a parameter; Fuseki creates these for you.</p>
<p>For each pair of utilities shown, the first is used with data stored using the TDB format and the
second with data stored using the newer and more efficient TDB2 format.</p>
<p>The <a href="https://jena.apache.org/documentation/tdb/">TDB</a> and <a href="https://jena.apache.org/documentation/tdb2/tdb2_cmds.html">TDB2 - Command Line Tools</a>
pages describe these further.</p>
<ul>
<li>
<p><strong><code>tdbquery</code></strong>, <strong><code>tdb2.tdbquery</code></strong>: query a dataset that has been stored with Fuseki.</p>
</li>
<li>
<p><strong><code>tdbdump</code></strong>, <strong><code>tdb2.tdbdump</code></strong>: dump the contents of a Fuseki dataset to standard out.</p>
</li>
<li>
<p><strong><code>tdbupdate</code></strong>, <strong><code>tdb2.tdbupdate</code></strong>: run an update request against a Fuseki dataset.</p>
</li>
<li>
<p><strong><code>tdbloader</code></strong>, <strong><code>tdb2.tdbloader</code></strong>: load a data from a file into a Fuseki dataset.</p>
</li>
<li>
<p><strong><code>tdbstats</code></strong>, <strong><code>tdb2.tdbstats</code></strong>: output a short report of information about a Fuseki dataset.</p>
</li>
<li>
<p><strong><code>tdbbackup</code></strong>, <strong><code>tdb2.tdbbackup</code></strong>: create a gzipped copy of the Fuseki dataset&rsquo;s triples.</p>
</li>
<li>
<p><strong>not implemented for TDB1</strong>, <strong><code>tdb2.tdbcompact</code></strong>: reduce the size of the Fuseki dataset.</p>
</li>
</ul>
<h4 id="other-handy-command-line-tools">Other Handy Command Line Tools</h4>
<ul>
<li>
<p><strong><code>shacl</code></strong>: validate a dataset against a set of shapes and constraints described in a
file that conforms to the W3C <a href="https://www.w3.org/TR/shacl/">SHACL</a> standard.
Jena&rsquo;s <a href="https://jena.apache.org/documentation/shacl/">SHACL</a> page has more on this utility.</p>
</li>
<li>
<p><strong><code>shex</code></strong>: validate data using <a href="https://shex.io/">ShEx</a> from the
<a href="https://www.w3.org/community/shex/">W3C Shape Expressions Community Group</a>.
Jena&rsquo;s <a href="https://jena.apache.org/documentation/shex/">ShEx</a> page has more on this utility.</p>
</li>
<li>
<p><strong><code>rdfdiff</code></strong>: compare the triples in two datasets, regardless of their serializations, and list
which are different between the two datasets. (Modeled on the UNIX <code>diff</code> utility.)</p>
</li>
<li>
<p><strong><code>iri</code></strong>: Parse a IRI and tell you about it, with errors and warnings. Good for
checking for issues like proper escaping.</p>
</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>
<ul>
<li><a href="#index-of-tools">Index of tools</a></li>
<li><a href="#setting-up-your-environment">Setting up your Environment</a></li>
<li><a href="#running-the-tools">Running the Tools</a></li>
<li><a href="#common-issues-with-running-the-tools">Common Issues with Running the Tools</a></li>
<li><a href="#command-line-tools-quick-reference">Command Line Tools Quick Reference</a>
<ul>
<li><a href="#riot-and-related">riot and Related</a></li>
<li><a href="#sparql-queries-on-local-files-and-endpoints">SPARQL Queries on Local Files and Endpoints</a></li>
<li><a href="#querying-and-manipulating-fuseki-datasets">Querying and Manipulating Fuseki Datasets</a></li>
<li><a href="#other-handy-command-line-tools">Other Handy Command Line Tools</a></li>
</ul>
</li>
</ul>
</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>