You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2018/10/12 12:19:01 UTC

svn commit: r1843656 [2/50] - in /tinkerpop/site: docs/3.3.4-SNAPSHOT/ docs/3.3.4-SNAPSHOT/dev/developer/ docs/3.3.4-SNAPSHOT/dev/future/ docs/3.3.4-SNAPSHOT/dev/io/ docs/3.3.4-SNAPSHOT/dev/provider/ docs/3.3.4-SNAPSHOT/images/ docs/3.3.4-SNAPSHOT/logs...

Modified: tinkerpop/site/docs/3.3.4-SNAPSHOT/dev/io/index.html
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.3.4-SNAPSHOT/dev/io/index.html?rev=1843656&r1=1843655&r2=1843656&view=diff
==============================================================================
--- tinkerpop/site/docs/3.3.4-SNAPSHOT/dev/io/index.html (original)
+++ tinkerpop/site/docs/3.3.4-SNAPSHOT/dev/io/index.html Fri Oct 12 12:18:57 2018
@@ -701,6 +701,7 @@ table.tableblock.grid-all th.tableblock,
 #footer { background-color: #465158; padding: 2em; }
 
 #footer-text { color: #eee; font-size: 0.8em; text-align: center; }
+.tabs{position:relative;margin:40px auto;width:1024px;max-width:100%;overflow:hidden;padding-top:10px;margin-bottom:60px}.tabs input{position:absolute;z-index:1000;height:50px;left:0;top:0;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);cursor:pointer;margin:0}.tabs input:hover+label{background:#e08f24}.tabs label{background:#e9ffe9;color:#1a1a1a;font-size:15px;line-height:50px;height:60px;position:relative;top:0;padding:0 20px;float:left;display:block;letter-spacing:1px;text-transform:uppercase;font-weight:bold;text-align:center;box-shadow:2px 0 2px rgba(0,0,0,0.1),-2px 0 2px rgba(0,0,0,0.1);box-sizing:border-box;-webkit-transition:all 150ms ease 0s;transition:all 150ms ease 0s}.tabs label:hover{cursor:pointer}.tabs label:after{content:'';background:#609060;position:absolute;bottom:-2px;left:0;width:100%;height:2px;display:block}.tabs-2 input{width:50%}.tabs-2 input.tab-selector-1{left:0%}.tabs-2 input.tab-selector-2{left:50%}.tabs-
 2 label{width:50%}.tabs-3 input{width:33.33333%}.tabs-3 input.tab-selector-1{left:0%}.tabs-3 input.tab-selector-2{left:33.33333%}.tabs-3 input.tab-selector-3{left:66.66667%}.tabs-3 label{width:33.33333%}.tabs-4 input{width:25%}.tabs-4 input.tab-selector-1{left:0%}.tabs-4 input.tab-selector-2{left:25%}.tabs-4 input.tab-selector-3{left:50%}.tabs-4 input.tab-selector-4{left:75%}.tabs-4 label{width:25%}.tabs label:first-of-type{z-index:4}.tab-label-2{z-index:4}.tab-label-3{z-index:3}.tab-label-4{z-index:2}.tabs input:checked+label{background:#609060;color:#fefefe;z-index:6}.clear-shadow{clear:both}.tabcontent{height:auto;width:100%;float:left;position:relative;z-index:5;background:#eee;top:-10px;box-sizing:border-box}.tabcontent>div{position:relative;float:left;width:0;height:0;box-sizing:border-box;top:0;left:0;z-index:1;opacity:0;background:#eee}.tabcontent .CodeRay{background-color:#fefefe}.tabs .tab-selector-1:checked ~ .tabcontent .tabcontent-1{z-index:100;-ms-filter:"progid:DXImag
 eTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-2:checked ~ .tabcontent .tabcontent-2{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-3:checked ~ .tabcontent .tabcontent-3{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-4:checked ~ .tabcontent .tabcontent-4{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}
 
 .invisible {color: rgba(0,0,0,0); font-size: 0;}
 </style>
@@ -2058,6 +2059,9 @@ types. By default, TinkerPop types will
 </div>
 <div class="sect3">
 <h4 id="_double">Double</h4>
+<div class="paragraph">
+<p>While the <code>@value</code> is expected to be a JSON number, it might also be a <code>String</code> of <code>NaN</code>, <code>Infinity</code> or <code>-Infinity</code>.</p>
+</div>
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="json">{
@@ -3688,7 +3692,7 @@ types. By default, TinkerPop types will
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="json">{
   <span class="key"><span class="delimiter">&quot;</span><span class="content">@type</span><span class="delimiter">&quot;</span></span> : <span class="string"><span class="delimiter">&quot;</span><span class="content">g:Order</span><span class="delimiter">&quot;</span></span>,
-  <span class="key"><span class="delimiter">&quot;</span><span class="content">@value</span><span class="delimiter">&quot;</span></span> : <span class="string"><span class="delimiter">&quot;</span><span class="content">incr</span><span class="delimiter">&quot;</span></span>
+  <span class="key"><span class="delimiter">&quot;</span><span class="content">@value</span><span class="delimiter">&quot;</span></span> : <span class="string"><span class="delimiter">&quot;</span><span class="content">shuffle</span><span class="delimiter">&quot;</span></span>
 }</code></pre>
 </div>
 </div>
@@ -6147,7 +6151,7 @@ not have <code>String</code> keys (e.g.
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="json">{
   <span class="key"><span class="delimiter">&quot;</span><span class="content">@type</span><span class="delimiter">&quot;</span></span> : <span class="string"><span class="delimiter">&quot;</span><span class="content">g:Order</span><span class="delimiter">&quot;</span></span>,
-  <span class="key"><span class="delimiter">&quot;</span><span class="content">@value</span><span class="delimiter">&quot;</span></span> : <span class="string"><span class="delimiter">&quot;</span><span class="content">incr</span><span class="delimiter">&quot;</span></span>
+  <span class="key"><span class="delimiter">&quot;</span><span class="content">@value</span><span class="delimiter">&quot;</span></span> : <span class="string"><span class="delimiter">&quot;</span><span class="content">shuffle</span><span class="delimiter">&quot;</span></span>
 }</code></pre>
 </div>
 </div>
@@ -7289,7 +7293,7 @@ class contains a listing of all the defa
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2018-05-11 16:26:42 EDT
+Last updated 2018-10-12 08:14:16 EDT
 </div>
 </div>
 </body>

Modified: tinkerpop/site/docs/3.3.4-SNAPSHOT/dev/provider/index.html
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.3.4-SNAPSHOT/dev/provider/index.html?rev=1843656&r1=1843655&r2=1843656&view=diff
==============================================================================
--- tinkerpop/site/docs/3.3.4-SNAPSHOT/dev/provider/index.html (original)
+++ tinkerpop/site/docs/3.3.4-SNAPSHOT/dev/provider/index.html Fri Oct 12 12:18:57 2018
@@ -701,6 +701,7 @@ table.tableblock.grid-all th.tableblock,
 #footer { background-color: #465158; padding: 2em; }
 
 #footer-text { color: #eee; font-size: 0.8em; text-align: center; }
+.tabs{position:relative;margin:40px auto;width:1024px;max-width:100%;overflow:hidden;padding-top:10px;margin-bottom:60px}.tabs input{position:absolute;z-index:1000;height:50px;left:0;top:0;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);cursor:pointer;margin:0}.tabs input:hover+label{background:#e08f24}.tabs label{background:#e9ffe9;color:#1a1a1a;font-size:15px;line-height:50px;height:60px;position:relative;top:0;padding:0 20px;float:left;display:block;letter-spacing:1px;text-transform:uppercase;font-weight:bold;text-align:center;box-shadow:2px 0 2px rgba(0,0,0,0.1),-2px 0 2px rgba(0,0,0,0.1);box-sizing:border-box;-webkit-transition:all 150ms ease 0s;transition:all 150ms ease 0s}.tabs label:hover{cursor:pointer}.tabs label:after{content:'';background:#609060;position:absolute;bottom:-2px;left:0;width:100%;height:2px;display:block}.tabs-2 input{width:50%}.tabs-2 input.tab-selector-1{left:0%}.tabs-2 input.tab-selector-2{left:50%}.tabs-
 2 label{width:50%}.tabs-3 input{width:33.33333%}.tabs-3 input.tab-selector-1{left:0%}.tabs-3 input.tab-selector-2{left:33.33333%}.tabs-3 input.tab-selector-3{left:66.66667%}.tabs-3 label{width:33.33333%}.tabs-4 input{width:25%}.tabs-4 input.tab-selector-1{left:0%}.tabs-4 input.tab-selector-2{left:25%}.tabs-4 input.tab-selector-3{left:50%}.tabs-4 input.tab-selector-4{left:75%}.tabs-4 label{width:25%}.tabs label:first-of-type{z-index:4}.tab-label-2{z-index:4}.tab-label-3{z-index:3}.tab-label-4{z-index:2}.tabs input:checked+label{background:#609060;color:#fefefe;z-index:6}.clear-shadow{clear:both}.tabcontent{height:auto;width:100%;float:left;position:relative;z-index:5;background:#eee;top:-10px;box-sizing:border-box}.tabcontent>div{position:relative;float:left;width:0;height:0;box-sizing:border-box;top:0;left:0;z-index:1;opacity:0;background:#eee}.tabcontent .CodeRay{background-color:#fefefe}.tabs .tab-selector-1:checked ~ .tabcontent .tabcontent-1{z-index:100;-ms-filter:"progid:DXImag
 eTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-2:checked ~ .tabcontent .tabcontent-2{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-3:checked ~ .tabcontent .tabcontent-3{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-4:checked ~ .tabcontent .tabcontent-4{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}
 
 .invisible {color: rgba(0,0,0,0); font-size: 0;}
 </style>
@@ -805,6 +806,7 @@ table.CodeRay td.code>pre{padding:0}
 <ul class="sectlevel1">
 <li><a href="#graph-system-provider-requirements">Graph System Provider Requirements</a>
 <ul class="sectlevel2">
+<li><a href="#graph-structure-api">Graph Structure API</a></li>
 <li><a href="#_implementing_gremlin_core">Implementing Gremlin-Core</a>
 <ul class="sectlevel3">
 <li><a href="#oltp-implementations">OLTP Implementations</a></li>
@@ -812,6 +814,7 @@ table.CodeRay td.code>pre{padding:0}
 <li><a href="#_hadoop_gremlin_usage">Hadoop-Gremlin Usage</a></li>
 <li><a href="#io-implementations">IO Implementations</a></li>
 <li><a href="#remoteconnection-implementations">RemoteConnection Implementations</a></li>
+<li><a href="#_bulk_import_export">Bulk Import Export</a></li>
 </ul>
 </li>
 <li><a href="#validating-with-gremlin-test">Validating with Gremlin-Test</a></li>
@@ -903,6 +906,103 @@ Gremlin-JS, etc.) will integrate properl
 TinkerPop3 implementation.</p>
 </div>
 <div class="sect2">
+<h3 id="graph-structure-api">Graph Structure API</h3>
+<div class="paragraph">
+<p>The graph structure API of TinkerPop3 provides the interfaces necessary to create a TinkerPop enabled system and
+exposes the basic components of a property graph to include <code>Graph</code>, <code>Vertex</code>, <code>Edge</code>, <code>VertexProperty</code> and <code>Property</code>.
+The structure API can be used directly as follows:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">Graph graph = TinkerGraph.open(); <span class="invisible">//</span><b class="conum">1</b>
+Vertex marko = graph.addVertex(T.label, <span class="string"><span class="delimiter">&quot;</span><span class="content">person</span><span class="delimiter">&quot;</span></span>, T.id, <span class="integer">1</span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">name</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">marko</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">age</span><span class="delimiter">&quot;</span></span>, <span class="integer">29</span>); <span class="invisible">//</span><b class="conum">2</b>
+Vertex vadas = graph.addVertex(T.label, <span class="string"><span class="delimiter">&quot;</span><span class="content">person</span><span class="delimiter">&quot;</span></span>, T.id, <span class="integer">2</span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">name</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">vadas</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">age</span><span class="delimiter">&quot;</span></span>, <span class="integer">27</span>);
+Vertex lop = graph.addVertex(T.label, <span class="string"><span class="delimiter">&quot;</span><span class="content">software</span><span class="delimiter">&quot;</span></span>, T.id, <span class="integer">3</span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">name</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">lop</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">lang</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">java</span><span class="delimiter">&quot;</span></span>);
+Vertex josh = graph.addVertex(T.label, <span class="string"><span class="delimiter">&quot;</span><span class="content">person</span><span class="delimiter">&quot;</span></span>, T.id, <span class="integer">4</span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">name</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">josh</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">age</span><span class="delimiter">&quot;</span></span>, <span class="integer">32</span>);
+Vertex ripple = graph.addVertex(T.label, <span class="string"><span class="delimiter">&quot;</span><span class="content">software</span><span class="delimiter">&quot;</span></span>, T.id, <span class="integer">5</span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">name</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">ripple</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">lang</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">java</span><span class="delimiter">&quot;</span></span>);
+Vertex peter = graph.addVertex(T.label, <span class="string"><span class="delimiter">&quot;</span><span class="content">person</span><span class="delimiter">&quot;</span></span>, T.id, <span class="integer">6</span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">name</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">peter</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">age</span><span class="delimiter">&quot;</span></span>, <span class="integer">35</span>);
+marko.addEdge(<span class="string"><span class="delimiter">&quot;</span><span class="content">knows</span><span class="delimiter">&quot;</span></span>, vadas, T.id, <span class="integer">7</span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">weight</span><span class="delimiter">&quot;</span></span>, <span class="float">0.5f</span>); <span class="invisible">//</span><b class="conum">3</b>
+marko.addEdge(<span class="string"><span class="delimiter">&quot;</span><span class="content">knows</span><span class="delimiter">&quot;</span></span>, josh, T.id, <span class="integer">8</span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">weight</span><span class="delimiter">&quot;</span></span>, <span class="float">1.0f</span>);
+marko.addEdge(<span class="string"><span class="delimiter">&quot;</span><span class="content">created</span><span class="delimiter">&quot;</span></span>, lop, T.id, <span class="integer">9</span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">weight</span><span class="delimiter">&quot;</span></span>, <span class="float">0.4f</span>);
+josh.addEdge(<span class="string"><span class="delimiter">&quot;</span><span class="content">created</span><span class="delimiter">&quot;</span></span>, ripple, T.id, <span class="integer">10</span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">weight</span><span class="delimiter">&quot;</span></span>, <span class="float">1.0f</span>);
+josh.addEdge(<span class="string"><span class="delimiter">&quot;</span><span class="content">created</span><span class="delimiter">&quot;</span></span>, lop, T.id, <span class="integer">11</span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">weight</span><span class="delimiter">&quot;</span></span>, <span class="float">0.4f</span>);
+peter.addEdge(<span class="string"><span class="delimiter">&quot;</span><span class="content">created</span><span class="delimiter">&quot;</span></span>, lop, T.id, <span class="integer">12</span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">weight</span><span class="delimiter">&quot;</span></span>, <span class="float">0.2f</span>);</code></pre>
+</div>
+</div>
+<div class="colist arabic">
+<ol>
+<li>
+<p>Create a new in-memory <code>TinkerGraph</code> and assign it to the variable <code>graph</code>.</p>
+</li>
+<li>
+<p>Create a vertex along with a set of key/value pairs with <code>T.label</code> being the vertex label and <code>T.id</code> being the vertex id.</p>
+</li>
+<li>
+<p>Create an edge along with a  set of key/value pairs with the edge label being specified as the first argument.</p>
+</li>
+</ol>
+</div>
+<div class="paragraph">
+<p>In the above code all the vertices are created first and then their respective edges. There are two "accessor tokens":
+<code>T.id</code> and <code>T.label</code>. When any of these, along with a set of other key value pairs is provided to
+<code>Graph.addVertex(Object&#8230;&#8203;)</code> or <code>Vertex.addEdge(String,Vertex,Object&#8230;&#8203;)</code>, the respective element is created along
+with the provided key/value pair properties appended to it.</p>
+</div>
+<div class="paragraph">
+<p>Below is a sequence of basic graph mutation operations represented in Java 8. One of the major differences between
+TinkerPop2 and TinkerPop3 is that in TinkerPop3, the Java convention of using setters and getters has been abandoned
+in favor of a syntax that is more aligned with the syntax of Gremlin-Groovy in TinkerPop2. Given that Gremlin-Java8
+and Gremlin-Groovy are nearly identical due to the inclusion of Java 8 lambdas, a big effort was made to ensure that
+both languages are as similar as possible.</p>
+</div>
+<div class="paragraph">
+<p><span class="image" style="float: right"><img src="../../images/basic-mutation.png" alt="basic mutation" width="240"></span></p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">// create a new graph</span>
+Graph graph = TinkerGraph.open();
+<span class="comment">// add a software vertex with a name property</span>
+Vertex gremlin = graph.addVertex(T.label, <span class="string"><span class="delimiter">&quot;</span><span class="content">software</span><span class="delimiter">&quot;</span></span>,
+                             <span class="string"><span class="delimiter">&quot;</span><span class="content">name</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">gremlin</span><span class="delimiter">&quot;</span></span>); <span class="invisible">//</span><b class="conum">1</b>
+<span class="comment">// only one vertex should exist</span>
+<span class="keyword">assert</span>(IteratorUtils.count(graph.vertices()) == <span class="integer">1</span>)
+<span class="comment">// no edges should exist as none have been created</span>
+<span class="keyword">assert</span>(IteratorUtils.count(graph.edges()) == <span class="integer">0</span>)
+<span class="comment">// add a new property</span>
+gremlin.property(<span class="string"><span class="delimiter">&quot;</span><span class="content">created</span><span class="delimiter">&quot;</span></span>,<span class="integer">2009</span>) <span class="invisible">//</span><b class="conum">2</b>
+<span class="comment">// add a new software vertex to the graph</span>
+Vertex blueprints = graph.addVertex(T.label, <span class="string"><span class="delimiter">&quot;</span><span class="content">software</span><span class="delimiter">&quot;</span></span>,
+                                <span class="string"><span class="delimiter">&quot;</span><span class="content">name</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">blueprints</span><span class="delimiter">&quot;</span></span>); <span class="invisible">//</span><b class="conum">3</b>
+<span class="comment">// connect gremlin to blueprints via a dependsOn-edge</span>
+gremlin.addEdge(<span class="string"><span class="delimiter">&quot;</span><span class="content">dependsOn</span><span class="delimiter">&quot;</span></span>,blueprints); <span class="invisible">//</span><b class="conum">4</b>
+<span class="comment">// now there are two vertices and one edge</span>
+<span class="keyword">assert</span>(IteratorUtils.count(graph.vertices()) == <span class="integer">2</span>)
+<span class="keyword">assert</span>(IteratorUtils.count(graph.edges()) == <span class="integer">1</span>)
+<span class="comment">// add a property to blueprints</span>
+blueprints.property(<span class="string"><span class="delimiter">&quot;</span><span class="content">created</span><span class="delimiter">&quot;</span></span>,<span class="integer">2010</span>) <span class="invisible">//</span><b class="conum">5</b>
+<span class="comment">// remove that property</span>
+blueprints.property(<span class="string"><span class="delimiter">&quot;</span><span class="content">created</span><span class="delimiter">&quot;</span></span>).remove() <span class="invisible">//</span><b class="conum">6</b>
+<span class="comment">// connect gremlin to blueprints via encapsulates</span>
+gremlin.addEdge(<span class="string"><span class="delimiter">&quot;</span><span class="content">encapsulates</span><span class="delimiter">&quot;</span></span>,blueprints) <span class="invisible">//</span><b class="conum">7</b>
+<span class="keyword">assert</span>(IteratorUtils.count(graph.vertices()) == <span class="integer">2</span>)
+<span class="keyword">assert</span>(IteratorUtils.count(graph.edges()) == <span class="integer">2</span>)
+<span class="comment">// removing a vertex removes all its incident edges as well</span>
+blueprints.remove() <span class="invisible">//</span><b class="conum">8</b>
+gremlin.remove() <span class="invisible">//</span><b class="conum">9</b>
+<span class="comment">// the graph is now empty</span>
+<span class="keyword">assert</span>(IteratorUtils.count(graph.vertices()) == <span class="integer">0</span>)
+<span class="keyword">assert</span>(IteratorUtils.count(graph.edges()) == <span class="integer">0</span>)
+<span class="comment">// tada!</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The above code samples are just examples of how the structure API can be used to access a graph. Those APIs are then
+used internally by the process API (i.e. Gremlin) to access any graph that implements those structure API interfaces
+to execute queries. Typically, the structure API methods are not used directly by end-users.</p>
+</div>
+</div>
+<div class="sect2">
 <h3 id="_implementing_gremlin_core">Implementing Gremlin-Core</h3>
 <div class="paragraph">
 <p>The classes that a graph system provider should focus on implementing are itemized below. It is a good idea to study
@@ -1599,6 +1699,21 @@ similar to Gremlin Server that can accep
 reason to implement this interface.</p>
 </div>
 </div>
+<div class="sect3">
+<h4 id="_bulk_import_export">Bulk Import Export</h4>
+<div class="paragraph">
+<p>When it comes to doing "bulk" operations, the diverse nature of the available graph databases and their specific
+capabilities, prevents TinkerPop from doing a good job of generalizing that capability well. TinkerPop refers users to
+the bulk import/export facilities of specific graph providers as they tend to be more efficient and easier to use than
+the options TinkerPop has tried to generalize in the past.</p>
+</div>
+<div class="paragraph">
+<p>That said, for graph providers that don&#8217;t have a special bulk loading feature, they can get a basic bulk loader from
+TinkerPop using the <a href="http://tinkerpop.apache.org/docs/3.3.4-SNAPSHOT/reference/#clonevertexprogram">CloneVertexProgram</a>.
+Simply provide a <code>InputFormat</code> and <code>OutputFormat</code> that can be referenced by a <code>HadoopGraph</code> instance as discussed
+in the <a href="http://tinkerpop.apache.org/docs/3.3.4-SNAPSHOT/reference/#clonevertexprogram">Reference Documentation</a>.</p>
+</div>
+</div>
 </div>
 <div class="sect2">
 <h3 id="validating-with-gremlin-test">Validating with Gremlin-Test</h3>
@@ -2559,14 +2674,21 @@ twenty. Under this model, the amount of
 <div class="paragraph">
 <p>To demonstrate consider this example:</p>
 </div>
+<section class="tabs tabs-2">
+  <input id="tab-1539340909-1" type="radio" name="radio-set-1539340909-1" class="tab-selector-1" checked="checked" />
+  <label for="tab-1539340909-1" class="tab-label-1">console (groovy)</label>
+  <input id="tab-1539340909-2" type="radio" name="radio-set-1539340909-1" class="tab-selector-2" />
+  <label for="tab-1539340909-2" class="tab-label-2">groovy</label>
+  <div class="tabcontent">
+    <div class="tabcontent-1">
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="groovy">gremlin&gt; cluster = Cluster.open()
 ==&gt;localhost/<span class="float">127.0</span><span class="float">.0</span><span class="float">.1</span>:<span class="integer">8182</span>
 gremlin&gt; client = cluster.connect()
-==&gt;org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>ClusteredClient<span class="error">@</span><span class="float">4d</span>f7b4ac
+==&gt;org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>ClusteredClient<span class="error">@</span><span class="integer">11</span>cadb32
 gremlin&gt; aliased = client.alias(<span class="string"><span class="delimiter">&quot;</span><span class="content">g</span><span class="delimiter">&quot;</span></span>)
-==&gt;org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>AliasClusteredClient<span class="error">@</span><span class="integer">6</span>a04d2a4
+==&gt;org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>AliasClusteredClient<span class="error">@</span><span class="integer">1488</span>a861
 gremlin&gt; g = org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph.INSTANCE.traversal() <span class="invisible">//</span><b class="conum">1</b><span class="invisible">\</span>
 ==&gt;graphtraversalsource[emptygraph[empty], standard]
 gremlin&gt; rs = aliased.submit(g.V().both().barrier().both().barrier()).all().get() <span class="invisible">//</span><b class="conum">2</b><span class="invisible">\</span>
@@ -2587,6 +2709,24 @@ gremlin&gt; rs.collect{[<span class="key
 ==&gt;[<span class="key">value</span>:v[<span class="integer">2</span>],<span class="key">bulk</span>:<span class="integer">3</span>]</code></pre>
 </div>
 </div>
+    </div>
+  </div>
+  <div class="tabcontent">
+    <div class="tabcontent-2">
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy">cluster = Cluster.open()
+client = cluster.connect()
+aliased = client.alias(<span class="string"><span class="delimiter">&quot;</span><span class="content">g</span><span class="delimiter">&quot;</span></span>)
+g = org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph.INSTANCE.traversal() <span class="invisible">//</span><b class="conum">1</b><span class="invisible">\</span>
+rs = aliased.submit(g.V().both().barrier().both().barrier()).all().get() <span class="invisible">//</span><b class="conum">2</b><span class="invisible">\</span>
+aliased.submit(g.V().both().barrier().both().barrier().count()).all().get().get(<span class="integer">0</span>).getInt() <span class="invisible">//</span><b class="conum">3</b><span class="invisible">\</span>
+rs.collect{[<span class="key">value</span>: <span class="local-variable">it</span>.getObject().get(), <span class="key">bulk</span>: <span class="local-variable">it</span>.getObject().bulk()]}                      <span class="invisible">//</span><b class="conum">4</b></code></pre>
+</div>
+</div>
+    </div>
+  </div>
+</section>
 <div class="colist arabic">
 <ol>
 <li>
@@ -3274,7 +3414,7 @@ in use with the Gremlin Console plugin h
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2018-05-11 15:41:40 EDT
+Last updated 2018-10-12 08:05:45 EDT
 </div>
 </div>
 </body>

Added: tinkerpop/site/docs/3.3.4-SNAPSHOT/images/practical-gremlin.png
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.3.4-SNAPSHOT/images/practical-gremlin.png?rev=1843656&view=auto
==============================================================================
Binary file - no diff available.

Propchange: tinkerpop/site/docs/3.3.4-SNAPSHOT/images/practical-gremlin.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: tinkerpop/site/docs/3.3.4-SNAPSHOT/images/traversal-mechanics.png
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.3.4-SNAPSHOT/images/traversal-mechanics.png?rev=1843656&r1=1843655&r2=1843656&view=diff
==============================================================================
Binary files - no diff available.

Modified: tinkerpop/site/docs/3.3.4-SNAPSHOT/index.html
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.3.4-SNAPSHOT/index.html?rev=1843656&r1=1843655&r2=1843656&view=diff
==============================================================================
--- tinkerpop/site/docs/3.3.4-SNAPSHOT/index.html (original)
+++ tinkerpop/site/docs/3.3.4-SNAPSHOT/index.html Fri Oct 12 12:18:57 2018
@@ -701,6 +701,7 @@ table.tableblock.grid-all th.tableblock,
 #footer { background-color: #465158; padding: 2em; }
 
 #footer-text { color: #eee; font-size: 0.8em; text-align: center; }
+.tabs{position:relative;margin:40px auto;width:1024px;max-width:100%;overflow:hidden;padding-top:10px;margin-bottom:60px}.tabs input{position:absolute;z-index:1000;height:50px;left:0;top:0;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);cursor:pointer;margin:0}.tabs input:hover+label{background:#e08f24}.tabs label{background:#e9ffe9;color:#1a1a1a;font-size:15px;line-height:50px;height:60px;position:relative;top:0;padding:0 20px;float:left;display:block;letter-spacing:1px;text-transform:uppercase;font-weight:bold;text-align:center;box-shadow:2px 0 2px rgba(0,0,0,0.1),-2px 0 2px rgba(0,0,0,0.1);box-sizing:border-box;-webkit-transition:all 150ms ease 0s;transition:all 150ms ease 0s}.tabs label:hover{cursor:pointer}.tabs label:after{content:'';background:#609060;position:absolute;bottom:-2px;left:0;width:100%;height:2px;display:block}.tabs-2 input{width:50%}.tabs-2 input.tab-selector-1{left:0%}.tabs-2 input.tab-selector-2{left:50%}.tabs-
 2 label{width:50%}.tabs-3 input{width:33.33333%}.tabs-3 input.tab-selector-1{left:0%}.tabs-3 input.tab-selector-2{left:33.33333%}.tabs-3 input.tab-selector-3{left:66.66667%}.tabs-3 label{width:33.33333%}.tabs-4 input{width:25%}.tabs-4 input.tab-selector-1{left:0%}.tabs-4 input.tab-selector-2{left:25%}.tabs-4 input.tab-selector-3{left:50%}.tabs-4 input.tab-selector-4{left:75%}.tabs-4 label{width:25%}.tabs label:first-of-type{z-index:4}.tab-label-2{z-index:4}.tab-label-3{z-index:3}.tab-label-4{z-index:2}.tabs input:checked+label{background:#609060;color:#fefefe;z-index:6}.clear-shadow{clear:both}.tabcontent{height:auto;width:100%;float:left;position:relative;z-index:5;background:#eee;top:-10px;box-sizing:border-box}.tabcontent>div{position:relative;float:left;width:0;height:0;box-sizing:border-box;top:0;left:0;z-index:1;opacity:0;background:#eee}.tabcontent .CodeRay{background-color:#fefefe}.tabs .tab-selector-1:checked ~ .tabcontent .tabcontent-1{z-index:100;-ms-filter:"progid:DXImag
 eTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-2:checked ~ .tabcontent .tabcontent-2{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-3:checked ~ .tabcontent .tabcontent-3{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-4:checked ~ .tabcontent .tabcontent-4{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}
 
 .invisible {color: rgba(0,0,0,0); font-size: 0;}
 </style>
@@ -913,8 +914,8 @@ and an overview of Gremlin. (<strong>ext
 A series of blog posts that examine the Gremlin language in the context of various graph traversal patterns. (<strong>external</strong>)</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-center valign-top"><p class="tableblock"><span class="image"><img src="images/gremlin-running.png" alt="gremlin running" width="125"></span></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="http://kelvinlawrence.net/book/Gremlin-Graph-Guide.html">Graph Databases, Gremlin and TinkerPop: A Tutorial</a><br>
+<td class="tableblock halign-center valign-top"><p class="tableblock"><span class="image"><img src="images/practical-gremlin.png" alt="practical gremlin" width="200"></span></p></td>
+<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="http://kelvinlawrence.net/book/Gremlin-Graph-Guide.html">Practical Gremlin: An Apache TinkerPop Tutorial</a><br>
 A getting started guide for users of graph databases and the Gremlin query language featuring hints, tips and sample queries. (<strong>external</strong>)</p></td>
 </tr>
 </tbody>
@@ -1003,7 +1004,7 @@ Reference Documentation for providers an
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2018-05-11 16:26:43 EDT
+Last updated 2018-10-12 08:14:17 EDT
 </div>
 </div>
 </body>