blob: ed45fee7cf6227ce82b97a23aec0ec5e43bcd260 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<title>Apache Jena - Fuseki: serving RDF data over HTTP</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/archive/serving_data/fuseki1.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/archive'>ARCHIVE</a></li>
<li class="breadcrumb-item"><a href='/documentation/archive/serving_data'>SERVING DATA</a></li>
<li class="breadcrumb-item active">FUSEKI1.HTML</li>
</ol>
</div>
<h1 class="title">Fuseki: serving RDF data over HTTP</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="#see-the-fuseki2-documentationdocumentationfuseki2">See the <a href="/documentation/fuseki2/">Fuseki2 documentation</a>.</a></li>
<li><a href="#download-fuseki1">Download Fuseki1</a></li>
<li><a href="#getting-started-with-fuseki">Getting Started With Fuseki</a></li>
<li><a href="#user-interface">User Interface</a></li>
<li><a href="#script-control">Script Control</a></li>
<li><a href="#security-and-access-control">Security and Access Control</a></li>
<li><a href="#logging">Logging</a></li>
<li><a href="#server-uri-scheme">Server URI scheme</a></li>
<li><a href="#running-a-fuseki-server">Running a Fuseki Server</a></li>
<li><a href="#fuseki-server-starting-with-an-empty-dataset">Fuseki Server starting with an empty dataset</a></li>
<li><a href="#fuseki-server-and-tdb">Fuseki Server and TDB</a></li>
<li><a href="#fuseki-server-and-general-dataset-descriptions">Fuseki Server and general dataset descriptions</a></li>
<li><a href="#fuseki-configuration-file">Fuseki Configuration File</a>
<ul>
<li><a href="#prefix-declarations">Prefix declarations</a></li>
<li><a href="#server-section">Server Section</a></li>
<li><a href="#assembler-initialization">Assembler Initialization</a></li>
<li><a href="#service-1">Service 1</a></li>
<li><a href="#service-2">Service 2</a></li>
<li><a href="#service-3">Service 3</a></li>
</ul>
</li>
<li><a href="#sparql-over-http">SPARQL Over HTTP</a>
<ul>
<li><a href="#examples">Examples</a></li>
</ul>
</li>
<li><a href="#use-from-java">Use from Java</a>
<ul>
<li><a href="#sparql-query">SPARQL Query</a></li>
<li><a href="#sparql-update">SPARQL Update</a></li>
<li><a href="#sparql-http">SPARQL HTTP</a></li>
</ul>
</li>
</ul>
</nav>
</aside>
<article class="flex-column me-lg-4">
<h2 id="see-the-fuseki2-documentationdocumentationfuseki2">See the <a href="/documentation/fuseki2/">Fuseki2 documentation</a>.</h2>
<hr>
<blockquote>
<p>This page covers Fuseki v1.<br/>
Fuseki1 is deprecated and has been retired.<br/>
The last release of Jena with this module is Jena 3.9.0.<br/></p>
</blockquote>
<hr>
<p>Fuseki is a SPARQL server. It provides REST-style SPARQL HTTP Update, SPARQL Query,
and SPARQL Update using the SPARQL protocol over HTTP.</p>
<p>The relevant SPARQL standards are:</p>
<ul>
<li><a href="http://www.w3.org/TR/sparql11-query/">SPARQL 1.1 Query</a></li>
<li><a href="http://www.w3.org/TR/sparql11-update/">SPARQL 1.1 Update</a></li>
<li><a href="http://www.w3.org/TR/sparql11-protocol/">SPARQL 1.1 Protocol</a></li>
<li><a href="http://www.w3.org/TR/sparql11-http-rdf-update/">SPARQL 1.1 Graph Store HTTP Protocol</a></li>
</ul>
<h2 id="download-fuseki1">Download Fuseki1</h2>
<p>Binaries for Fuseki1 are available from the
<a href="http://central.maven.org/maven2/org/apache/jena/jena-fuseki1/">maven
repositories</a>.</p>
<p>The source code is available in the Apache Jena source release.</p>
<h2 id="getting-started-with-fuseki">Getting Started With Fuseki</h2>
<p>This section provides a brief guide to getting up and running with
a simple server installation. It uses the
<a href="/documentation/fuseki2/soh.html">SOH (SPARQL over HTTP)</a> scripts included in the
download.</p>
<ol>
<li>
<p><a href="/download/#jena-fuseki">Download</a> the latest <code>jena-fuseki-*-distribution</code></p>
</li>
<li>
<p>Unpack the downloaded file with <code>unzip</code> or <code>tar zxfv</code></p>
</li>
<li>
<p>Move into the newly-created <code>apache-jena-fuseki-*</code> directory</p>
</li>
<li>
<p>(Linux) <code>chmod +x fuseki-server bin/s-*</code></p>
</li>
<li>
<p>Run a server</p>
<p>./fuseki-server &ndash;update &ndash;mem /ds</p>
</li>
</ol>
<p>The server logging goes to the console:</p>
<pre><code>09:25:41 INFO Fuseki :: Dataset: in-memory
09:25:41 INFO Fuseki :: Update enabled
09:25:41 INFO Fuseki :: Fuseki development
09:25:41 INFO Fuseki :: Jetty 7.2.1.v20101111
09:25:41 INFO Fuseki :: Dataset = /ds
09:25:41 INFO Fuseki :: Started 2011/01/06 09:25:41 GMT on port 3030
</code></pre>
<h2 id="user-interface">User Interface</h2>
<p>The Fuseki download includes a number of services:</p>
<ul>
<li>SPARQL Query, SPARQL Update, and file upload to a selected
dataset.</li>
<li>Link to the documentation (here).</li>
<li>Validators for SPARQL query and update and for non-RDF/XML
formats.</li>
</ul>
<p>For the control panel:</p>
<ol>
<li>In a browser, go to <code>http://localhost:3030/</code></li>
<li>Click on <em>Control Panel</em></li>
<li>Select the dataset (if set up above, there is only one choice).</li>
</ol>
<p>The page offers SPARQL operations and file upload acting on the
selected dataset.</p>
<h2 id="script-control">Script Control</h2>
<p>In a new window:</p>
<p>Load some RDF data into the default graph of the server:</p>
<pre><code>s-put http://localhost:3030/ds/data default books.ttl
</code></pre>
<p>Get it back:</p>
<pre><code>s-get http://localhost:3030/ds/data default
</code></pre>
<p>Query it with SPARQL using the &hellip;/query endpoint.</p>
<pre><code>s-query --service http://localhost:3030/ds/query 'SELECT * {?s ?p ?o}'
</code></pre>
<p>Update it with SPARQL using the &hellip;/update endpoint.</p>
<pre><code>s-update --service http://localhost:3030/ds/update 'CLEAR DEFAULT'
</code></pre>
<h2 id="security-and-access-control">Security and Access Control</h2>
<p>Fuseki does not currently offer security and access control itself.</p>
<p>Authentication and control of the number of concurrent requests can
be added using an Apache server and either blocking the Fuseki port
to outside traffic (e.g. on Amazon&rsquo;s EC2) or by listening only the
<code>localhost</code> network interface. This is especially important for update
endpoints (SPARQL Update, SPARQL Graph Store protocol with
PUT/POST/DELETE enabled).</p>
<p>Data can be updated without access control if the server is started
with the <code>--update</code> argument. If started without that argument, data
is read-only.</p>
<h2 id="logging">Logging</h2>
<p>Fuseki uses
<a href="http://logging.apache.org/log4j/">Log4J</a>
for logging. There are two main logging channels:</p>
<ol>
<li>The general server messages: <code>org.apache.jena.fuseki.Server</code></li>
<li>A channel for all request messages: <code>org.apache.jena.fuseki.Fuseki</code></li>
</ol>
<p>The default settings are (this is an extract of a log4j properties
file):</p>
<pre><code># Fuseki
# Server log.
log4j.logger.org.apache.jena.fuseki.Server=INFO
# Request log.
log4j.logger.org.apache.jena.fuseki.Fuseki=INFO
# Internal logs
log4j.logger.org.apache.jena.fuseki=INFO
</code></pre>
<h2 id="server-uri-scheme">Server URI scheme</h2>
<p>This details the service URIs for Fuseki:</p>
<ul>
<li><code>http://*host*/</code><em>dataset</em><code>/query</code> &ndash; the SPARQL query endpoint.</li>
<li><code>http://*host*/</code><em>dataset</em><code>/update</code> &ndash; the SPARQL Update language
endpoint.</li>
<li><code>http://*host*/</code><em>dataset</em><code>/data</code> &ndash; the SPARQL Graph Store Protocol
endpoint.</li>
<li><code>http://*host*/</code><em>dataset</em><code>/upload</code> &ndash; the file upload endpoint.</li>
</ul>
<p>Where <em>dataset</em> is a URI path. Note that Fuseki defaults to using
port 3030 so <em>host</em> is often <em>localhost:3030</em>.</p>
<p><strong>Important</strong> - While you may set <em>dataset</em> to be the text <code>dataset</code> this should be avoided since it may interfere with the function of the control panel and web pages.</p>
<p>The URI
<code>http://host/</code><em>dataset</em><code>/sparql</code>
is currently mapped to <code>/query</code> but this may change to being a
general purpose SPARQL query endpoint.</p>
<h2 id="running-a-fuseki-server">Running a Fuseki Server</h2>
<p>The server can be run with the script <code>fuseki-server</code>. Common forms
are:</p>
<pre><code>fuseki-server --mem /DatasetPathName
fuseki-server --file=FILE /DatasetPathName
fuseki-server --loc=DB /DatasetPathName
fuseki-server --config=ConfigFile
</code></pre>
<p>There is an option <code>--port=PORT</code> to set the port number. It
defaults to 3030.</p>
<p><code>/DatasetPathName</code> is the name under which the dataset will be
accessible over HTTP. Please see the above section on Server URI scheme for notes regarding available URIs and choice of this name</p>
<p>The server will service read requests only unless the <code>--update</code>
argument is used.</p>
<p>The full choice of dataset forms is:</p>
<p><strong>Fuseki Dataset Descriptions</strong></p>
<ul>
<li><code>--mem</code> <br /> Create an empty, in-memory (non-persistent) dataset.</li>
<li><code>--file=FILE</code> <br />
Create an empty, in-memory (non-persistent) dataset, then load FILE
into it.</li>
<li><code>--loc=DIR</code> <br />Use an existing TDB database. Create an empty one if it does not
exist.</li>
<li><code>--desc=assemblerFile</code> <br /> Construct a dataset based on the general assembler description.</li>
<li><code>--config=ConfigFile</code> <br /> Construct one or more service endpoints based on the
<a href="#fuseki-configuration-file">configuration description</a>.</li>
</ul>
<p>A copy of TDB is included in the standalone server. An example
assembler file for TDB is in tdb.ttl.</p>
<p><strong>Fuseki Server Arguments</strong></p>
<ul>
<li><code>--help</code> <br /> Print help message.</li>
<li><code>--port=*number*</code> <br /> Run on port <em>number</em> (default is 3030).</li>
<li><code>--localhost</code> <br /> Listen only to the localhost network interface.</li>
<li><code>--update</code> <br /> Allow update. Otherwise only read requests are served (ignored if a configuration file is given).</li>
</ul>
<h2 id="fuseki-server-starting-with-an-empty-dataset">Fuseki Server starting with an empty dataset</h2>
<pre><code>fuseki-server --update --mem /ds
</code></pre>
<p>runs the server on port 3030 with an in-memory dataset. It can be
accessed via the appropriate protocol at the following URLs:</p>
<ul>
<li>SPARQL query: <code>http://localhost:3030/ds/query</code></li>
<li>SPARQL update: <code>http://localhost:3030/ds/update</code></li>
<li>SPARQL HTTP update: <code>http://localhost:3030/ds/data</code></li>
</ul>
<p>The <a href="/documentation/fuseki2/soh.html">SPARQL Over HTTP</a> scripts take care of naming
and protocol details. For example, to load in a file <code>data.rdf</code>:</p>
<pre><code> s-put http://localhost:3030/ds/data default data.rdf
</code></pre>
<h2 id="fuseki-server-and-tdb">Fuseki Server and TDB</h2>
<p>Fuseki includes a built-in version of TDB. Run the server with the
<code>--desc</code> argument</p>
<pre><code>fuseki-server --desc tdb.ttl /ds
</code></pre>
<p>and a database in the directory DB, an assembler description of:</p>
<pre><code>@prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; .
@prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; .
@prefix ja: &lt;http://jena.hpl.hp.com/2005/11/Assembler#&gt; .
@prefix tdb: &lt;http://jena.hpl.hp.com/2008/tdb#&gt; .
&lt;#dataset&gt; rdf:type tdb:DatasetTDB ;
tdb:location &quot;DB&quot; ;
.
</code></pre>
<p>The form:</p>
<pre><code>fuseki-server --loc=DB /ds
</code></pre>
<p>is a shorthand for such an assembler with location <code>DB</code>.</p>
<p>To make triples from all the named graphs appear as the default,
unnamed graph, use:</p>
<pre><code>&lt;#dataset&gt; rdf:type tdb:DatasetTDB ;
tdb:location &quot;DB&quot; ;
tdb:unionDefaultGraph true ;
.
</code></pre>
<h2 id="fuseki-server-and-general-dataset-descriptions">Fuseki Server and general dataset descriptions</h2>
<p>The Fuseki server can be given an
<a href="/documentation/assembler/">assembler description</a>
to build a variety of model and datasets types.</p>
<pre><code>fuseki-server --desc assembler.ttl /ds
</code></pre>
<p>Full details of setting up models assembler is given in the
<a href="/documentation/assembler/">assembler documentation</a> and <a href="/documentation/assembler/assembler-howto.html">assembler howto</a>.</p>
<p>A general dataset is described by:</p>
<pre><code># Dataset of default graph and one named graph.
&lt;#dataset&gt; rdf:type ja:RDFDataset ;
ja:defaultGraph &lt;#modelDft&gt; ;
ja:namedGraph
[ ja:graphName &lt;http://example.org/name1&gt; ;
ja:graph &lt;#model1&gt; ] ;
.
&lt;#modelDft&gt; a ja:MemoryModel ;
ja:content [ ja:externalContent &lt;file:Data.ttl&gt; .
&lt;#model1&gt; rdf:type ja:MemoryModel ;
ja:content [ ja:externalContent &lt;file:FILE-1.ttl&gt; ] ;
ja:content [ ja:externalContent &lt;file:FILE-2.ttl&gt; ] ;
.
</code></pre>
<p>The models can be
<a href="/documentation/inference/">Jena inference models</a>.</p>
<h2 id="fuseki-configuration-file">Fuseki Configuration File</h2>
<p>A Fuseki server can be set up using a configuration file. The
command-line arguments for publishing a single dataset are a short
cut that, internally, builds a default configuration based on the
dataset name given.</p>
<p>The configuration is an RDF graph. One graph consists of one server
description, with a number of services, and each service offers a
number of endpoints over a dataset.</p>
<p>The example below is all one file (RDF graph in Turtle syntax)
split to allow for commentary.</p>
<h3 id="prefix-declarations">Prefix declarations</h3>
<p>Some useful prefix declarations:</p>
<pre><code>@prefix fuseki: &lt;http://jena.apache.org/fuseki#&gt; .
@prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; .
@prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; .
@prefix tdb: &lt;http://jena.hpl.hp.com/2008/tdb#&gt; .
@prefix ja: &lt;http://jena.hpl.hp.com/2005/11/Assembler#&gt; .
@prefix : &lt;#&gt; .
</code></pre>
<h3 id="server-section">Server Section</h3>
<p>Order of the file does not matter to the machine, but it&rsquo;s useful
to start with the server description, then each of the services
with its datasets.</p>
<pre><code>[] rdf:type fuseki:Server ;
# Server-wide context parameters can be given here.
# For example, to set query timeouts: on a server-wide basis:
# Format 1: &quot;1000&quot; -- 1 second timeout
# Format 2: &quot;10000,60000&quot; -- 10s timeout to first result, then 60s timeout to for rest of query.
# See java doc for ARQ.queryTimeout
# ja:context [ ja:cxtName &quot;arq:queryTimeout&quot; ; ja:cxtValue &quot;10000&quot; ] ;
# Services available. Only explicitly listed services are configured.
# If there is a service description not linked from this list, it is ignored.
fuseki:services (
&lt;#service1&gt;
&lt;#service2&gt;
) .
</code></pre>
<h3 id="assembler-initialization">Assembler Initialization</h3>
<p>All datasets are described by
<a href="../assembler/index.html">assembler descriptions</a>.
Assemblers provide an extensible way of describing many kinds of
objects. Set up any assembler extensions - here, the TDB assembler
support.</p>
<h3 id="service-1">Service 1</h3>
<p>This service offers SPARQL Query, SPARQL Update and SPARQL Graph
Store protocol, as well as file upload, on an in-memory dataset.
Initially, the dataset is empty.</p>
<pre><code>## ---------------------------------------------------------------
## Updatable in-memory dataset.
&lt;#service1&gt; rdf:type fuseki:Service ;
fuseki:name &quot;ds&quot; ; # http://host:port/ds
fuseki:serviceQuery &quot;query&quot; ; # SPARQL query service
fuseki:serviceQuery &quot;sparql&quot; ; # SPARQL query service
fuseki:serviceUpdate &quot;update&quot; ; # SPARQL query service
fuseki:serviceUpload &quot;upload&quot; ; # Non-SPARQL upload service
fuseki:serviceReadWriteGraphStore &quot;data&quot; ; # SPARQL Graph store protocol (read and write)
# A separate read-only graph store endpoint:
fuseki:serviceReadGraphStore &quot;get&quot; ; # SPARQL Graph store protocol (read only)
fuseki:dataset &lt;#dataset-mem&gt; ;
.
&lt;#dataset-mem&gt; rdf:type ja:RDFDataset .
</code></pre>
<h3 id="service-2">Service 2</h3>
<p>This service offers a number of endpoints. It is read-only, because
only read-only endpoints are defined (SPARQL Query and HTTP GET
SPARQl Graph Store protocol). The dataset is a single in-memory
graph:</p>
<p>This service offers read-only access to a dataset with a single
graph of data.</p>
<pre><code>&lt;#service2&gt; rdf:type fuseki:Service ;
fuseki:name &quot;books&quot; ; # http://host:port/books
fuseki:serviceQuery &quot;query&quot; ; # SPARQL query service
fuseki:serviceReadGraphStore &quot;data&quot; ; # SPARQL Graph store protocol (read only)
fuseki:dataset &lt;#books&gt; ;
.
&lt;#books&gt; rdf:type ja:RDFDataset ;
rdfs:label &quot;Books&quot; ;
ja:defaultGraph
[ rdfs:label &quot;books.ttl&quot; ;
a ja:MemoryModel ;
ja:content [ja:externalContent &lt;file:Data/books.ttl&gt; ] ;
] ;
.
</code></pre>
<h3 id="service-3">Service 3</h3>
<p>This service offers SPARQL query access only to a TDB database. The
TDB database can have specific features set, such as query timeout
or making the default graph the union of all named graphs.</p>
<pre><code>&lt;#service3&gt; rdf:type fuseki:Service ;
fuseki:name &quot;tdb&quot; ; # http://host:port/tdb
fuseki:serviceQuery &quot;sparql&quot; ; # SPARQL query service
fuseki:dataset &lt;#dataset&gt; ;
.
&lt;#dataset&gt; rdf:type tdb:DatasetTDB ;
tdb:location &quot;DB&quot; ;
# Query timeout on this dataset (1s, 1000 milliseconds)
ja:context [ ja:cxtName &quot;arq:queryTimeout&quot; ; ja:cxtValue &quot;1000&quot; ] ;
# Make the default graph be the union of all named graphs.
## tdb:unionDefaultGraph true ;
.
</code></pre>
<h2 id="sparql-over-http">SPARQL Over HTTP</h2>
<p><strong>SOH</strong> (SPARQL Over HTTP) is a set of command-line scripts for
working with SPARQL 1.1. SOH is server-independent and will work
with any compliant SPARQL 1.1 system offering HTTP access.</p>
<p>See the <a href="/documentation/fuseki2/soh.html">SPARQL Over HTTP</a> page.</p>
<h3 id="examples">Examples</h3>
<pre><code># PUT a file
s-put http://localhost:3030/ds/data default D.nt
# GET a file
s-get http://localhost:3030/ds/data default
# PUT a file to a named graph
s-put http://localhost:3030/ds/data http://example/graph D.nt
# Query
s-query --service http://localhost:3030/ds/query 'SELECT * {?s ?p ?o}'
# Update
s-update --service http://localhost:3030/ds/update --file=update.ru
</code></pre>
<h2 id="use-from-java">Use from Java</h2>
<h3 id="sparql-query">SPARQL Query</h3>
<p>ARQ&rsquo;s <code>QueryExecutionFactory.sparqlService</code> can be used.</p>
<h3 id="sparql-update">SPARQL Update</h3>
<p>See <code>UpdateExecutionFactory.createRemote</code></p>
<h3 id="sparql-http">SPARQL HTTP</h3>
<p>See <code>DatasetAccessor</code></p>
</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="#see-the-fuseki2-documentationdocumentationfuseki2">See the <a href="/documentation/fuseki2/">Fuseki2 documentation</a>.</a></li>
<li><a href="#download-fuseki1">Download Fuseki1</a></li>
<li><a href="#getting-started-with-fuseki">Getting Started With Fuseki</a></li>
<li><a href="#user-interface">User Interface</a></li>
<li><a href="#script-control">Script Control</a></li>
<li><a href="#security-and-access-control">Security and Access Control</a></li>
<li><a href="#logging">Logging</a></li>
<li><a href="#server-uri-scheme">Server URI scheme</a></li>
<li><a href="#running-a-fuseki-server">Running a Fuseki Server</a></li>
<li><a href="#fuseki-server-starting-with-an-empty-dataset">Fuseki Server starting with an empty dataset</a></li>
<li><a href="#fuseki-server-and-tdb">Fuseki Server and TDB</a></li>
<li><a href="#fuseki-server-and-general-dataset-descriptions">Fuseki Server and general dataset descriptions</a></li>
<li><a href="#fuseki-configuration-file">Fuseki Configuration File</a>
<ul>
<li><a href="#prefix-declarations">Prefix declarations</a></li>
<li><a href="#server-section">Server Section</a></li>
<li><a href="#assembler-initialization">Assembler Initialization</a></li>
<li><a href="#service-1">Service 1</a></li>
<li><a href="#service-2">Service 2</a></li>
<li><a href="#service-3">Service 3</a></li>
</ul>
</li>
<li><a href="#sparql-over-http">SPARQL Over HTTP</a>
<ul>
<li><a href="#examples">Examples</a></li>
</ul>
</li>
<li><a href="#use-from-java">Use from Java</a>
<ul>
<li><a href="#sparql-query">SPARQL Query</a></li>
<li><a href="#sparql-update">SPARQL Update</a></li>
<li><a href="#sparql-http">SPARQL HTTP</a></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>