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 2017/10/14 12:40:42 UTC
svn commit: r1812179 [4/50] - in /tinkerpop/site: docs/3.3.1-SNAPSHOT/
docs/3.3.1-SNAPSHOT/dev/developer/ docs/3.3.1-SNAPSHOT/dev/io/
docs/3.3.1-SNAPSHOT/dev/provider/ docs/3.3.1-SNAPSHOT/images/
docs/3.3.1-SNAPSHOT/recipes/ docs/3.3.1-SNAPSHOT/referen...
Modified: tinkerpop/site/docs/3.3.1-SNAPSHOT/reference/index.html
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.3.1-SNAPSHOT/reference/index.html?rev=1812179&r1=1812178&r2=1812179&view=diff
==============================================================================
--- tinkerpop/site/docs/3.3.1-SNAPSHOT/reference/index.html (original)
+++ tinkerpop/site/docs/3.3.1-SNAPSHOT/reference/index.html Sat Oct 14 12:40:39 2017
@@ -839,11 +839,7 @@ table.CodeRay td.code>pre{padding:0}
<li><a href="#_gremlin_i_o">Gremlin I/O</a>
<ul class="sectlevel2">
<li><a href="#_graphml_reader_writer">GraphML Reader/Writer</a></li>
-<li><a href="#graphson-reader-writer">GraphSON Reader/Writer</a>
-<ul class="sectlevel3">
-<li><a href="#graphson-types-embedding">Types embedding</a></li>
-</ul>
-</li>
+<li><a href="#graphson-reader-writer">GraphSON Reader/Writer</a></li>
<li><a href="#gryo-reader-writer">Gryo Reader/Writer</a></li>
<li><a href="#_tinkerpop2_data_migration">TinkerPop2 Data Migration</a></li>
</ul>
@@ -894,6 +890,7 @@ table.CodeRay td.code>pre{padding:0}
<li><a href="#using-where-with-match">Using Where with Match</a></li>
</ul>
</li>
+<li><a href="#math-step">Math Step</a></li>
<li><a href="#max-step">Max Step</a></li>
<li><a href="#mean-step">Mean Step</a></li>
<li><a href="#min-step">Min Step</a></li>
@@ -1020,7 +1017,7 @@ table.CodeRay td.code>pre{padding:0}
<li><a href="#_configuring_2">Configuring</a>
<ul class="sectlevel3">
<li><a href="#opprocessor-configurations">OpProcessor Configurations</a></li>
-<li><a href="#_security">Security</a></li>
+<li><a href="#security">Security</a></li>
<li><a href="#_serialization_2">Serialization</a></li>
<li><a href="#metrics">Metrics</a></li>
<li><a href="#_as_a_service">As A Service</a></li>
@@ -2032,13 +2029,6 @@ gremlin> graph.features()
>-- <span class="key">ThreadedTransactions</span>: <span class="predefined-constant">false</span>
> VariableFeatures
>-- <span class="key">Variables</span>: <span class="predefined-constant">true</span>
->-- <span class="key">BooleanValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">ByteValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">DoubleValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">FloatValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">IntegerValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">LongValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">MapValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">MixedListValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">SerializableValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">StringValues</span>: <span class="predefined-constant">true</span>
@@ -2050,36 +2040,36 @@ gremlin> graph.features()
>-- <span class="key">IntegerArrayValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">LongArrayValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">StringArrayValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">LongValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">BooleanValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">ByteValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">DoubleValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">FloatValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">IntegerValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">MapValues</span>: <span class="predefined-constant">true</span>
> VertexFeatures
+>-- <span class="key">MetaProperties</span>: <span class="predefined-constant">true</span>
>-- <span class="key">AddVertices</span>: <span class="predefined-constant">true</span>
>-- <span class="key">RemoveVertices</span>: <span class="predefined-constant">true</span>
->-- <span class="key">MetaProperties</span>: <span class="predefined-constant">true</span>
>-- <span class="key">DuplicateMultiProperties</span>: <span class="predefined-constant">true</span>
>-- <span class="key">MultiProperties</span>: <span class="predefined-constant">true</span>
->-- <span class="key">UserSuppliedIds</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">NumericIds</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">StringIds</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">UuidIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">CustomIds</span>: <span class="predefined-constant">false</span>
>-- <span class="key">AnyIds</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">UserSuppliedIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">AddProperty</span>: <span class="predefined-constant">true</span>
->-- <span class="key">UuidIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">RemoveProperty</span>: <span class="predefined-constant">true</span>
+> VertexPropertyFeatures
>-- <span class="key">NumericIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">StringIds</span>: <span class="predefined-constant">true</span>
-> VertexPropertyFeatures
->-- <span class="key">UserSuppliedIds</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">UuidIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">CustomIds</span>: <span class="predefined-constant">false</span>
>-- <span class="key">AnyIds</span>: <span class="predefined-constant">true</span>
->-- <span class="key">UuidIds</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">UserSuppliedIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">RemoveProperty</span>: <span class="predefined-constant">true</span>
->-- <span class="key">NumericIds</span>: <span class="predefined-constant">true</span>
->-- <span class="key">StringIds</span>: <span class="predefined-constant">true</span>
>-- <span class="predefined-type">Properties</span>: <span class="predefined-constant">true</span>
->-- <span class="key">BooleanValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">ByteValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">DoubleValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">FloatValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">IntegerValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">LongValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">MapValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">MixedListValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">SerializableValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">StringValues</span>: <span class="predefined-constant">true</span>
@@ -2091,26 +2081,26 @@ gremlin> graph.features()
>-- <span class="key">IntegerArrayValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">LongArrayValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">StringArrayValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">LongValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">BooleanValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">ByteValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">DoubleValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">FloatValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">IntegerValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">MapValues</span>: <span class="predefined-constant">true</span>
> EdgeFeatures
>-- <span class="key">AddEdges</span>: <span class="predefined-constant">true</span>
>-- <span class="key">RemoveEdges</span>: <span class="predefined-constant">true</span>
->-- <span class="key">UserSuppliedIds</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">NumericIds</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">StringIds</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">UuidIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">CustomIds</span>: <span class="predefined-constant">false</span>
>-- <span class="key">AnyIds</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">UserSuppliedIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">AddProperty</span>: <span class="predefined-constant">true</span>
->-- <span class="key">UuidIds</span>: <span class="predefined-constant">true</span>
>-- <span class="key">RemoveProperty</span>: <span class="predefined-constant">true</span>
->-- <span class="key">NumericIds</span>: <span class="predefined-constant">true</span>
->-- <span class="key">StringIds</span>: <span class="predefined-constant">true</span>
> EdgePropertyFeatures
>-- <span class="predefined-type">Properties</span>: <span class="predefined-constant">true</span>
->-- <span class="key">BooleanValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">ByteValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">DoubleValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">FloatValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">IntegerValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">LongValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">MapValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">MixedListValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">SerializableValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">StringValues</span>: <span class="predefined-constant">true</span>
@@ -2121,7 +2111,14 @@ gremlin> graph.features()
>-- <span class="key">FloatArrayValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">IntegerArrayValues</span>: <span class="predefined-constant">true</span>
>-- <span class="key">LongArrayValues</span>: <span class="predefined-constant">true</span>
->-- <span class="key">StringArrayValues</span>: <span class="predefined-constant">true</span></code></pre>
+>-- <span class="key">StringArrayValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">LongValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">BooleanValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">ByteValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">DoubleValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">FloatValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">IntegerValues</span>: <span class="predefined-constant">true</span>
+>-- <span class="key">MapValues</span>: <span class="predefined-constant">true</span></code></pre>
</div>
</div>
<div class="paragraph">
@@ -2873,12 +2870,24 @@ called <code>tinkerpop-modern.json</code
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">final</span> Graph graph = TinkerFactory.createModern();
-graph.io(IoCore.graphson()).writeGraph(<span class="string"><span class="delimiter">"</span><span class="content">tinkerpop-modern.json</span><span class="delimiter">"</span></span>);
+graph.io(graphson()).writeGraph(<span class="string"><span class="delimiter">"</span><span class="content">tinkerpop-modern.json</span><span class="delimiter">"</span></span>);
<span class="directive">final</span> Graph newGraph = TinkerGraph.open();
-newGraph.io(IoCore.graphson()).readGraph(<span class="string"><span class="delimiter">"</span><span class="content">tinkerpop-modern.json</span><span class="delimiter">"</span></span>);</code></pre>
+newGraph.io(graphson()).readGraph(<span class="string"><span class="delimiter">"</span><span class="content">tinkerpop-modern.json</span><span class="delimiter">"</span></span>);</code></pre>
</div>
</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<div class="title">Note</div>
+</td>
+<td class="content">
+Using <code>graphson()</code>, which is a static helper method of <code>IoCore</code>, will default to the most current version of GraphSON which is 3.0.
+</td>
+</tr>
+</table>
+</div>
<div class="paragraph">
<p>If a custom configuration is required, then have the <code>Graph</code> generate a <code>GraphReader</code> or <code>GraphWriter</code> "builder" instance:</p>
</div>
@@ -2887,20 +2896,17 @@ newGraph.io(IoCore.graphson()).readGraph
<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">final</span> Graph graph = TinkerFactory.createModern();
<span class="keyword">try</span> (<span class="directive">final</span> <span class="predefined-type">OutputStream</span> os = <span class="keyword">new</span> <span class="predefined-type">FileOutputStream</span>(<span class="string"><span class="delimiter">"</span><span class="content">tinkerpop-modern.json</span><span class="delimiter">"</span></span>)) {
<span class="directive">final</span> GraphSONMapper mapper = graph.io(IoCore.graphson()).mapper().normalize(<span class="predefined-constant">true</span>).create()
- graph.io(IoCore.graphson()).writer().mapper(mapper).create().writeGraph(os, graph)
+ graph.io(graphson()).writer().mapper(mapper).create().writeGraph(os, graph)
}
<span class="directive">final</span> Graph newGraph = TinkerGraph.open();
<span class="keyword">try</span> (<span class="directive">final</span> <span class="predefined-type">InputStream</span> stream = <span class="keyword">new</span> <span class="predefined-type">FileInputStream</span>(<span class="string"><span class="delimiter">"</span><span class="content">tinkerpop-modern.json</span><span class="delimiter">"</span></span>)) {
- newGraph.io(IoCore.graphson()).reader().create().readGraph(stream, newGraph);
+ newGraph.io(graphson()).reader().create().readGraph(stream, newGraph);
}</code></pre>
</div>
</div>
<div class="paragraph">
-<p>One of the important configuration options of the <code>GraphSONReader</code> and <code>GraphSONWriter</code> is the ability to embed type
-information into the output. By embedding the types, it becomes possible to serialize a graph without losing type
-information that might be important when being consumed by another source. The importance of this concept is
-demonstrated in the following example where a single <code>Vertex</code> is written to GraphSON using the Gremlin Console:</p>
+<p>The following example shows how a single <code>Vertex</code> is written to GraphSON using the Gremlin Console:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -2920,78 +2926,86 @@ gremlin> f.close()</code></pre>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="json">{
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: <span class="integer">1</span>,
+ <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int32</span><span class="delimiter">"</span></span>,
+ <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">1</span>
+ },
<span class="key"><span class="delimiter">"</span><span class="content">label</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">person</span><span class="delimiter">"</span></span>,
<span class="key"><span class="delimiter">"</span><span class="content">outE</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">created</span><span class="delimiter">"</span></span>: [
- {
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: <span class="integer">9</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">inV</span><span class="delimiter">"</span></span>: <span class="integer">3</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">properties</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>: <span class="float">0.4</span>
+ <span class="key"><span class="delimiter">"</span><span class="content">created</span><span class="delimiter">"</span></span>: [{
+ <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int32</span><span class="delimiter">"</span></span>,
+ <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">9</span>
+ },
+ <span class="key"><span class="delimiter">"</span><span class="content">inV</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int32</span><span class="delimiter">"</span></span>,
+ <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">3</span>
+ },
+ <span class="key"><span class="delimiter">"</span><span class="content">properties</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Double</span><span class="delimiter">"</span></span>,
+ <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="float">0.4</span>
}
}
- ],
- <span class="key"><span class="delimiter">"</span><span class="content">knows</span><span class="delimiter">"</span></span>: [
- {
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: <span class="integer">7</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">inV</span><span class="delimiter">"</span></span>: <span class="integer">2</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">properties</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>: <span class="float">0.5</span>
+ }],
+ <span class="key"><span class="delimiter">"</span><span class="content">knows</span><span class="delimiter">"</span></span>: [{
+ <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int32</span><span class="delimiter">"</span></span>,
+ <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">7</span>
+ },
+ <span class="key"><span class="delimiter">"</span><span class="content">inV</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int32</span><span class="delimiter">"</span></span>,
+ <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">2</span>
+ },
+ <span class="key"><span class="delimiter">"</span><span class="content">properties</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Double</span><span class="delimiter">"</span></span>,
+ <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="float">0.5</span>
}
+ }
+ }, {
+ <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int32</span><span class="delimiter">"</span></span>,
+ <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">8</span>
},
- {
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: <span class="integer">8</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">inV</span><span class="delimiter">"</span></span>: <span class="integer">4</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">properties</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>: <span class="integer">1</span>
+ <span class="key"><span class="delimiter">"</span><span class="content">inV</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int32</span><span class="delimiter">"</span></span>,
+ <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">4</span>
+ },
+ <span class="key"><span class="delimiter">"</span><span class="content">properties</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Double</span><span class="delimiter">"</span></span>,
+ <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="float">1.0</span>
}
}
- ]
+ }]
},
<span class="key"><span class="delimiter">"</span><span class="content">properties</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">name</span><span class="delimiter">"</span></span>: [
- {
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: <span class="integer">0</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">marko</span><span class="delimiter">"</span></span>
- }
- ],
- <span class="key"><span class="delimiter">"</span><span class="content">age</span><span class="delimiter">"</span></span>: [
- {
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: <span class="integer">1</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>: <span class="integer">29</span>
+ <span class="key"><span class="delimiter">"</span><span class="content">name</span><span class="delimiter">"</span></span>: [{
+ <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int64</span><span class="delimiter">"</span></span>,
+ <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">0</span>
+ },
+ <span class="key"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">marko</span><span class="delimiter">"</span></span>
+ }],
+ <span class="key"><span class="delimiter">"</span><span class="content">age</span><span class="delimiter">"</span></span>: [{
+ <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int64</span><span class="delimiter">"</span></span>,
+ <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">1</span>
+ },
+ <span class="key"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>: {
+ <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int32</span><span class="delimiter">"</span></span>,
+ <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">29</span>
}
- ]
+ }]
}
}</code></pre>
</div>
</div>
<div class="paragraph">
-<p>The vertex properly serializes to valid JSON but note that a consuming application will not automatically know how to
-interpret the numeric values. In coercing those Java values to JSON, such information is lost.</p>
-</div>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<div class="title">Note</div>
-</td>
-<td class="content">
-Additional documentation for GraphSON can be found in the <a href="http://tinkerpop.apache.org/docs/3.3.1-SNAPSHOT/dev/io/#graphson">IO Reference</a>.
-</td>
-</tr>
-</table>
-</div>
-<div class="sect3">
-<h4 id="graphson-types-embedding">Types embedding</h4>
-<div class="paragraph">
-<p>With a minor change to the construction of the <code>GraphSONWriter</code> the lossy nature of GraphSON can be avoided.</p>
-</div>
-<div class="sect4">
-<h5 id="graphson-1-0-types">Types with GraphSON 1.0</h5>
-<div class="paragraph">
-<p>GraphSON 1.0 is the version enabled by default when creating a GraphSON Mapper. Here is how to enable types with
-GraphSON 1.0:</p>
+<p>GraphSON has several versions and each has differences that prevent complete compatibility with one another. While the
+default version provided by <code>IoCore.graphson()</code> is recommended, it is possible to make changes to revert to an earlier
+version. The following shows an example of how to use 1.0 (with type embedding):</p>
</div>
<div class="listingblock">
<div class="content">
@@ -3001,170 +3015,23 @@ gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[<span class="key">vertices</span>:<span class="integer">6</span> <span class="key">edges</span>:<span class="integer">6</span>], standard]
gremlin> f = <span class="keyword">new</span> <span class="predefined-type">ByteArrayOutputStream</span>()
==>
-gremlin> mapper = graph.io(graphson()).mapper().typeInfo(TypeInfo.PARTIAL_TYPES).create()
-==>org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper<span class="annotation">@ee2ae9a</span>
-gremlin> graph.io(graphson()).writer().mapper(mapper).create().writeVertex(f, g.V(<span class="integer">1</span>).next(), BOTH)
+gremlin> mapper = graph.io(GraphSONIo.build(GraphSONVersion.V1_0)).mapper().typeInfo(TypeInfo.PARTIAL_TYPES).create()
+==>org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper<span class="error">@</span><span class="integer">1</span>be8c122
+gremlin> graph.io(GraphSONIo.build(GraphSONVersion.V1_0)).writer().mapper(mapper).create().writeVertex(f, g.V(<span class="integer">1</span>).next(), BOTH)
gremlin> f.close()</code></pre>
</div>
</div>
-<div class="paragraph">
-<p>In the above code, the <code>typeInfo</code> option is set to <code>true</code> and the output below shows the difference in the output:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="json">{
- <span class="key"><span class="delimiter">"</span><span class="content">@class</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">java.util.HashMap</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: <span class="integer">1</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">label</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">person</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">outE</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">@class</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">java.util.HashMap</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">created</span><span class="delimiter">"</span></span>: [
- <span class="string"><span class="delimiter">"</span><span class="content">java.util.ArrayList</span><span class="delimiter">"</span></span>,
- [
- {
- <span class="key"><span class="delimiter">"</span><span class="content">@class</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">java.util.HashMap</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: <span class="integer">9</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">inV</span><span class="delimiter">"</span></span>: <span class="integer">3</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">properties</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">@class</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">java.util.HashMap</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>: <span class="float">0.4</span>
- }
- }
- ]
- ],
- <span class="key"><span class="delimiter">"</span><span class="content">knows</span><span class="delimiter">"</span></span>: [
- <span class="string"><span class="delimiter">"</span><span class="content">java.util.ArrayList</span><span class="delimiter">"</span></span>,
- [
- {
- <span class="key"><span class="delimiter">"</span><span class="content">@class</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">java.util.HashMap</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: <span class="integer">7</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">inV</span><span class="delimiter">"</span></span>: <span class="integer">2</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">properties</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">@class</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">java.util.HashMap</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>: <span class="float">0.5</span>
- }
- },
- {
- <span class="key"><span class="delimiter">"</span><span class="content">@class</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">java.util.HashMap</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: <span class="integer">8</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">inV</span><span class="delimiter">"</span></span>: <span class="integer">4</span>,
- <span class="key"><span class="delimiter">"</span><span class="content">properties</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">@class</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">java.util.HashMap</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>: <span class="integer">1</span>
- }
- }
- ]
- ]
- },
- <span class="key"><span class="delimiter">"</span><span class="content">properties</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">@class</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">java.util.HashMap</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">name</span><span class="delimiter">"</span></span>: [
- <span class="string"><span class="delimiter">"</span><span class="content">java.util.ArrayList</span><span class="delimiter">"</span></span>,
- [
- {
- <span class="key"><span class="delimiter">"</span><span class="content">@class</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">java.util.HashMap</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: [
- <span class="string"><span class="delimiter">"</span><span class="content">java.lang.Long</span><span class="delimiter">"</span></span>,
- <span class="integer">0</span>
- ],
- <span class="key"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">marko</span><span class="delimiter">"</span></span>
- }
- ]
- ],
- <span class="key"><span class="delimiter">"</span><span class="content">age</span><span class="delimiter">"</span></span>: [
- <span class="string"><span class="delimiter">"</span><span class="content">java.util.ArrayList</span><span class="delimiter">"</span></span>,
- [
- {
- <span class="key"><span class="delimiter">"</span><span class="content">@class</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">java.util.HashMap</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: [
- <span class="string"><span class="delimiter">"</span><span class="content">java.lang.Long</span><span class="delimiter">"</span></span>,
- <span class="integer">1</span>
- ],
- <span class="key"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>: <span class="integer">29</span>
- }
- ]
- ]
- }
-}</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>The ambiguity of components of the GraphSON is now removed by the <code>@class</code> property, which contains Java class
-information for the data it is associated with. The <code>@class</code> property is used for all non-final types, with the
-exception of a small number of "natural" types (String, Boolean, Integer, and Double) which can be correctly inferred
-from JSON typing. While the output is more verbose, it comes with the security of not losing type information. While
-non-JVM languages won’t be able to consume this information automatically, at least there is a hint as to how the
-values should be coerced back into the correct types in the target language.</p>
-</div>
-</div>
-<div class="sect4">
-<h5 id="graphson-2-0-types">GraphSON 2.0</h5>
-<div class="paragraph">
-<p>GraphSON 2.0 has been introduced to improve the format of the typed values from GraphSON 1.0. It provides non-Java
-centric types information in a consistent format.</p>
-</div>
-<div class="paragraph">
-<p>With GraphSON 2.0, types are enabled by default.</p>
-</div>
-<div class="paragraph">
-<p>The type format is:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>Non typed value - <code>value</code></p>
-</li>
-<li>
-<p>Typed value - <code>{"@type":"typeID", "@value":value}</code></p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>TypeIDs are composed of 2 parts, a namespace, and a type name, in the format <code>"namespace:typename"</code>.
-A namespace gives the possibility for TinkerPop implementors to categorize custom types they may implement
-and avoid collision with existing TinkerPop types. By default, TinkerPop types will have the
-namespace <code>g</code>.</p>
-</div>
-<div class="paragraph">
-<p>GraphSON 2.0 will provide type information for any value that is not <code>String</code>, <code>Boolean</code>, <code>Map</code> or <code>Collection</code>.
-TinkerPop includes types for graph elements:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>Vertex - <code>g:Vertex</code></p>
-</li>
-<li>
-<p>Edge - <code>g:Edge</code></p>
-</li>
-<li>
-<p>VertexPropery - <code>g:VertexProperty</code></p>
-</li>
-<li>
-<p>Property - <code>g:Property</code></p>
-</li>
-<li>
-<p>Path - <code>g:Path</code></p>
-</li>
-<li>
-<p>Tree - <code>g:Tree</code></p>
-</li>
-<li>
-<p>Graph - <code>g:Graph</code></p>
-</li>
-<li>
-<p>Metrics - <code>g:Metrics</code></p>
-</li>
-<li>
-<p>TraversalMetrics - <code>g:TraversalMetrics</code></p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>GraphSON 2.0 can also be configured with "extended" types that build on top of the core types in the "g" namespace.
-The extended types are in the "gx" namespace as exposed by <code>GraphSONXModuleV2d0</code> and includes additional types like
-mappings to Java’s <code>java.time.*</code> classes, <code>BigInteger</code>, <code>BigDecimal</code> and others. This module can be added when building
-a <code>GraphSONMapper</code> by calling the <code>addCustomModule()</code> method on the <code>Builder</code>.</p>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<div class="title">Note</div>
+</td>
+<td class="content">
+Additional documentation for GraphSON can be found in the <a href="http://tinkerpop.apache.org/docs/3.3.1-SNAPSHOT/dev/io/#graphson">IO Reference</a>.
+</td>
+</tr>
+</table>
</div>
<div class="admonitionblock important">
<table>
@@ -3180,98 +3047,6 @@ implementations are only required to sup
</tr>
</table>
</div>
-<div class="paragraph">
-<p>Here’s the same previous example of GraphSON 1.0, but with GraphSON 2.0:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> graph = TinkerFactory.createModern()
-==>tinkergraph[<span class="key">vertices</span>:<span class="integer">6</span> <span class="key">edges</span>:<span class="integer">6</span>]
-gremlin> g = graph.traversal()
-==>graphtraversalsource[tinkergraph[<span class="key">vertices</span>:<span class="integer">6</span> <span class="key">edges</span>:<span class="integer">6</span>], standard]
-gremlin> f = <span class="keyword">new</span> <span class="predefined-type">ByteArrayOutputStream</span>()
-==>
-gremlin> mapper = graph.io(graphson()).mapper().version(GraphSONVersion.V2_0).create()
-==>org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper<span class="error">@</span><span class="float">359e27d</span><span class="integer">2</span>
-gremlin> graph.io(graphson()).writer().mapper(mapper).create().writeVertex(f, g.V(<span class="integer">1</span>).next(), BOTH)
-gremlin> f.close()</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>Creating a GraphSON 2.0 mapper is done by calling <code>.version(GraphSONVersion.V2_0)</code> on the mapper builder. Here’s is the
-example output from the code above:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="json">{
- <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Vertex</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int32</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">1</span>
- },
- <span class="key"><span class="delimiter">"</span><span class="content">label</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">person</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">properties</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">name</span><span class="delimiter">"</span></span>: [{
- <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:VertexProperty</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int64</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">0</span>
- },
- <span class="key"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">marko</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">label</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">name</span><span class="delimiter">"</span></span>
- }
- }],
- <span class="key"><span class="delimiter">"</span><span class="content">uuid</span><span class="delimiter">"</span></span>: [{
- <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:VertexProperty</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int64</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">12</span>
- },
- <span class="key"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:UUID</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">829c7ddb-3831-4687-a872-e25201230cd3</span><span class="delimiter">"</span></span>
- },
- <span class="key"><span class="delimiter">"</span><span class="content">label</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">uuid</span><span class="delimiter">"</span></span>
- }
- }],
- <span class="key"><span class="delimiter">"</span><span class="content">age</span><span class="delimiter">"</span></span>: [{
- <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:VertexProperty</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int64</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">1</span>
- },
- <span class="key"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>: {
- <span class="key"><span class="delimiter">"</span><span class="content">@type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">g:Int32</span><span class="delimiter">"</span></span>,
- <span class="key"><span class="delimiter">"</span><span class="content">@value</span><span class="delimiter">"</span></span>: <span class="integer">29</span>
- },
- <span class="key"><span class="delimiter">"</span><span class="content">label</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">age</span><span class="delimiter">"</span></span>
- }
- }]
- }
- }
-}</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>Types can be disabled when creating a GraphSON 2.0 <code>Mapper</code> with:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="groovy">graph.io(graphson()).mapper().
- version(GraphSONVersion.V2_0).
- typeInfo(GraphSONMapper.TypeInfo.NO_TYPES).create()</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>By disabling types, the JSON payload produced will lack the extra information that is written for types. Please note,
-disabling types can be unsafe with regards to the written data in that types can be lost.</p>
-</div>
-</div>
-</div>
</div>
<div class="sect2">
<h3 id="gryo-reader-writer">Gryo Reader/Writer</h3>
@@ -3316,12 +3091,24 @@ other. Failure to do so, may result in
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">final</span> Graph graph = TinkerFactory.createModern();
-graph.io(IoCore.gryo()).writeGraph(<span class="string"><span class="delimiter">"</span><span class="content">tinkerpop-modern.kryo</span><span class="delimiter">"</span></span>);
+graph.io(gryo()).writeGraph(<span class="string"><span class="delimiter">"</span><span class="content">tinkerpop-modern.kryo</span><span class="delimiter">"</span></span>);
<span class="directive">final</span> Graph newGraph = TinkerGraph.open();
-newGraph.io(IoCore.gryo()).readGraph(<span class="string"><span class="delimiter">"</span><span class="content">tinkerpop-modern.kryo</span><span class="delimiter">"</span></span>);</code></pre>
+newGraph.io(gryo()).readGraph(<span class="string"><span class="delimiter">"</span><span class="content">tinkerpop-modern.kryo</span><span class="delimiter">"</span></span>);</code></pre>
</div>
</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<div class="title">Note</div>
+</td>
+<td class="content">
+Using <code>gryo()</code>, which is a static helper method of <code>IoCore</code>, will default to the most current version of Gryo which is 3.0.
+</td>
+</tr>
+</table>
+</div>
<div class="paragraph">
<p>If a custom configuration is required, then have the <code>Graph</code> generate a <code>GraphReader</code> or <code>GraphWriter</code> "builder" instance:</p>
</div>
@@ -3329,12 +3116,12 @@ newGraph.io(IoCore.gryo()).readGraph(<sp
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">final</span> Graph graph = TinkerFactory.createModern();
<span class="keyword">try</span> (<span class="directive">final</span> <span class="predefined-type">OutputStream</span> os = <span class="keyword">new</span> <span class="predefined-type">FileOutputStream</span>(<span class="string"><span class="delimiter">"</span><span class="content">tinkerpop-modern.kryo</span><span class="delimiter">"</span></span>)) {
- graph.io(IoCore.gryo()).writer().create().writeGraph(os, graph);
+ graph.io(GryoIo.build(GryoVersion.V1_0)).writer().create().writeGraph(os, graph);
}
<span class="directive">final</span> Graph newGraph = TinkerGraph.open();
<span class="keyword">try</span> (<span class="directive">final</span> <span class="predefined-type">InputStream</span> stream = <span class="keyword">new</span> <span class="predefined-type">FileInputStream</span>(<span class="string"><span class="delimiter">"</span><span class="content">tinkerpop-modern.kryo</span><span class="delimiter">"</span></span>)) {
- newGraph.io(IoCore.gryo()).reader().create().readGraph(stream, newGraph);
+ newGraph.io(GryoIo.build(GryoVersion.V1_0)).reader().create().readGraph(stream, newGraph);
}</code></pre>
</div>
</div>
@@ -4220,13 +4007,13 @@ gremlin> graph.io(graphml()).readGrap
gremlin> g = graph.traversal().withoutStrategies(LazyBarrierStrategy) <span class="invisible">//</span><b class="conum">1</b><span class="invisible">\</span>
==>graphtraversalsource[tinkergraph[<span class="key">vertices</span>:<span class="integer">808</span> <span class="key">edges</span>:<span class="integer">8049</span>], standard]
gremlin> clockWithResult(<span class="integer">1</span>){g.V().both().both().both().count().next()} <span class="invisible">//</span><b class="conum">2</b><span class="invisible">\</span>
-==><span class="float">8472.772498999999</span>
+==><span class="float">8890.969459</span>
==><span class="integer">126653966</span>
gremlin> clockWithResult(<span class="integer">1</span>){g.V().repeat(both()).times(<span class="integer">3</span>).count().next()} <span class="invisible">//</span><b class="conum">3</b><span class="invisible">\</span>
-==><span class="float">20.933457</span>
+==><span class="float">14.811992</span>
==><span class="integer">126653966</span>
gremlin> clockWithResult(<span class="integer">1</span>){g.V().both().barrier().both().barrier().both().barrier().count().next()} <span class="invisible">//</span><b class="conum">4</b><span class="invisible">\</span>
-==><span class="float">14.087714</span>
+==><span class="float">15.764731999999999</span>
==><span class="integer">126653966</span></code></pre>
</div>
</div>
@@ -4263,7 +4050,7 @@ gremlin> graph.io(graphml()).readGrap
gremlin> g = graph.traversal() <span class="invisible">//</span><b class="conum">1</b><span class="invisible">\</span>
==>graphtraversalsource[tinkergraph[<span class="key">vertices</span>:<span class="integer">808</span> <span class="key">edges</span>:<span class="integer">8049</span>], standard]
gremlin> clockWithResult(<span class="integer">1</span>){g.V().both().both().both().count().next()}
-==><span class="float">14.407808</span>
+==><span class="float">9.919889999999999</span>
==><span class="integer">126653966</span>
gremlin> g.V().both().both().both().count().iterate().toString() <span class="invisible">//</span><b class="conum">2</b><span class="invisible">\</span>
==>[TinkerGraphStep(vertex,<span class="type">[]</span>), VertexStep(BOTH,vertex), NoOpBarrierStep(<span class="integer">2500</span>), VertexStep(BOTH,vertex), NoOpBarrierStep(<span class="integer">2500</span>), VertexStep(BOTH,edge), CountGlobalStep]</code></pre>
@@ -4523,7 +4310,8 @@ gremlin> g.V().hasLabel(<span class="
<div class="content">
<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> g.V().coin(<span class="float">0.5</span>)
==>v[<span class="integer">1</span>]
-==>v[<span class="integer">3</span>]
+==>v[<span class="integer">4</span>]
+==>v[<span class="integer">6</span>]
gremlin> g.V().coin(<span class="float">0.0</span>)
gremlin> g.V().coin(<span class="float">1.0</span>)
==>v[<span class="integer">1</span>]
@@ -4697,12 +4485,12 @@ has been seen or not.</p>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> g.V().valueMap(<span class="predefined-constant">true</span>, <span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>)
-==>[<span class="key">name</span>:[marko],<span class="key">id</span>:<span class="integer">1</span>,<span class="key">label</span>:person]
-==>[<span class="key">name</span>:[vadas],<span class="key">id</span>:<span class="integer">2</span>,<span class="key">label</span>:person]
-==>[<span class="key">name</span>:[lop],<span class="key">id</span>:<span class="integer">3</span>,<span class="key">label</span>:software]
-==>[<span class="key">name</span>:[josh],<span class="key">id</span>:<span class="integer">4</span>,<span class="key">label</span>:person]
-==>[<span class="key">name</span>:[ripple],<span class="key">id</span>:<span class="integer">5</span>,<span class="key">label</span>:software]
-==>[<span class="key">name</span>:[peter],<span class="key">id</span>:<span class="integer">6</span>,<span class="key">label</span>:person]
+==>[<span class="key">id</span>:<span class="integer">1</span>,<span class="key">name</span>:[marko],<span class="key">label</span>:person]
+==>[<span class="key">id</span>:<span class="integer">2</span>,<span class="key">name</span>:[vadas],<span class="key">label</span>:person]
+==>[<span class="key">id</span>:<span class="integer">3</span>,<span class="key">name</span>:[lop],<span class="key">label</span>:software]
+==>[<span class="key">id</span>:<span class="integer">4</span>,<span class="key">name</span>:[josh],<span class="key">label</span>:person]
+==>[<span class="key">id</span>:<span class="integer">5</span>,<span class="key">name</span>:[ripple],<span class="key">label</span>:software]
+==>[<span class="key">id</span>:<span class="integer">6</span>,<span class="key">name</span>:[peter],<span class="key">label</span>:person]
gremlin> g.V().dedup().by(label).values(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>)
==>marko
==>lop</code></pre>
@@ -4782,13 +4570,13 @@ Original Traversal [Grap
ConnectiveStrategy [D] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
MatchPredicateStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
-RepeatUnrollStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
-PathRetractionStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
FilterRankingStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
InlineFilterStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
IncidentToAdjacentStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
AdjacentToIncidentStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
+RepeatUnrollStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
CountStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), RangeGlobalStep(<span class="integer">0</span>,<span class="integer">6</span>), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
+PathRetractionStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), RangeGlobalStep(<span class="integer">0</span>,<span class="integer">6</span>), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
LazyBarrierStrategy [O] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), RangeGlobalStep(<span class="integer">0</span>,<span class="integer">6</span>), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
TinkerGraphCountStrategy [P] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), RangeGlobalStep(<span class="integer">0</span>,<span class="integer">6</span>), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
TinkerGraphStepStrategy [P] [TinkerGraphStep(vertex,[~label.eq(person)]), VertexStep(OUT,edge), IdentityStep, EdgeVertexStep(IN), RangeGlobalStep(<span class="integer">0</span>,<span class="integer">6</span>), CountGlobalStep, IsStep(gt(<span class="integer">5</span>))]
@@ -5795,6 +5583,113 @@ path of the traverser in <code>match()</
</div>
</div>
<div class="sect2">
+<h3 id="math-step">Math Step</h3>
+<div class="paragraph">
+<p>The <code>math()</code>-step (<strong>math</strong>) enables scientific calculator functionality within Gremlin. This step deviates from the common
+function composition and nesting formalisms to provide an easy to read string-based math processor. Variables within the
+equation map to scopes in Gremlin — e.g. path labels, side-effects, or incoming map keys. This step supports
+<code>by()</code>-modulation where the <code>by()</code>-modulators are applied in the order in which the variables are first referenced
+within the equation. Note that the reserved variable <code>_</code> refers to the current numeric traverser object incoming to the
+<code>math()</code>-step.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> g.V().as(<span class="string"><span class="delimiter">'</span><span class="content">a</span><span class="delimiter">'</span></span>).out(<span class="string"><span class="delimiter">'</span><span class="content">knows</span><span class="delimiter">'</span></span>).as(<span class="string"><span class="delimiter">'</span><span class="content">b</span><span class="delimiter">'</span></span>).math(<span class="string"><span class="delimiter">'</span><span class="content">a + b</span><span class="delimiter">'</span></span>).by(<span class="string"><span class="delimiter">'</span><span class="content">age</span><span class="delimiter">'</span></span>)
+==><span class="float">56.0</span>
+==><span class="float">61.0</span>
+gremlin> g.V().as(<span class="string"><span class="delimiter">'</span><span class="content">a</span><span class="delimiter">'</span></span>).out(<span class="string"><span class="delimiter">'</span><span class="content">created</span><span class="delimiter">'</span></span>).as(<span class="string"><span class="delimiter">'</span><span class="content">b</span><span class="delimiter">'</span></span>).
+ math(<span class="string"><span class="delimiter">'</span><span class="content">b + a</span><span class="delimiter">'</span></span>).
+ by(both().count().math(<span class="string"><span class="delimiter">'</span><span class="content">_ + 100</span><span class="delimiter">'</span></span>)).
+ by(<span class="string"><span class="delimiter">'</span><span class="content">age</span><span class="delimiter">'</span></span>)
+==><span class="float">132.0</span>
+==><span class="float">133.0</span>
+==><span class="float">135.0</span>
+==><span class="float">138.0</span>
+gremlin> g.withSideEffect(<span class="string"><span class="delimiter">'</span><span class="content">x</span><span class="delimiter">'</span></span>,<span class="integer">10</span>).V().values(<span class="string"><span class="delimiter">'</span><span class="content">age</span><span class="delimiter">'</span></span>).math(<span class="string"><span class="delimiter">'</span><span class="content">_ / x</span><span class="delimiter">'</span></span>)
+==><span class="float">2.9</span>
+==><span class="float">2.7</span>
+==><span class="float">3.2</span>
+==><span class="float">3.5</span>
+gremlin> g.withSack(<span class="integer">1</span>).V(<span class="integer">1</span>).repeat(sack(sum).by(constant(<span class="integer">1</span>))).times(<span class="integer">10</span>).emit().sack().math(<span class="string"><span class="delimiter">'</span><span class="content">sin _</span><span class="delimiter">'</span></span>)
+==><span class="float">0.9092974268256817</span>
+==><span class="float">0.1411200080598672</span>
+==>-<span class="float">0.7568024953079282</span>
+==>-<span class="float">0.9589242746631385</span>
+==>-<span class="float">0.27941549819892586</span>
+==><span class="float">0.6569865987187891</span>
+==><span class="float">0.9893582466233818</span>
+==><span class="float">0.4121184852417566</span>
+==>-<span class="float">0.5440211108893698</span>
+==>-<span class="float">0.9999902065507035</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The operators supported by the calculator include: <code>*</code>, <code>+</code>, <code>\</code>, <code>^</code>, and <code>%</code>.
+Furthermore, the following built in functions are provided:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>abs</code>: absolute value</p>
+</li>
+<li>
+<p><code>acos</code>: arc cosine</p>
+</li>
+<li>
+<p><code>asin</code>: arc sine</p>
+</li>
+<li>
+<p><code>atan</code>: arc tangent</p>
+</li>
+<li>
+<p><code>cbrt</code>: cubic root</p>
+</li>
+<li>
+<p><code>ceil</code>: nearest upper integer</p>
+</li>
+<li>
+<p><code>cos</code>: cosine</p>
+</li>
+<li>
+<p><code>cosh</code>: hyperbolic cosine</p>
+</li>
+<li>
+<p><code>exp</code>: euler’s number raised to the power (<code>e^x</code>)</p>
+</li>
+<li>
+<p><code>floor</code>: nearest lower integer</p>
+</li>
+<li>
+<p><code>log</code>: logarithmus naturalis (base e)</p>
+</li>
+<li>
+<p><code>log10</code>: logarithm (base 10)</p>
+</li>
+<li>
+<p><code>log2</code>: logarithm (base 2)</p>
+</li>
+<li>
+<p><code>sin</code>: sine</p>
+</li>
+<li>
+<p><code>sinh</code>: hyperbolic sine</p>
+</li>
+<li>
+<p><code>sqrt</code>: square root</p>
+</li>
+<li>
+<p><code>tan</code>: tangent</p>
+</li>
+<li>
+<p><code>tanh</code>: hyperbolic tangent</p>
+</li>
+<li>
+<p><code>signum</code>: signum function</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect2">
<h3 id="max-step">Max Step</h3>
<div class="paragraph">
<p>The <code>max()</code>-step (<strong>map</strong>) operates on a stream of numbers and determines which is the largest number in the stream.</p>
@@ -5894,8 +5789,8 @@ not return any objects.</p>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> g.V().not(hasLabel(<span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>)).valueMap(<span class="predefined-constant">true</span>)
-==>[<span class="key">name</span>:[lop],<span class="key">id</span>:<span class="integer">3</span>,<span class="key">label</span>:software,<span class="key">lang</span>:[java]]
-==>[<span class="key">name</span>:[ripple],<span class="key">id</span>:<span class="integer">5</span>,<span class="key">label</span>:software,<span class="key">lang</span>:[java]]
+==>[<span class="key">id</span>:<span class="integer">3</span>,<span class="key">name</span>:[lop],<span class="key">lang</span>:[java],<span class="key">label</span>:software]
+==>[<span class="key">id</span>:<span class="integer">5</span>,<span class="key">name</span>:[ripple],<span class="key">lang</span>:[java],<span class="key">label</span>:software]
gremlin> g.V().hasLabel(<span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>).
not(out(<span class="string"><span class="delimiter">'</span><span class="content">created</span><span class="delimiter">'</span></span>).count().is(gt(<span class="integer">1</span>))).values(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>) <span class="invisible">//</span><b class="conum">1</b><span class="invisible">\</span>
==>marko
@@ -6083,15 +5978,15 @@ gremlin> g.V().hasLabel(<span class="
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> g.V().hasLabel(<span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>).order().by(shuffle)
-==>v[<span class="integer">1</span>]
==>v[<span class="integer">6</span>]
+==>v[<span class="integer">1</span>]
==>v[<span class="integer">2</span>]
==>v[<span class="integer">4</span>]
gremlin> g.V().hasLabel(<span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>).order().by(shuffle)
-==>v[<span class="integer">6</span>]
-==>v[<span class="integer">2</span>]
==>v[<span class="integer">1</span>]
-==>v[<span class="integer">4</span>]</code></pre>
+==>v[<span class="integer">4</span>]
+==>v[<span class="integer">6</span>]
+==>v[<span class="integer">2</span>]</code></pre>
</div>
</div>
<div class="paragraph">
@@ -6164,21 +6059,21 @@ The <code>pageRank()</code>-step is a <c
<pre class="CodeRay highlight"><code data-lang="groovy">gremlin> g = graph.traversal().withComputer()
==>graphtraversalsource[tinkergraph[<span class="key">vertices</span>:<span class="integer">6</span> <span class="key">edges</span>:<span class="integer">6</span>], graphcomputer]
gremlin> g.V().pageRank().by(<span class="string"><span class="delimiter">'</span><span class="content">pageRank</span><span class="delimiter">'</span></span>).values(<span class="string"><span class="delimiter">'</span><span class="content">pageRank</span><span class="delimiter">'</span></span>)
-==><span class="float">0.19250000000000003</span>
-==><span class="float">0.19250000000000003</span>
-==><span class="float">0.4018125</span>
-==><span class="float">0.15000000000000002</span>
-==><span class="float">0.15000000000000002</span>
-==><span class="float">0.23181250000000003</span>
+==><span class="float">0.14598540152719103</span>
+==><span class="float">0.14598540152719103</span>
+==><span class="float">0.30472009079122486</span>
+==><span class="float">0.11375510357865537</span>
+==><span class="float">0.11375510357865537</span>
+==><span class="float">0.1757988989970823</span>
gremlin> g.V().hasLabel(<span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>).
pageRank().
by(outE(<span class="string"><span class="delimiter">'</span><span class="content">knows</span><span class="delimiter">'</span></span>)).
by(<span class="string"><span class="delimiter">'</span><span class="content">friendRank</span><span class="delimiter">'</span></span>).
order().by(<span class="string"><span class="delimiter">'</span><span class="content">friendRank</span><span class="delimiter">'</span></span>,decr).valueMap(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>,<span class="string"><span class="delimiter">'</span><span class="content">friendRank</span><span class="delimiter">'</span></span>)
-==>[<span class="key">friendRank</span>:[<span class="float">0.21375000000000002</span>],<span class="key">name</span>:[josh]]
-==>[<span class="key">friendRank</span>:[<span class="float">0.21375000000000002</span>],<span class="key">name</span>:[vadas]]
-==>[<span class="key">friendRank</span>:[<span class="float">0.15000000000000002</span>],<span class="key">name</span>:[marko]]
-==>[<span class="key">friendRank</span>:[<span class="float">0.15000000000000002</span>],<span class="key">name</span>:[peter]]</code></pre>
+==>[<span class="key">friendRank</span>:[<span class="float">0.8321166533236799</span>],<span class="key">name</span>:[vadas]]
+==>[<span class="key">friendRank</span>:[<span class="float">0.8321166533236799</span>],<span class="key">name</span>:[josh]]
+==>[<span class="key">friendRank</span>:[<span class="float">0.5839416733381598</span>],<span class="key">name</span>:[marko]]
+==>[<span class="key">friendRank</span>:[<span class="float">0.5839416733381598</span>],<span class="key">name</span>:[peter]]</code></pre>
</div>
</div>
<div class="paragraph">
@@ -6195,51 +6090,51 @@ gremlin> g.V().hasLabel(<span class="
order().by(<span class="string"><span class="delimiter">'</span><span class="content">friendRank</span><span class="delimiter">'</span></span>,decr).valueMap(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>,<span class="string"><span class="delimiter">'</span><span class="content">friendRank</span><span class="delimiter">'</span></span>).explain()
==>Traversal Explanation
=============================================================================================================================================================================================================================================
-Original Traversal [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), OrderGlobalStep([[value(friendRank), decr]]), PropertyM
+Original Traversal [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">20</span>,graphfilter[none]), OrderGlobalStep([[value(friendRank), decr]]), PropertyM
apStep([name, friendRank],value)]
-ConnectiveStrategy [D] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), OrderGlobalStep([[value(friendRank), decr]]), PropertyM
+ConnectiveStrategy [D] [GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">20</span>,graphfilter[none]), OrderGlobalStep([[value(friendRank), decr]]), PropertyM
apStep([name, friendRank],value)]
-VertexProgramStrategy [D] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
+VertexProgramStrategy [D] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">20</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
-MatchPredicateStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
+MatchPredicateStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">20</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
-PathProcessorStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
+FilterRankingStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">20</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
-RepeatUnrollStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
+PathProcessorStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">20</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
-PathRetractionStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
+InlineFilterStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">20</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
-FilterRankingStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
+IncidentToAdjacentStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">20</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
-InlineFilterStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
+AdjacentToIncidentStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">20</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
-IncidentToAdjacentStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
+RepeatUnrollStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">20</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
-AdjacentToIncidentStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">30</span>,graphfilter[none]), Travers
+CountStrategy [O] [TraversalVertexProgramStep([GraphStep(vertex,<span class="type">[]</span>), HasStep([~label.eq(person)])],graphfilter[none]), PageRankVertexProgramStep([VertexStep(OUT,[knows],edge)],friendRank,<span class="integer">20</span>,graphfilter[none]), Travers
alVertexProgramStep([OrderGlobalStep([[value(friendRank), decr]]), PropertyMapStep([name, friendRank],value)],graphfilter[none]), ComputerResultStep]
[... 1434 lines stripped ...]