You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by bu...@apache.org on 2016/12/23 17:50:35 UTC

svn commit: r1003354 - in /websites/staging/jena/trunk/content: ./ documentation/notes/rdfconnection.html

Author: buildbot
Date: Fri Dec 23 17:50:34 2016
New Revision: 1003354

Log:
Staging update by buildbot for jena

Added:
    websites/staging/jena/trunk/content/documentation/notes/rdfconnection.html
Modified:
    websites/staging/jena/trunk/content/   (props changed)

Propchange: websites/staging/jena/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Fri Dec 23 17:50:34 2016
@@ -1 +1 @@
-1775097
+1775862

Added: websites/staging/jena/trunk/content/documentation/notes/rdfconnection.html
==============================================================================
--- websites/staging/jena/trunk/content/documentation/notes/rdfconnection.html (added)
+++ websites/staging/jena/trunk/content/documentation/notes/rdfconnection.html Fri Dec 23 17:50:34 2016
@@ -0,0 +1,367 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE- 2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+  <title>Apache Jena - RDF Connection : SPARQL operations API</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-extension.css" rel="stylesheet" type="text/css">
+  <link href="/css/jena.css" rel="stylesheet" type="text/css">
+  <link rel="shortcut icon" href="/images/favicon.ico" />
+  
+  <script src="https://code.jquery.com/jquery-2.0.3.min.js"></script>
+  <script src="/js/jena-navigation.js" type="text/javascript"></script>
+  <script src="/js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="/js/breadcrumbs.js" type="text/javascript"></script>
+
+  <script src="/js/improve.js" type="text/javascript"></script>
+
+  
+  <!-- Uncomment to enable code coloring <link href="/css/codehilite.css" rel="stylesheet" type="text/css"> -->
+
+</head>
+
+<body>
+
+
+
+<nav class="navbar navbar-default" role="navigation">
+<div class="container">
+  <div class="navbar-header">
+  
+    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></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 navbar-ex1-collapse">
+    <ul class="nav navbar-nav">
+              <li id="homepage"><a href="/index.html"><span class="glyphicon glyphicon-home"></span> Home</a></li>
+              <li id="download"><a href="/download/index.cgi"><span class="glyphicon glyphicon-download-alt"></span> Download</a></li>
+              <li class="dropdown">
+                <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-book"></span> Learn <b class="caret"></b></a>
+                <ul class="dropdown-menu">
+                  <li class="dropdown-header">Tutorials</li>
+                  <li><a href="/tutorials/index.html">Overview</a></li>
+                  <li><a href="/tutorials/rdf_api.html">RDF core API tutorial</a></li>
+                  <li><a href="/tutorials/sparql.html">SPARQL tutorial</a></li>
+                  <li><a href="/documentation/query/manipulating_sparql_using_arq.html">Manipulating SPARQL using ARQ</a></li>
+                  <li><a href="/tutorials/using_jena_with_eclipse.html">Using Jena with Eclipse</a></li>
+                  <li><a href="/documentation/notes/index.html">How-To's</a></li>
+                  <li class="divider"></li>
+                  <li class="dropdown-header">References</li>
+                  <li><a href="/documentation/index.html">Overview</a></li>
+                  <li><a href="/documentation/javadoc/">Javadoc</a></li>
+                  <li><a href="/documentation/rdf/index.html">RDF API</a></li>
+                  <li><a href="/documentation/io/">RDF I/O</a></li>
+                  <li><a href="/documentation/query/index.html">ARQ (SPARQL)</a></li>
+                  <li><a href="/documentation/hadoop/index.html">Elephas - tools for RDF on Hadoop</a></li>
+                  <li><a href="/documentation/query/text-query.html">Text Search</a></li>
+                  <li><a href="/documentation/tdb/index.html">TDB</a></li>
+                  <li><a href="/documentation/sdb/index.html">SDB</a></li>
+                  <li><a href="/documentation/jdbc/index.html">SPARQL over JDBC</a></li>
+                  <li><a href="/documentation/fuseki2/index.html">Fuseki</a></li>
+                  <li><a href="/documentation/permissions/index.html">Permissions</a></li>
+                  <li><a href="/documentation/assembler/index.html">Assembler</a></li>
+                  <li><a href="/documentation/ontology/">Ontology API</a></li>
+                  <li><a href="/documentation/inference/index.html">Inference API</a></li>
+                  <li><a href="/documentation/tools/index.html">Command-line tools</a></li>
+                  <li><a href="/documentation/extras/index.html">Extras</a></li>
+                </ul>
+              </li>
+
+              <li class="drop down">
+                <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-book"></span> Javadoc <b class="caret"></b></a>
+                <ul class="dropdown-menu">
+                  <li><a href="/documentation/javadoc/jena/">Jena Core</a></li>
+                  <li><a href="/documentation/javadoc/arq/">ARQ</a></li>
+                  <li><a href="/documentation/javadoc/tdb/">TDB</a></li>
+                  <li><a href="/documentation/javadoc/elephas/">Elephas</a></li>
+                  <li><a href="/documentation/javadoc/text/">Text Search</a></li>
+                  <li><a href="/documentation/javadoc/spatial/">Spatial Search</a></li>
+                  <li><a href="/documentation/javadoc/permissions/">Permissions</a></li>
+                  <li><a href="/documentation/javadoc/jdbc/">JDBC</a></li>
+                  <li><a href="/documentation/javadoc/">All Javadoc</a></li>
+                </ul>
+              </li>
+
+              <li id="ask"><a href="/help_and_support/index.html"><span class="glyphicon glyphicon-question-sign"></span> Ask</a></li>
+              
+              <li class="dropdown">
+                <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-bullhorn"></span> Get involved <b class="caret"></b></a>
+                <ul class="dropdown-menu">
+                  <li><a href="/getting_involved/index.html">Contribute</a></li>
+                  <li><a href="/help_and_support/bugs_and_suggestions.html">Report a bug</a></li>
+                  <li class="divider"></li>
+                  <li class="dropdown-header">Project</li>
+                  <li><a href="/about_jena/about.html">About Jena</a></li>
+                  <li><a href="/about_jena/roadmap.html">Roadmap</a></li>
+                  <li><a href="/about_jena/architecture.html">Architecture</a></li>
+                  <li><a href="/about_jena/team.html">Project team</a></li>
+                  <li><a href="/about_jena/contributions.html">Related projects</a></li>
+                  <li class="divider"></li>
+                  <li class="dropdown-header">ASF</li>
+                  <li><a href="http://www.apache.org/">Apache Software Foundation</a></li>
+                  <li><a href="http://www.apache.org/licenses/LICENSE-2.0">License</a></li>
+                  <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+                  <li><a href="http://www.apache.org/foundation/sponsorship.html">Become a Sponsor</a></li>
+                  <li><a href="http://www.apache.org/security/">Security</a></li>
+                </ul>
+              </li>
+
+              <li id="edit"><a href="javascript:improveThisPage(location.href);" title="Improve this Page (Use username anonymous and empty password)"><span class="glyphicon glyphicon-pencil"></span> Improve this Page</a></li>   
+    </ul>
+  </div>
+</div>
+</nav>
+
+
+<div class="container">
+    <div class="row">
+    <div class="col-md-12">
+    <div id="breadcrumbs"></div>
+    <h1 class="title">RDF Connection : SPARQL operations API</h1>
+  <style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style>
+<p><code>RDFConnection</code> provides a unified set of operations for working on RDF
+with SPARQL operations. It provides <a
+href="http://www.w3.org/TR/sparql11-query/">SPARQL Query</a>, <a
+href="http://www.w3.org/TR/sparql11-update/">SPARQL Update</a> and the <a
+href="http://www.w3.org/TR/sparql11-http-rdf-update/">SPARQL Graph
+Store</a> operations.  The interface is uniform - the same interface
+applies to local data and to remote data using HTTP and the SPARQL
+protocols ( <a href="http://www.w3.org/TR/sparql11-protocol/">SPARQL
+protocol</a> and <a
+href="http://www.w3.org/TR/sparql11-http-rdf-update/">SPARQL Graph Store
+Protocol</a>).</p>
+<h2 id="outline">Outline<a class="headerlink" href="#outline" title="Permanent link">&para;</a></h2>
+<p><code>RDFConnection</code> provides a number of different styles for working with RDF
+data in Java.  It provides support for try-resource and functional code
+passing styles, as well the more basic sequence of methods calls.</p>
+<p>For example: using <code>try-resources</code> to manage the connection, and perform two operations, one to load
+some data, and one to make a query can be written as:</p>
+<div class="codehilite"><pre><span class="k">try</span> <span class="p">(</span> <span class="n">RDFConnection</span> <span class="n">conn</span> <span class="p">=</span> <span class="n">RDFConnectionFactory</span><span class="p">.</span><span class="n">connect</span><span class="p">(...)</span> <span class="p">)</span> <span class="p">{</span>
+    <span class="n">conn</span><span class="p">.</span><span class="n">load</span><span class="p">(</span>&quot;<span class="n">data</span><span class="p">.</span><span class="n">ttl</span>&quot;<span class="p">)</span> <span class="p">;</span>
+    <span class="n">conn</span><span class="p">.</span><span class="n">querySelect</span><span class="p">(</span>&quot;<span class="n">SELECT</span> <span class="n">DISTINCT</span> ?<span class="n">s</span> <span class="p">{</span> ?<span class="n">s</span> ?<span class="n">p</span> ?<span class="n">o</span> <span class="p">}</span>&quot;<span class="p">,</span> <span class="p">(</span><span class="n">qs</span><span class="p">)</span><span class="o">-&gt;</span>
+       <span class="n">Resource</span> <span class="n">subject</span> <span class="p">=</span> <span class="n">qs</span><span class="p">.</span><span class="n">getResource</span><span class="p">(</span>&quot;<span class="n">s</span>&quot;<span class="p">)</span> <span class="p">;</span>
+       <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span>&quot;<span class="n">Subject</span><span class="p">:</span> &quot;<span class="o">+</span><span class="n">subject</span><span class="p">)</span> <span class="p">;</span>
+    <span class="p">})</span> <span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>This could have been written as (approximately -- the error handling is better
+in the example above):</p>
+<div class="codehilite"><pre><span class="n">RDFConnection</span> <span class="n">conn</span> <span class="p">=</span> <span class="n">RDFConnectionFactory</span><span class="p">.</span><span class="n">connect</span><span class="p">(...)</span>
+<span class="n">conn</span><span class="p">.</span><span class="n">load</span><span class="p">(</span>&quot;<span class="n">data</span><span class="p">.</span><span class="n">ttl</span>&quot;<span class="p">)</span> <span class="p">;</span>
+<span class="n">QueryExecution</span> <span class="n">qExec</span> <span class="p">=</span> <span class="n">conn</span><span class="p">.</span><span class="n">query</span><span class="p">(</span>&quot;<span class="n">SELECT</span> <span class="n">DISTINCT</span> ?<span class="n">s</span> <span class="p">{</span> ?<span class="n">s</span> ?<span class="n">p</span> ?<span class="n">o</span> <span class="p">}</span>&quot;<span class="p">)</span> <span class="p">;</span>
+<span class="n">ResultSet</span> <span class="n">rs</span> <span class="p">=</span> <span class="n">qExec</span><span class="p">.</span><span class="n">execSelect</span><span class="p">()</span> <span class="p">;</span>
+<span class="k">while</span><span class="p">(</span><span class="n">rs</span><span class="p">.</span><span class="n">hasNext</span><span class="p">())</span> <span class="p">{</span>
+    <span class="n">QuerySolution</span> <span class="n">qs</span> <span class="p">=</span> <span class="n">rs</span><span class="p">.</span><span class="n">next</span><span class="p">()</span> <span class="p">;</span>
+    <span class="n">Resource</span> <span class="n">subject</span> <span class="p">=</span> <span class="n">qs</span><span class="p">.</span><span class="n">getResource</span><span class="p">(</span>&quot;<span class="n">s</span>&quot;<span class="p">)</span> <span class="p">;</span>
+    <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span>&quot;<span class="n">Subject</span><span class="p">:</span> &quot;<span class="o">+</span><span class="n">subject</span><span class="p">)</span> <span class="p">;</span>
+<span class="p">}</span>
+<span class="n">qExec</span><span class="p">.</span><span class="n">close</span><span class="p">()</span> <span class="p">;</span>
+<span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span> <span class="p">;</span>
+</pre></div>
+
+
+<p>Jena also provides a separate
+<a href="http://jena.staging.apache.org/documentation/jdbc/index.html">SPARQL over JDBC driver</a>
+library.</p>
+<h2 id="transactions">Transactions<a class="headerlink" href="#transactions" title="Permanent link">&para;</a></h2>
+<p>Transactions are the preferred way to work with RDF data.
+Operations on an <code>RDFConnection</code> outside of an application-controlled
+transaction will cause the system to add one for the duration of the
+operation. This "autocommit" feature may lead to inefficient operations due
+to excessive overhead.</p>
+<p>The <code>Txn</code> class provides a Java8-style transaction API.  Transactions are
+code passed in the <code>Txn</code> library that handles the transaction lifecycle.</p>
+<div class="codehilite"><pre><span class="k">try</span> <span class="p">(</span> <span class="n">RDFConnection</span> <span class="n">conn</span> <span class="p">=</span> <span class="n">RDFConnectionFactory</span><span class="p">.</span><span class="n">connect</span><span class="p">(...)</span> <span class="p">)</span> <span class="p">{</span>
+    <span class="n">Txn</span><span class="p">.</span><span class="n">execWrite</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="p">()</span><span class="o">-&gt;</span> <span class="p">{</span>
+        <span class="n">conn</span><span class="p">.</span><span class="n">load</span><span class="p">(</span>&quot;<span class="n">data1</span><span class="p">.</span><span class="n">ttl</span>&quot;<span class="p">)</span> <span class="p">;</span>
+        <span class="n">conn</span><span class="p">.</span><span class="n">load</span><span class="p">(</span>&quot;<span class="n">data2</span><span class="p">.</span><span class="n">ttl</span>&quot;<span class="p">)</span> <span class="p">;</span>
+        <span class="n">conn</span><span class="p">.</span><span class="n">querySelect</span><span class="p">(</span>&quot;<span class="n">SELECT</span> <span class="n">DISTINCT</span> ?<span class="n">s</span> <span class="p">{</span> ?<span class="n">s</span> ?<span class="n">p</span> ?<span class="n">o</span> <span class="p">}</span>&quot;<span class="p">,</span> <span class="p">(</span><span class="n">qs</span><span class="p">)</span><span class="o">-&gt;</span>
+           <span class="n">Resource</span> <span class="n">subject</span> <span class="p">=</span> <span class="n">qs</span><span class="p">.</span><span class="n">getResource</span><span class="p">(</span>&quot;<span class="n">s</span>&quot;<span class="p">)</span> <span class="p">;</span>
+           <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span>&quot;<span class="n">Subject</span><span class="p">:</span> &quot;<span class="o">+</span><span class="n">subject</span><span class="p">)</span> <span class="p">;</span>
+        <span class="p">})</span> <span class="p">;</span>
+    <span class="p">})</span> <span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>The traditional style of explicit <code>begin</code>, <code>commit</code>, <code>abort</code> is also available.</p>
+<div class="codehilite"><pre><span class="k">try</span> <span class="p">(</span> <span class="n">RDFConnection</span> <span class="n">conn</span> <span class="p">=</span> <span class="n">RDFConnectionFactory</span><span class="p">.</span><span class="n">connect</span><span class="p">(...)</span> <span class="p">)</span> <span class="p">{</span>
+    <span class="n">conn</span><span class="p">.</span><span class="n">begin</span><span class="p">(</span><span class="n">ReadWrite</span><span class="p">.</span><span class="n">WRITE</span><span class="p">)</span> <span class="p">;</span>
+    <span class="k">try</span> <span class="p">{</span>
+        <span class="n">conn</span><span class="p">.</span><span class="n">load</span><span class="p">(</span>&quot;<span class="n">data1</span><span class="p">.</span><span class="n">ttl</span>&quot;<span class="p">)</span> <span class="p">;</span>
+        <span class="n">conn</span><span class="p">.</span><span class="n">load</span><span class="p">(</span>&quot;<span class="n">data2</span><span class="p">.</span><span class="n">ttl</span>&quot;<span class="p">)</span> <span class="p">;</span>
+        <span class="n">conn</span><span class="p">.</span><span class="n">querySelect</span><span class="p">(</span>&quot;<span class="n">SELECT</span> <span class="n">DISTINCT</span> ?<span class="n">s</span> <span class="p">{</span> ?<span class="n">s</span> ?<span class="n">p</span> ?<span class="n">o</span> <span class="p">}</span>&quot;<span class="p">,</span> <span class="p">(</span><span class="n">qs</span><span class="p">)</span><span class="o">-&gt;</span>
+           <span class="n">Resource</span> <span class="n">subject</span> <span class="p">=</span> <span class="n">qs</span><span class="p">.</span><span class="n">getResource</span><span class="p">(</span>&quot;<span class="n">s</span>&quot;<span class="p">)</span> <span class="p">;</span>
+           <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span>&quot;<span class="n">Subject</span><span class="p">:</span> &quot;<span class="o">+</span><span class="n">subject</span><span class="p">)</span> <span class="p">;</span>
+        <span class="p">})</span> <span class="p">;</span>
+        <span class="n">conn</span><span class="p">.</span><span class="n">commit</span><span class="p">()</span> <span class="p">;</span>
+    <span class="p">}</span> <span class="n">finally</span> <span class="p">{</span> <span class="n">conn</span><span class="p">.</span><span class="k">end</span><span class="p">()</span> <span class="p">;</span> <span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>The use of <code>try-finally</code> ensures that transactions are properly finished.
+The <code>conn.end()</code> provides an abort in case an exception occurs in the
+transaction and a commit has not been issued.  The use of <code>try-finally</code>
+ensures that transactions are properly finished.</p>
+<p><code>Txn</code> is wrapping these steps up and calling the application supplied code
+for the transaction body.</p>
+<h3 id="remote-transactions">Remote Transactions<a class="headerlink" href="#remote-transactions" title="Permanent link">&para;</a></h3>
+<p>SPARQL does not define a remote transaction standard protocol. Each remote
+operation shuld be atomic (all happens or nothing happens) - this is the
+responsibility of the remote server.</p>
+<p>An <code>RDFConnection</code> will at least provide the client-side locking features.
+This means that overlapping operations that change data are naturally
+handled by the transaction pattern within a single JVM.</p>
+<h2 id="graph-store-protocol">Graph Store Protocol<a class="headerlink" href="#graph-store-protocol" title="Permanent link">&para;</a></h2>
+<p>The <a href="http://www.w3.org/TR/sparql11-http-rdf-update/">SPARQL Graph
+Store Protocol</a> (GSP) is a set of operations to work on whole graphs in a
+dataset.  It provides a standardised way to manage the data in a dataset.</p>
+<p>The operations are to fetch a graph, set the RDF data in a graph,
+add more RDF data into a graph, and delete a graph from a dataset.</p>
+<p>For example: load two files:
+    try ( RDFConnection conn = RDFConnectionFactory.connect(...) ) {
+        conn.load("data1.ttl") ;
+        conn.load("data2.nt") ;
+      } </p>
+<p>The file extension is used to determine the syntax.</p>
+<p>There is also a set of scripts to help do these operations from the command
+line with &lt;a href="http://jena.apache.org/documentation/fuseki2/soh.html"</p>
+<blockquote>
+<p>SOH</a>. It is possible to write curl scripts as well.  The SPARQL Graph
+Store Protocol provides a standardised way to manage the data in a dataset.</p>
+</blockquote>
+<p>In addition, <code>RDFConnection</code> provides an extension to give the same style
+of operation to work on a whole dataset (deleting the dataset is not
+provided).</p>
+<div class="codehilite"><pre><span class="n">conn</span><span class="p">.</span><span class="n">loadDataset</span><span class="p">(</span>&quot;<span class="n">data</span><span class="o">-</span><span class="n">complete</span><span class="p">.</span><span class="n">trig</span>&quot;<span class="p">)</span> <span class="p">;</span>
+</pre></div>
+
+
+<h3 id="local-vs-remote">Local vs Remote<a class="headerlink" href="#local-vs-remote" title="Permanent link">&para;</a></h3>
+<p>GSP operations work on while models and datasets. When used on a remote connection, 
+the result of a GSP operation is a separate copy of the remote RDF data.  When working
+with local connections, 3 isolations modes are available:</p>
+<ul>
+<li>Copy &ndash; the models and datasets returned are independent copies.
+Updates are made to the return copy only. This is most like
+a remote connectionand is useful for testing.</li>
+<li>Read-only &ndash; the models and datasets are made read-only but any changes
+to the underlying RDF data by changes by another route will be visible.
+This provides a form of checking for large datasets when "copy" is impractical.</li>
+<li>None &ndash; the models and datasets are passed back with no additional wrappers
+and they can be updated with the changes being made the underlying dataset.</li>
+</ul>
+<p>The default for a local <code>RDFConnection</code> is "none".  </p>
+<h2 id="query-usage">Query Usage<a class="headerlink" href="#query-usage" title="Permanent link">&para;</a></h2>
+<p><code>RDFConnection</code> provides methods for each of the SPARQL query forms (<code>SELECT</code>,
+<code>CONSTRUCT</code>, <code>DESCRIBE</code>, <code>ASK</code>) as well as a way to get the lower level
+<code>QueryExecution</code> for specialized configuration.</p>
+<p>When creating an <code>QueryExecution</code> explicitly, care shoud be taken to close
+it. If the application wishes to capture the result set from a SELECT query and
+retain it across the lifetime of the transaction or <code>QueryExecution</code>, then
+the application should create a copy which is not attached to any external system
+with <code>ResultSetFactory.copyResults</code>.</p>
+<div class="codehilite"><pre>  <span class="k">try</span> <span class="p">(</span> <span class="n">RDFConnection</span> <span class="n">conn</span> <span class="p">=</span> <span class="n">RDFConnectionFactory</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span>&quot;<span class="n">foo</span>&quot;<span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
+      <span class="n">ResultSet</span> <span class="n">safeCopy</span> <span class="p">=</span>
+          <span class="n">Txn</span><span class="p">.</span><span class="n">execReadReturn</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="p">()</span><span class="o">-&gt;</span> <span class="p">{</span>
+              <span class="o">//</span> <span class="n">Process</span> <span class="n">results</span> <span class="n">by</span> <span class="n">row</span><span class="p">:</span>
+              <span class="n">conn</span><span class="p">.</span><span class="n">querySelect</span><span class="p">(</span>&quot;<span class="n">SELECT</span> <span class="n">DISTINCT</span> ?<span class="n">s</span> <span class="p">{</span> ?<span class="n">s</span> ?<span class="n">p</span> ?<span class="n">o</span> <span class="p">}</span>&quot;<span class="p">,</span> <span class="p">(</span><span class="n">qs</span><span class="p">)</span><span class="o">-&gt;</span><span class="p">{</span>
+                  <span class="n">Resource</span> <span class="n">subject</span> <span class="p">=</span> <span class="n">qs</span><span class="p">.</span><span class="n">getResource</span><span class="p">(</span>&quot;<span class="n">s</span>&quot;<span class="p">)</span> <span class="p">;</span>
+                  <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span>&quot;<span class="n">Subject</span><span class="p">:</span> &quot;<span class="o">+</span><span class="n">subject</span><span class="p">)</span> <span class="p">;</span>
+              <span class="p">})</span> <span class="p">;</span>
+              <span class="n">ResultSet</span> <span class="n">rs</span> <span class="p">=</span> <span class="n">conn</span><span class="p">.</span><span class="n">query</span><span class="p">(</span>&quot;<span class="n">SELECT</span> <span class="o">*</span> <span class="p">{</span> ?<span class="n">s</span> ?<span class="n">p</span> ?<span class="n">o</span> <span class="p">}</span>&quot;<span class="p">).</span><span class="n">execSelect</span><span class="p">()</span> <span class="p">;</span>
+              <span class="k">return</span> <span class="n">ResultSetFactory</span><span class="p">.</span><span class="n">copyResults</span><span class="p">(</span><span class="n">rs</span><span class="p">)</span> <span class="p">;</span>
+          <span class="p">})</span> <span class="p">;</span>
+  <span class="p">}</span>
+</pre></div>
+
+
+<h2 id="update-usage">Update Usage<a class="headerlink" href="#update-usage" title="Permanent link">&para;</a></h2>
+<p>SPARQL Update opertions can be performed and mixed with other operations.</p>
+<div class="codehilite"><pre>  <span class="k">try</span> <span class="p">(</span> <span class="n">RDFConnection</span> <span class="n">conn</span> <span class="p">=</span> <span class="n">RDFConnectionFactory</span><span class="p">.</span><span class="n">connect</span><span class="p">(...)</span> <span class="p">)</span> <span class="p">{</span>
+      <span class="n">Txn</span><span class="p">.</span><span class="n">execWrite</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="p">()</span><span class="o">-&gt;</span> <span class="p">{</span>
+         <span class="n">conn</span><span class="p">.</span><span class="n">update</span><span class="p">(</span>&quot;<span class="n">DELETE</span> <span class="n">DATA</span> <span class="p">{</span> <span class="p">...</span> <span class="p">}</span>&quot; <span class="p">)</span> <span class="p">;</span>
+         <span class="n">conn</span><span class="p">.</span><span class="n">load</span><span class="p">(</span>&quot;<span class="n">data</span><span class="p">.</span><span class="n">ttl</span>&quot;<span class="p">)</span> <span class="p">;</span>
+         <span class="p">})</span> <span class="p">;</span>
+</pre></div>
+
+
+<h2 id="dataset-operations">Dataset operations<a class="headerlink" href="#dataset-operations" title="Permanent link">&para;</a></h2>
+<p>In addition to the SPARQL Graph Store Protocol, operations on whole
+datasets are provided for fetching (HTTP GET), adding data (HTTP POST) and
+setting the data (HTTP PUT) on a dataset URL.  This assumes the remote
+server supported these REST-style operations.  Apache Jena Fuseki does
+provide these.</p>
+<h2 id="subinterfaces">Subinterfaces<a class="headerlink" href="#subinterfaces" title="Permanent link">&para;</a></h2>
+<p>To help structure code, the <code>RDFConnection</code> consists of a number of
+different interfaces.  An <code>RDFConnection</code> can be passed to application code
+as one of these interfaces so that only certain subsets of the full
+operations are visible to the called code.</p>
+<ul>
+<li>query via <code>SparqlQueryConnection</code></li>
+<li>update via <code>SparqlUpdateConnection</code></li>
+<li>graph store protocol <code>RDFDatasetAccessConnection</code> (read operations),
+   and <code>RDFDatasetConnection</code> (read and write operations).</li>
+</ul>
+<h2 id="examples">Examples<a class="headerlink" href="#examples" title="Permanent link">&para;</a></h2>
+<p>See
+https://github.com/apache/jena/tree/master/jena-rdfconnection/src/main/java/rdfconnection/examples</p>
+  </div>
+</div>
+
+</div><!--/.container -->
+
+    <footer class="footer">
+      <div class="container">
+        <p>Copyright &copy; 2011&ndash;2016 The Apache Software Foundation, Licensed under
+        the <a href="http://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.
+        </p>
+      </div>
+  </footer>
+      
+
+</body>
+</html>