You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ke...@apache.org on 2024/09/07 20:33:49 UTC
(tinkerpop) 01/03: Update GraphSONV4 documentation
This is an automated email from the ASF dual-hosted git repository.
kenhuuu pushed a commit to branch v4-io-format
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 76970cbab41d7d7da8f1ed407ff60c8eee9f4fe9
Author: Ken Hu <10...@users.noreply.github.com>
AuthorDate: Fri Sep 6 17:06:04 2024 -0700
Update GraphSONV4 documentation
---
docs/src/dev/io/graphson.asciidoc | 7808 ++++++++++++-------------------------
1 file changed, 2561 insertions(+), 5247 deletions(-)
diff --git a/docs/src/dev/io/graphson.asciidoc b/docs/src/dev/io/graphson.asciidoc
index 4b2f89a20e..2e39c05dbe 100644
--- a/docs/src/dev/io/graphson.asciidoc
+++ b/docs/src/dev/io/graphson.asciidoc
@@ -97,5436 +97,2713 @@ reflect a particular one. Servers will return the GraphSON version and variation
and it could be different (or change) from server to server. When building applications, it is recommended that the
mime type is made explicit on requests to avoid breaking changes or unexpected results.
-[[graphson-1d0]]
-== Version 1.0
+[[graphson-4]]
+== Version 4.0
-Version 1.0 of GraphSON was released with TinkerPop 3.0.0. It is referred to by the following mime types:
+Version 4.0 of GraphSON was first introduced on TinkerPop 4.0.0 and is represented by the
+`application/vnd.gremlin-v4.0+json` mime type. There also exists an untyped version:
+`application/vnd.gremlin-v3.0+json;types=false`. It is very similar to GraphSON 3.0, with just several key differences:
+many underused or duplicated types have been removed, labels are now list of strings and request/response formats have
+changed quite a bit, and custom types have been replaced with Provider Defined Type (PDT).
-* `application/vnd.gremlin-v1.0+json` - types embedded
-* `application/vnd.gremlin-v1.0+json;types=false` - no types embedded
-
-When types are embedded, GraphSON uses the standard
-link:https://github.com/FasterXML/jackson-databind[Jackson] type embedding approach that writes the full Java class
-name into a "@class" field in the JSON. While this approach isn't especially language agnostic it does at least give
-some hint as to what the expected type is.
+=== Core
-This section focuses on non-embedded types and their formats as there was little usage of embedded types in generalized
-object serialization use cases. The format was simply too cumbersome to parse of non-Jackson enabled libraries and the
-use cases for it were limited. <<graphson-2d0,GraphSON Version 2.0>> attempts to improve upon this limitation.
+==== Boolean
-=== Graph Structure
+Matches the JSON Boolean and doesn't have type information.
-==== Edge
+[source,text]
+----
+true
+----
-[source,json]
+[source,text]
----
-{
- "id" : 13,
- "label" : "develops",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : 10,
- "outV" : 1,
- "properties" : {
- "since" : 2009
- }
-}
+true
----
-==== Path
+==== Composite PDT
+
+JSON Object with two required keys: "type" and "fields"+
+"type" is a JSON String+
+"fields" is a `g:Map`
[source,json]
----
{
- "labels" : [ [ ], [ ], [ ] ],
- "objects" : [ {
- "id" : 1,
- "label" : "person",
- "type" : "vertex",
- "properties" : {
- "name" : [ {
- "id" : 0,
- "value" : "marko"
- } ],
- "location" : [ {
- "id" : 6,
- "value" : "san diego",
- "properties" : {
- "startTime" : 1997,
- "endTime" : 2001
- }
- }, {
- "id" : 7,
- "value" : "santa cruz",
- "properties" : {
- "startTime" : 2001,
- "endTime" : 2004
- }
- }, {
- "id" : 8,
- "value" : "brussels",
- "properties" : {
- "startTime" : 2004,
- "endTime" : 2005
- }
- }, {
- "id" : 9,
- "value" : "santa fe",
- "properties" : {
- "startTime" : 2005
- }
- } ]
- }
- }, {
- "id" : 10,
- "label" : "software",
- "type" : "vertex",
- "properties" : {
- "name" : [ {
- "id" : 4,
- "value" : "gremlin"
- } ]
- }
- }, {
- "id" : 11,
- "label" : "software",
- "type" : "vertex",
- "properties" : {
- "name" : [ {
- "id" : 5,
- "value" : "tinkergraph"
- } ]
+ "@type": "g:CompositePdt",
+ "@value": {
+ "type": "tinkerId",
+ "fields": {
+ "@type": "g:Map",
+ "@value": [
+ "intId",
+ {
+ "@type": "g:Int32",
+ "@value": -1360894799
+ },
+ "strId",
+ "0"
+ ]
}
- } ]
+ }
}
----
-==== Property
-
[source,json]
----
{
- "key" : "since",
- "value" : 2009
+ "type": "tinkerId",
+ "fields": {
+ "intId": -1360894799,
+ "strId": "0"
+ }
}
----
-==== TinkerGraph
+==== DateTime
-`TinkerGraph` has a custom serializer that is registered as part of the `TinkerIoRegistry`.
+JSON String representing ISO-8601 format for datetime with offset.
[source,json]
----
{
- "vertices" : [ {
- "id" : 1,
- "label" : "person",
- "type" : "vertex",
- "properties" : {
- "name" : [ {
- "id" : 0,
- "value" : "marko"
- } ],
- "location" : [ {
- "id" : 6,
- "value" : "san diego",
- "properties" : {
- "startTime" : 1997,
- "endTime" : 2001
- }
- }, {
- "id" : 7,
- "value" : "santa cruz",
- "properties" : {
- "startTime" : 2001,
- "endTime" : 2004
- }
- }, {
- "id" : 8,
- "value" : "brussels",
- "properties" : {
- "startTime" : 2004,
- "endTime" : 2005
- }
- }, {
- "id" : 9,
- "value" : "santa fe",
- "properties" : {
- "startTime" : 2005
- }
- } ]
- }
- }, {
- "id" : 7,
- "label" : "person",
- "type" : "vertex",
- "properties" : {
- "name" : [ {
- "id" : 1,
- "value" : "stephen"
- } ],
- "location" : [ {
- "id" : 10,
- "value" : "centreville",
- "properties" : {
- "startTime" : 1990,
- "endTime" : 2000
- }
- }, {
- "id" : 11,
- "value" : "dulles",
- "properties" : {
- "startTime" : 2000,
- "endTime" : 2006
- }
- }, {
- "id" : 12,
- "value" : "purcellville",
- "properties" : {
- "startTime" : 2006
- }
- } ]
- }
- }, {
- "id" : 8,
- "label" : "person",
- "type" : "vertex",
- "properties" : {
- "name" : [ {
- "id" : 2,
- "value" : "matthias"
- } ],
- "location" : [ {
- "id" : 13,
- "value" : "bremen",
- "properties" : {
- "startTime" : 2004,
- "endTime" : 2007
- }
- }, {
- "id" : 14,
- "value" : "baltimore",
- "properties" : {
- "startTime" : 2007,
- "endTime" : 2011
- }
- }, {
- "id" : 15,
- "value" : "oakland",
- "properties" : {
- "startTime" : 2011,
- "endTime" : 2014
- }
- }, {
- "id" : 16,
- "value" : "seattle",
- "properties" : {
- "startTime" : 2014
- }
- } ]
- }
- }, {
- "id" : 9,
- "label" : "person",
- "type" : "vertex",
- "properties" : {
- "name" : [ {
- "id" : 3,
- "value" : "daniel"
- } ],
- "location" : [ {
- "id" : 17,
- "value" : "spremberg",
- "properties" : {
- "startTime" : 1982,
- "endTime" : 2005
- }
- }, {
- "id" : 18,
- "value" : "kaiserslautern",
- "properties" : {
- "startTime" : 2005,
- "endTime" : 2009
- }
- }, {
- "id" : 19,
- "value" : "aachen",
- "properties" : {
- "startTime" : 2009
- }
- } ]
- }
- }, {
- "id" : 10,
- "label" : "software",
- "type" : "vertex",
- "properties" : {
- "name" : [ {
- "id" : 4,
- "value" : "gremlin"
- } ]
- }
- }, {
- "id" : 11,
- "label" : "software",
- "type" : "vertex",
- "properties" : {
- "name" : [ {
- "id" : 5,
- "value" : "tinkergraph"
- } ]
- }
- } ],
- "edges" : [ {
- "id" : 13,
- "label" : "develops",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : 10,
- "outV" : 1,
- "properties" : {
- "since" : 2009
- }
- }, {
- "id" : 14,
- "label" : "develops",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : 11,
- "outV" : 1,
- "properties" : {
- "since" : 2010
- }
- }, {
- "id" : 15,
- "label" : "uses",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : 10,
- "outV" : 1,
- "properties" : {
- "skill" : 4
- }
- }, {
- "id" : 16,
- "label" : "uses",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : 11,
- "outV" : 1,
- "properties" : {
- "skill" : 5
- }
- }, {
- "id" : 17,
- "label" : "develops",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : 10,
- "outV" : 7,
- "properties" : {
- "since" : 2010
- }
- }, {
- "id" : 18,
- "label" : "develops",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : 11,
- "outV" : 7,
- "properties" : {
- "since" : 2011
- }
- }, {
- "id" : 19,
- "label" : "uses",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : 10,
- "outV" : 7,
- "properties" : {
- "skill" : 5
- }
- }, {
- "id" : 20,
- "label" : "uses",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : 11,
- "outV" : 7,
- "properties" : {
- "skill" : 4
- }
- }, {
- "id" : 21,
- "label" : "develops",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : 10,
- "outV" : 8,
- "properties" : {
- "since" : 2012
- }
- }, {
- "id" : 22,
- "label" : "uses",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : 10,
- "outV" : 8,
- "properties" : {
- "skill" : 3
- }
- }, {
- "id" : 23,
- "label" : "uses",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : 11,
- "outV" : 8,
- "properties" : {
- "skill" : 3
- }
- }, {
- "id" : 24,
- "label" : "uses",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : 10,
- "outV" : 9,
- "properties" : {
- "skill" : 5
- }
- }, {
- "id" : 25,
- "label" : "uses",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : 11,
- "outV" : 9,
- "properties" : {
- "skill" : 3
- }
- }, {
- "id" : 26,
- "label" : "traverses",
- "type" : "edge",
- "inVLabel" : "software",
- "outVLabel" : "software",
- "inV" : 11,
- "outV" : 10
- } ]
+ "@type" : "gx:DateTime",
+ "@value" : "2007-12-03T10:15:30+01:00"
}
----
-==== Vertex
-
-[source,json]
+[source,text]
----
-{
- "id" : 1,
- "label" : "person",
- "type" : "vertex",
- "properties" : {
- "name" : [ {
- "id" : 0,
- "value" : "marko"
- } ],
- "location" : [ {
- "id" : 6,
- "value" : "san diego",
- "properties" : {
- "startTime" : 1997,
- "endTime" : 2001
- }
- }, {
- "id" : 7,
- "value" : "santa cruz",
- "properties" : {
- "startTime" : 2001,
- "endTime" : 2004
- }
- }, {
- "id" : 8,
- "value" : "brussels",
- "properties" : {
- "startTime" : 2004,
- "endTime" : 2005
- }
- }, {
- "id" : 9,
- "value" : "santa fe",
- "properties" : {
- "startTime" : 2005
- }
- } ]
- }
-}
+"2007-12-03T10:15:30+01:00"
----
-==== VertexProperty
+==== Double
+
+A JSON Number with the same range as a IEEE754 double precision floating point or a JSON String with one of the
+following values: "-Infinity", "Infinity", "NaN"
[source,json]
----
{
- "id" : 0,
- "value" : "marko",
- "label" : "name"
+ "@type" : "g:Double",
+ "@value" : 100.0
}
----
-
-=== RequestMessage
-
-==== Authentication Response
-
-The following `RequestMessage` is an example of the response that should be made to a SASL-based authentication challenge.
-
-[source,json]
+[source,text]
----
-{
- "requestId" : "cb682578-9d92-4499-9ebc-5c6aa73c5397",
- "op" : "authentication",
- "processor" : "",
- "args" : {
- "saslMechanism" : "PLAIN",
- "sasl" : "AHN0ZXBocGhlbgBwYXNzd29yZA=="
- }
-}
+100.0
----
-==== Session Eval
+==== Float
-The following `RequestMessage` is an example of a simple session request for a script evaluation with parameters.
+A JSON Number with the same range as a IEEE754 single precision floating point or a JSON String with one of the
+following values: "-Infinity", "Infinity", "NaN"
[source,json]
----
{
- "requestId" : "cb682578-9d92-4499-9ebc-5c6aa73c5397",
- "op" : "eval",
- "processor" : "session",
- "args" : {
- "gremlin" : "g.V(x)",
- "language" : "gremlin-groovy",
- "session" : "unique-session-identifier",
- "bindings" : {
- "x" : 1
- }
- }
+ "@type" : "g:Float",
+ "@value" : 100.0
}
----
-==== Session Eval Aliased
-
-The following `RequestMessage` is an example of a session request for a script evaluation with an alias that binds the `TraversalSource` of "g" to "social".
-
-[source,json]
+[source,text]
----
-{
- "requestId" : "cb682578-9d92-4499-9ebc-5c6aa73c5397",
- "op" : "eval",
- "processor" : "session",
- "args" : {
- "gremlin" : "social.V(x)",
- "language" : "gremlin-groovy",
- "aliases" : {
- "g" : "social"
- },
- "session" : "unique-session-identifier",
- "bindings" : {
- "x" : 1
- }
- }
-}
+100.0
----
-==== Session Close
+==== Integer
-The following `RequestMessage` is an example of a request to close a session.
+A JSON Number with the same range as a 4-byte signed integer.
[source,json]
----
{
- "requestId" : "cb682578-9d92-4499-9ebc-5c6aa73c5397",
- "op" : "close",
- "processor" : "session",
- "args" : {
- "session" : "unique-session-identifier"
- }
+ "@type" : "g:Int32",
+ "@value" : 100
}
----
-==== Sessionless Eval
-
-The following `RequestMessage` is an example of a simple sessionless request for a script evaluation with parameters.
-
-[source,json]
+[source,text]
----
-{
- "requestId" : "cb682578-9d92-4499-9ebc-5c6aa73c5397",
- "op" : "eval",
- "processor" : "",
- "args" : {
- "gremlin" : "g.V(x)",
- "language" : "gremlin-groovy",
- "bindings" : {
- "x" : 1
- }
- }
-}
+100
----
-==== Sessionless Eval Aliased
+==== List
-The following `RequestMessage` is an example of a sessionless request for a script evaluation with an alias that binds the `TraversalSource` of "g" to "social".
+List is a JSON Array. The type is used to distinguish between different collection types that are also mapped to JSON
+Array. The untyped version converts complex types to JSON String.
[source,json]
----
{
- "requestId" : "cb682578-9d92-4499-9ebc-5c6aa73c5397",
- "op" : "eval",
- "processor" : "",
- "args" : {
- "gremlin" : "social.V(x)",
- "language" : "gremlin-groovy",
- "aliases" : {
- "g" : "social"
+ "@type": "g:List",
+ "@value": [
+ {
+ "@type": "g:Int32",
+ "@value": 1
},
- "bindings" : {
- "x" : 1
- }
- }
+ "person",
+ true,
+ null
+ ]
}
----
-
-=== ResponseMessage
-
-==== Authentication Challenge
-
-When authentication is enabled, an initial request to the server will result in an authentication challenge. The typical response message will appear as follows, but handling it could be different dependending on the SASL implementation (e.g. multiple challenges may be requested in some cases, but not in the default provided by Gremlin Server).
-
-[source,json]
+[source,text]
----
-{
- "requestId" : "41d2e28a-20a4-4ab0-b379-d810dede3786",
- "status" : {
- "message" : "",
- "code" : 407,
- "attributes" : { }
- },
- "result" : {
- "data" : null,
- "meta" : { }
- }
-}
+[ 1, "person", true, null ]
----
-==== Standard Result
+==== Long
-The following `ResponseMessage` is a typical example of the typical successful response Gremlin Server will return when returning results from a script.
+A JSON Number with the same range as a 8-byte signed integer.
[source,json]
----
{
- "requestId" : "41d2e28a-20a4-4ab0-b379-d810dede3786",
- "status" : {
- "message" : "",
- "code" : 200,
- "attributes" : { }
- },
- "result" : {
- "data" : [ {
- "id" : 1,
- "label" : "person",
- "type" : "vertex",
- "properties" : {
- "name" : [ {
- "id" : 0,
- "value" : "marko"
- } ],
- "location" : [ {
- "id" : 6,
- "value" : "san diego",
- "properties" : {
- "startTime" : 1997,
- "endTime" : 2001
- }
- }, {
- "id" : 7,
- "value" : "santa cruz",
- "properties" : {
- "startTime" : 2001,
- "endTime" : 2004
- }
- }, {
- "id" : 8,
- "value" : "brussels",
- "properties" : {
- "startTime" : 2004,
- "endTime" : 2005
- }
- }, {
- "id" : 9,
- "value" : "santa fe",
- "properties" : {
- "startTime" : 2005
- }
- } ]
- }
- } ],
- "meta" : { }
- }
+ "@type" : "g:Int64",
+ "@value" : 100
}
----
-[[graphson-2d0]]
-== Version 2.0
-
-Version 2.0 of GraphSON was first introduced on TinkerPop 3.2.2. It was designed to be less tied to
-link:https://github.com/FasterXML/jackson-databind[Jackson] (a JVM library) and to be less lossy as it pertained to
-types. While the <<graphson-1d0,GraphSON 1.0>> section focused on GraphSON without embedded types, GraphSON 2.0 will
-do the opposite as embedded types is the expected manner in which non-JVM languages will interact with TinkerPop.
-
-GraphSON 2.0 is referred to by the following mime types:
-
-* `application/vnd.gremlin-v2.0+json` - Values are typed by way of a "complex object" that defines a `@typeId` and
-`@value`. The `@typeId` is composed of two parts: a namespace and a type name, in the format "namespace:typename". A
-namespace allows TinkerPop providers and users to categorize custom types that they may implement and avoid collision
-with existing TinkerPop types. By default, TinkerPop types will have the namespace "g" (or "gx" for "extended" types).
-* `application/vnd.gremlin-v2.0+json;types=false` - Values do not have their types embedded in the JSON. This format
-does not follow the 1.0 untyped format in that it does not include a "type" field for `Vertex` and `Edge` objects and
-it serializes property values in those graph objects with a `label` field which is redundant as the "key" field for
-that property will already represent that value.
+[source,text]
+----
+100
+----
-=== Core
+==== Map
-==== Class
+Map is a JSON Array to provide the ability to allow for non-String keys, which is not possible in JSON. The untyped
+version converts complex types to JSON String.
[source,json]
----
{
- "@type" : "g:Class",
- "@value" : "java.io.File"
+ "@type": "g:Map",
+ "@value": [
+ {
+ "@type": "g:List",
+ "@value": [
+ {
+ "@type": "g:Int32",
+ "@value": 1
+ },
+ {
+ "@type": "g:Int32",
+ "@value": 2
+ },
+ {
+ "@type": "g:Int32",
+ "@value": 3
+ }
+ ]
+ },
+ null,
+ "test",
+ {
+ "@type": "g:Int32",
+ "@value": 123
+ },
+ {
+ "@type": "gx:OffsetDateTime",
+ "@value": "2024-09-02T10:30Z"
+ },
+ "red"
+ ]
}
----
-==== Date
-
-Representing a millisecond-precision offset from the unix epoch. In Java, it is simply `Date.getTime()`.
-
[source,json]
----
{
- "@type" : "g:Date",
- "@value" : 1481750076295
+ "[1, 2, 3]": null,
+ "test": 123,
+ "2024-09-02T10:30Z": "red"
}
----
-==== Double
+==== Null
-While the `@value` is expected to be a JSON number, it might also be a `String` of `NaN`, `Infinity` or `-Infinity`.
+Matches the JSON Null and doesn't have type information.
-[source,json]
+[source,text]
----
-{
- "@type" : "g:Double",
- "@value" : 100.0
-}
+null
----
-==== Float
-
-[source,json]
+[source,text]
----
-{
- "@type" : "g:Float",
- "@value" : 100.0
-}
+null
----
-==== Integer
+==== Primitive PDT
+
+JSON Object with two required keys: "type" and "value"+
+"type" is a JSON String+
+"value" is a JSON String
[source,json]
----
{
- "@type" : "g:Int32",
- "@value" : 100
+ "@type": "g:PrimitivePdt",
+ "@value": {
+ "type": "tinkerId",
+ "value": "-1360894799"
+ }
}
----
-==== Long
-
[source,json]
----
{
- "@type" : "g:Int64",
- "@value" : 100
+ "type": "tinkerId",
+ "value": "-1360894799"
}
----
-==== Timestamp
+==== Set
+
+A JSON Array. The untyped version converts complex types to JSON String.
[source,json]
----
{
- "@type" : "g:Timestamp",
- "@value" : 1481750076295
+ "@type": "g:Set",
+ "@value": [
+ null,
+ {
+ "@type": "g:Int32",
+ "@value": 2
+ },
+ "person",
+ true
+ ]
}
----
-==== UUID
+[source,text]
+----
+[ null, 2, "person", true ]
+----
-[source,json]
+==== String
+
+Matches the JSON String and doesn't have type information.
+
+[source,text]
----
-{
- "@type" : "g:UUID",
- "@value" : "41d2e28a-20a4-4ab0-b379-d810dede3786"
-}
+"abc"
----
+[source,text]
+----
+"abc"
+----
=== Graph Structure
==== Edge
+JSON Object (required keys are: id, label, inVLabel, outVLabel, inV, outV, properties)+
+"id", "inV", "outV" is any GraphSON 4.0 type+
+"label", "inVLabel", "outVLabel" value is a `g:List` of `String`+
+"properties" is an Object containing "name" to `g:Property` mappings
+
+The untyped version has one additional required key "type" which is always "vertex".
+
[source,json]
----
{
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 13
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 13
},
- "label" : "develops",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "develops"
+ ]
},
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 1
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
},
- "properties" : {
- "since" : {
- "@type" : "g:Int32",
- "@value" : 2009
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 10
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 1
+ },
+ "properties": {
+ "since": {
+ "@type": "g:Property",
+ "@value": {
+ "key": "since",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 2009
+ }
+ }
}
}
}
}
----
-==== Path
-
[source,json]
----
{
- "@type" : "g:Path",
- "@value" : {
- "labels" : [ [ ], [ ], [ ] ],
- "objects" : [ {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "person"
- }
- }, {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "label" : "software",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 4
- },
- "value" : "gremlin",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "label" : "name"
- }
- } ]
- }
- }
- }, {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "label" : "software",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 5
- },
- "value" : "tinkergraph",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "label" : "name"
- }
- } ]
- }
- }
- } ]
+ "id": 13,
+ "label": [
+ "develops"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "person"
+ ],
+ "inV": 10,
+ "outV": 1,
+ "properties": {
+ "since": 2009
}
}
----
-==== Property
-
-[source,json]
-----
-{
- "@type" : "g:Property",
- "@value" : {
- "key" : "since",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 2009
- },
- "element" : {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 13
- },
- "label" : "develops",
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- }
- }
- }
- }
-}
-----
+==== Graph
-==== StarGraph
+`TinkerGraph` has a custom serializer that is registered as part of the `TinkerIoRegistry`. Graph is a JSON Object with
+two required keys: "vertices" and "edges"+
+"vertices" is an Array of `g:Vertex`+
+"edges" is an Array of `g:Edge`
[source,json]
----
{
- "starVertex" : {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 0
- },
- "value" : "marko",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "name"
- }
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 6
- },
- "value" : "san diego",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 1997
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
+ "@type": "tinker:graph",
+ "@value": {
+ "vertices": [
+ {
+ "@type": "g:Vertex",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 1
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "properties": {
+ "name": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 0
+ },
+ "value": "marko",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "name"
+ ]
+ }
+ }
}
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 7
- },
- "value" : "santa cruz",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
+ ],
+ "location": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 6
+ },
+ "value": "san diego",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 1997
+ },
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2001
+ }
+ }
+ }
},
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 8
- },
- "value" : "brussels",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 7
+ },
+ "value": "santa cruz",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2001
+ },
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2004
+ }
+ }
+ }
},
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 9
- },
- "value" : "santa fe",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
- }
- }
- } ]
- }
- }
- }
-}
-----
-
-==== TinkerGraph
-
-`TinkerGraph` has a custom serializer that is registered as part of the `TinkerIoRegistry`.
-
-[source,json]
-----
-{
- "@type" : "tinker:graph",
- "@value" : {
- "vertices" : [ {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 0
- },
- "value" : "marko",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "name"
- }
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 6
- },
- "value" : "san diego",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 1997
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 7
- },
- "value" : "santa cruz",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 8
- },
- "value" : "brussels",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 8
+ },
+ "value": "brussels",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2004
+ },
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2005
+ }
+ }
}
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 9
},
- "value" : "santa fe",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 9
+ },
+ "value": "santa fe",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2005
+ }
+ }
}
}
- }
- } ]
+ ]
+ }
}
- }
- }, {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 7
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 1
- },
- "value" : "stephen",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 7
- },
- "label" : "name"
- }
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 10
- },
- "value" : "centreville",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 7
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 1990
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2000
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 11
- },
- "value" : "dulles",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 7
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2000
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2006
+ },
+ {
+ "@type": "g:Vertex",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 7
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "properties": {
+ "name": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 1
+ },
+ "value": "stephen",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "name"
+ ]
+ }
}
}
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 12
- },
- "value" : "purcellville",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 7
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2006
+ ],
+ "location": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 10
+ },
+ "value": "centreville",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 1990
+ },
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2000
+ }
+ }
}
- }
- }
- } ]
- }
- }
- }, {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 8
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 2
- },
- "value" : "matthias",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 8
- },
- "label" : "name"
- }
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 13
- },
- "value" : "bremen",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 8
},
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2007
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 11
+ },
+ "value": "dulles",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2000
+ },
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2006
+ }
+ }
}
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 14
- },
- "value" : "baltimore",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 8
},
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2007
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2011
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 12
+ },
+ "value": "purcellville",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2006
+ }
+ }
}
}
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 15
- },
- "value" : "oakland",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 8
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2011
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2014
+ ]
+ }
+ }
+ },
+ {
+ "@type": "g:Vertex",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 8
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "properties": {
+ "name": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 2
+ },
+ "value": "matthias",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "name"
+ ]
+ }
}
}
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 16
- },
- "value" : "seattle",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 8
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2014
+ ],
+ "location": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 13
+ },
+ "value": "bremen",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2004
+ },
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2007
+ }
+ }
}
- }
- }
- } ]
- }
- }
- }, {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 9
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 3
- },
- "value" : "daniel",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 9
- },
- "label" : "name"
- }
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 17
- },
- "value" : "spremberg",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 9
},
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 1982
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 14
+ },
+ "value": "baltimore",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2007
+ },
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2011
+ }
+ }
}
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 18
- },
- "value" : "kaiserslautern",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 9
},
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2009
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 15
+ },
+ "value": "oakland",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2011
+ },
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2014
+ }
+ }
}
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 19
- },
- "value" : "aachen",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 9
},
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2009
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 16
+ },
+ "value": "seattle",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2014
+ }
+ }
}
}
- }
- } ]
- }
- }
- }, {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "label" : "software",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 4
- },
- "value" : "gremlin",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "label" : "name"
- }
- } ]
- }
- }
- }, {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "label" : "software",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 5
- },
- "value" : "tinkergraph",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "label" : "name"
- }
- } ]
- }
- }
- } ],
- "edges" : [ {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 13
- },
- "label" : "develops",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "properties" : {
- "since" : {
- "@type" : "g:Int32",
- "@value" : 2009
- }
- }
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 14
- },
- "label" : "develops",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "properties" : {
- "since" : {
- "@type" : "g:Int32",
- "@value" : 2010
- }
- }
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 15
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Int32",
- "@value" : 4
- }
- }
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 16
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Int32",
- "@value" : 5
- }
- }
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 17
- },
- "label" : "develops",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 7
- },
- "properties" : {
- "since" : {
- "@type" : "g:Int32",
- "@value" : 2010
- }
- }
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 18
- },
- "label" : "develops",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 7
- },
- "properties" : {
- "since" : {
- "@type" : "g:Int32",
- "@value" : 2011
- }
- }
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 19
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 7
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Int32",
- "@value" : 5
- }
- }
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 20
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 7
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Int32",
- "@value" : 4
- }
- }
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 21
- },
- "label" : "develops",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 8
- },
- "properties" : {
- "since" : {
- "@type" : "g:Int32",
- "@value" : 2012
- }
- }
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 22
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 8
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Int32",
- "@value" : 3
- }
- }
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 23
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 8
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Int32",
- "@value" : 3
- }
- }
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 24
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 9
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Int32",
- "@value" : 5
+ ]
}
}
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 25
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 9
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Int32",
- "@value" : 3
- }
- }
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 26
- },
- "label" : "traverses",
- "inVLabel" : "software",
- "outVLabel" : "software",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 10
- }
- }
- } ]
- }
-}
-----
-
-==== Tree
-
-[source,json]
-----
-{
- "@type" : "g:Tree",
- "@value" : [ {
- "key" : {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 0
- },
- "value" : "marko",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "name"
- }
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 6
- },
- "value" : "san diego",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 1997
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
+ },
+ {
+ "@type": "g:Vertex",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 9
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "properties": {
+ "name": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 3
+ },
+ "value": "daniel",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "name"
+ ]
+ }
}
}
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 7
- },
- "value" : "santa cruz",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 8
- },
- "value" : "brussels",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 9
- },
- "value" : "santa fe",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
- }
- }
- } ]
- }
- }
- },
- "value" : {
- "@type" : "g:Tree",
- "@value" : [ {
- "key" : {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "label" : "software",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 4
+ ],
+ "location": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 17
},
- "value" : "gremlin",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 10
+ "value": "spremberg",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
},
- "label" : "name"
- }
- } ]
- }
- }
- },
- "value" : {
- "@type" : "g:Tree",
- "@value" : [ {
- "key" : {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "label" : "software",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 5
- },
- "value" : "tinkergraph",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "label" : "name"
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 1982
+ },
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2005
}
- } ]
- }
- }
- },
- "value" : {
- "@type" : "g:Tree",
- "@value" : [ ]
- }
- } ]
- }
- } ]
- }
- } ]
-}
-----
-
-==== Vertex
-
-[source,json]
-----
-{
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 0
- },
- "value" : "marko",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "name"
- }
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 6
- },
- "value" : "san diego",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 1997
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 7
- },
- "value" : "santa cruz",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 8
- },
- "value" : "brussels",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 9
- },
- "value" : "santa fe",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
- }
- }
- } ]
- }
- }
-}
-----
-
-==== VertexProperty
-
-[source,json]
-----
-{
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 0
- },
- "value" : "marko",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "name"
- }
-}
-----
-
-
-=== Graph Process
-
-==== Barrier
-
-[source,json]
-----
-{
- "@type" : "g:Barrier",
- "@value" : "normSack"
-}
-----
-
-==== Binding
-
-A "Binding" refers to a `Bytecode.Binding`.
-
-[source,json]
-----
-{
- "@type" : "g:Binding",
- "@value" : {
- "key" : "x",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 1
- }
- }
-}
-----
-
-==== Bytecode
-
-The following `Bytecode` example represents the traversal of `g.V().hasLabel('person').out().in().tree()`. Obviously the serialized `Bytecode` woudl be quite different for the endless variations of commands that could be used together in the Gremlin language.
-
-[source,json]
-----
-{
- "@type" : "g:Bytecode",
- "@value" : {
- "step" : [ [ "V" ], [ "hasLabel", "person" ], [ "out" ], [ "in" ], [ "tree" ] ]
- }
-}
-----
-
-==== Cardinality
-
-[source,json]
-----
-{
- "@type" : "g:Cardinality",
- "@value" : "list"
-}
-----
-
-==== Column
-
-[source,json]
-----
-{
- "@type" : "g:Column",
- "@value" : "keys"
-}
-----
-
-==== Direction
-
-[source,json]
-----
-{
- "@type" : "g:Direction",
- "@value" : "OUT"
-}
-----
-
-==== DT
-
-[source,json]
-----
-{
- "@type" : "g:DT",
- "@value" : "minute"
-}
-----
-
-==== Lambda
-
-[source,json]
-----
-{
- "@type" : "g:Lambda",
- "@value" : {
- "script" : "{ it.get() }",
- "language" : "gremlin-groovy",
- "arguments" : 1
- }
-}
-----
-
-==== Merge
-
-[source,json]
-----
-{
- "@type" : "g:Merge",
- "@value" : "onMatch"
-}
-----
-
-==== Metrics
-
-[source,json]
-----
-{
- "@type" : "g:Metrics",
- "@value" : {
- "dur" : {
- "@type" : "g:Double",
- "@value" : 100.0
- },
- "counts" : {
- "traverserCount" : {
- "@type" : "g:Int64",
- "@value" : 4
- },
- "elementCount" : {
- "@type" : "g:Int64",
- "@value" : 4
- }
- },
- "name" : "TinkerGraphStep(vertex,[~label.eq(person)])",
- "annotations" : {
- "percentDur" : {
- "@type" : "g:Double",
- "@value" : 25.0
- }
- },
- "id" : "7.0.0()",
- "metrics" : [ {
- "@type" : "g:Metrics",
- "@value" : {
- "dur" : {
- "@type" : "g:Double",
- "@value" : 100.0
- },
- "counts" : {
- "traverserCount" : {
- "@type" : "g:Int64",
- "@value" : 7
- },
- "elementCount" : {
- "@type" : "g:Int64",
- "@value" : 7
- }
- },
- "name" : "VertexStep(OUT,vertex)",
- "annotations" : {
- "percentDur" : {
- "@type" : "g:Double",
- "@value" : 25.0
- }
- },
- "id" : "3.0.0()"
- }
- } ]
- }
-}
-----
-
-==== Operator
-
-[source,json]
-----
-{
- "@type" : "g:Operator",
- "@value" : "sum"
-}
-----
-
-==== Order
-
-[source,json]
-----
-{
- "@type" : "g:Order",
- "@value" : "shuffle"
-}
-----
-
-==== P
-
-[source,json]
-----
-{
- "@type" : "g:P",
- "@value" : {
- "predicate" : "gt",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 0
- }
- }
-}
-----
-
-==== P within
-
-[source,json]
-----
-{
- "@type" : "g:P",
- "@value" : {
- "predicate" : "within",
- "value" : [ {
- "@type" : "g:Int32",
- "@value" : 1
- } ]
- }
-}
-----
-
-==== P without
-
-[source,json]
-----
-{
- "@type" : "g:P",
- "@value" : {
- "predicate" : "without",
- "value" : [ {
- "@type" : "g:Int32",
- "@value" : 1
- }, {
- "@type" : "g:Int32",
- "@value" : 2
- } ]
- }
-}
-----
-
-==== P and
-
-[source,json]
-----
-{
- "@type" : "g:P",
- "@value" : {
- "predicate" : "and",
- "value" : [ {
- "@type" : "g:P",
- "@value" : {
- "predicate" : "gt",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 0
- }
- }
- }, {
- "@type" : "g:P",
- "@value" : {
- "predicate" : "lt",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 10
- }
- }
- } ]
- }
-}
-----
-
-==== P or
-
-[source,json]
-----
-{
- "@type" : "g:P",
- "@value" : {
- "predicate" : "or",
- "value" : [ {
- "@type" : "g:P",
- "@value" : {
- "predicate" : "gt",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 0
- }
- }
- }, {
- "@type" : "g:P",
- "@value" : {
- "predicate" : "within",
- "value" : [ {
- "@type" : "g:Int32",
- "@value" : -1
- }, {
- "@type" : "g:Int32",
- "@value" : -10
- }, {
- "@type" : "g:Int32",
- "@value" : -100
- } ]
- }
- } ]
- }
-}
-----
-
-==== Pick
-
-[source,json]
-----
-{
- "@type" : "g:Pick",
- "@value" : "any"
-}
-----
-
-==== Pop
-
-[source,json]
-----
-{
- "@type" : "g:Pop",
- "@value" : "all"
-}
-----
-
-==== Scope
-
-[source,json]
-----
-{
- "@type" : "g:Scope",
- "@value" : "local"
-}
-----
-
-==== T
-
-[source,json]
-----
-{
- "@type" : "g:T",
- "@value" : "label"
-}
-----
-
-==== TextP
-
-[source,json]
-----
-{
- "@type" : "g:TextP",
- "@value" : {
- "predicate" : "containing",
- "value" : "ark"
- }
-}
-----
-
-==== TraversalMetrics
-
-[source,json]
-----
-{
- "@type" : "g:TraversalMetrics",
- "@value" : {
- "dur" : {
- "@type" : "g:Double",
- "@value" : 0.004
- },
- "metrics" : [ {
- "@type" : "g:Metrics",
- "@value" : {
- "dur" : {
- "@type" : "g:Double",
- "@value" : 100.0
- },
- "counts" : {
- "traverserCount" : {
- "@type" : "g:Int64",
- "@value" : 4
- },
- "elementCount" : {
- "@type" : "g:Int64",
- "@value" : 4
- }
- },
- "name" : "TinkerGraphStep(vertex,[~label.eq(person)])",
- "annotations" : {
- "percentDur" : {
- "@type" : "g:Double",
- "@value" : 25.0
- }
- },
- "id" : "7.0.0()"
- }
- }, {
- "@type" : "g:Metrics",
- "@value" : {
- "dur" : {
- "@type" : "g:Double",
- "@value" : 100.0
- },
- "counts" : {
- "traverserCount" : {
- "@type" : "g:Int64",
- "@value" : 13
- },
- "elementCount" : {
- "@type" : "g:Int64",
- "@value" : 13
- }
- },
- "name" : "VertexStep(OUT,vertex)",
- "annotations" : {
- "percentDur" : {
- "@type" : "g:Double",
- "@value" : 25.0
- }
- },
- "id" : "2.0.0()"
- }
- }, {
- "@type" : "g:Metrics",
- "@value" : {
- "dur" : {
- "@type" : "g:Double",
- "@value" : 100.0
- },
- "counts" : {
- "traverserCount" : {
- "@type" : "g:Int64",
- "@value" : 7
- },
- "elementCount" : {
- "@type" : "g:Int64",
- "@value" : 7
- }
- },
- "name" : "VertexStep(OUT,vertex)",
- "annotations" : {
- "percentDur" : {
- "@type" : "g:Double",
- "@value" : 25.0
- }
- },
- "id" : "3.0.0()"
- }
- }, {
- "@type" : "g:Metrics",
- "@value" : {
- "dur" : {
- "@type" : "g:Double",
- "@value" : 100.0
- },
- "counts" : {
- "traverserCount" : {
- "@type" : "g:Int64",
- "@value" : 1
- },
- "elementCount" : {
- "@type" : "g:Int64",
- "@value" : 1
- }
- },
- "name" : "TreeStep",
- "annotations" : {
- "percentDur" : {
- "@type" : "g:Double",
- "@value" : 25.0
- }
- },
- "id" : "4.0.0()"
- }
- } ]
- }
-}
-----
-
-==== Traverser
-
-[source,json]
-----
-{
- "@type" : "g:Traverser",
- "@value" : {
- "bulk" : {
- "@type" : "g:Int64",
- "@value" : 1
- },
- "value" : {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 0
- },
- "value" : "marko",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "name"
- }
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 6
- },
- "value" : "san diego",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 1997
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 7
- },
- "value" : "santa cruz",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 8
- },
- "value" : "brussels",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 9
- },
- "value" : "santa fe",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
- }
- }
- } ]
- }
- }
- }
- }
-}
-----
-
-
-=== RequestMessage
-
-==== Authentication Response
-
-The following `RequestMessage` is an example of the response that should be made to a SASL-based authentication challenge.
-
-[source,json]
-----
-{
- "requestId" : {
- "@type" : "g:UUID",
- "@value" : "cb682578-9d92-4499-9ebc-5c6aa73c5397"
- },
- "op" : "authentication",
- "processor" : "",
- "args" : {
- "saslMechanism" : "PLAIN",
- "sasl" : "AHN0ZXBocGhlbgBwYXNzd29yZA=="
- }
-}
-----
-
-==== Session Eval
-
-The following `RequestMessage` is an example of a simple session request for a script evaluation with parameters.
-
-[source,json]
-----
-{
- "requestId" : {
- "@type" : "g:UUID",
- "@value" : "cb682578-9d92-4499-9ebc-5c6aa73c5397"
- },
- "op" : "eval",
- "processor" : "session",
- "args" : {
- "gremlin" : "g.V(x)",
- "language" : "gremlin-groovy",
- "session" : "unique-session-identifier",
- "bindings" : {
- "x" : {
- "@type" : "g:Int32",
- "@value" : 1
- }
- }
- }
-}
-----
-
-==== Session Eval Aliased
-
-The following `RequestMessage` is an example of a session request for a script evaluation with an alias that binds the `TraversalSource` of "g" to "social".
-
-[source,json]
-----
-{
- "requestId" : {
- "@type" : "g:UUID",
- "@value" : "cb682578-9d92-4499-9ebc-5c6aa73c5397"
- },
- "op" : "eval",
- "processor" : "session",
- "args" : {
- "gremlin" : "social.V(x)",
- "language" : "gremlin-groovy",
- "aliases" : {
- "g" : "social"
- },
- "session" : "unique-session-identifier",
- "bindings" : {
- "x" : {
- "@type" : "g:Int32",
- "@value" : 1
- }
- }
- }
-}
-----
-
-==== Session Close
-
-The following `RequestMessage` is an example of a request to close a session.
-
-[source,json]
-----
-{
- "requestId" : {
- "@type" : "g:UUID",
- "@value" : "cb682578-9d92-4499-9ebc-5c6aa73c5397"
- },
- "op" : "close",
- "processor" : "session",
- "args" : {
- "session" : "unique-session-identifier"
- }
-}
-----
-
-==== Sessionless Eval
-
-The following `RequestMessage` is an example of a simple sessionless request for a script evaluation with parameters.
-
-[source,json]
-----
-{
- "requestId" : {
- "@type" : "g:UUID",
- "@value" : "cb682578-9d92-4499-9ebc-5c6aa73c5397"
- },
- "op" : "eval",
- "processor" : "",
- "args" : {
- "gremlin" : "g.V(x)",
- "language" : "gremlin-groovy",
- "bindings" : {
- "x" : {
- "@type" : "g:Int32",
- "@value" : 1
- }
- }
- }
-}
-----
-
-==== Sessionless Eval Aliased
-
-The following `RequestMessage` is an example of a sessionless request for a script evaluation with an alias that binds the `TraversalSource` of "g" to "social".
-
-[source,json]
-----
-{
- "requestId" : {
- "@type" : "g:UUID",
- "@value" : "cb682578-9d92-4499-9ebc-5c6aa73c5397"
- },
- "op" : "eval",
- "processor" : "",
- "args" : {
- "gremlin" : "social.V(x)",
- "language" : "gremlin-groovy",
- "aliases" : {
- "g" : "social"
- },
- "bindings" : {
- "x" : {
- "@type" : "g:Int32",
- "@value" : 1
- }
- }
- }
-}
-----
-
-=== ResponseMessage
-
-==== Authentication Challenge
-
-When authentication is enabled, an initial request to the server will result in an authentication challenge. The typical response message will appear as follows, but handling it could be different dependending on the SASL implementation (e.g. multiple challenges maybe requested in some cases, but not in the default provided by Gremlin Server).
-
-[source,json]
-----
-{
- "requestId" : "41d2e28a-20a4-4ab0-b379-d810dede3786",
- "status" : {
- "message" : "",
- "code" : 407,
- "attributes" : { }
- },
- "result" : {
- "data" : null,
- "meta" : { }
- }
-}
-----
-
-==== Standard Result
-
-The following `ResponseMessage` is a typical example of the typical successful response Gremlin Server will return when returning results from a script.
-
-[source,json]
-----
-{
- "requestId" : "41d2e28a-20a4-4ab0-b379-d810dede3786",
- "status" : {
- "message" : "",
- "code" : 200,
- "attributes" : { }
- },
- "result" : {
- "data" : [ {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 0
- },
- "value" : "marko",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "name"
- }
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 6
- },
- "value" : "san diego",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 1997
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 7
- },
- "value" : "santa cruz",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 8
- },
- "value" : "brussels",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 9
- },
- "value" : "santa fe",
- "vertex" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
- }
- }
- } ]
- }
- }
- } ],
- "meta" : { }
- }
-}
-----
-
-
-=== Extended
-
-Note that the "extended" types require the addition of the separate `GraphSONXModuleV2` module as follows:
-
-[source,java]
-----
-mapper = GraphSONMapper.build().
- typeInfo(TypeInfo.PARTIAL_TYPES).
- addCustomModule(GraphSONXModuleV2.build()).
- version(GraphSONVersion.V2_0).create().createMapper()
-----
-
-==== BigDecimal
-
-[source,json]
-----
-{
- "@type" : "gx:BigDecimal",
- "@value" : 123456789987654321123456789987654321
-}
-----
-
-==== BigInteger
-
-[source,json]
-----
-{
- "@type" : "gx:BigInteger",
- "@value" : 123456789987654321123456789987654321
-}
-----
-
-==== Byte
-
-[source,json]
-----
-{
- "@type" : "gx:Byte",
- "@value" : 1
-}
-----
-
-==== ByteBuffer
-
-[source,json]
-----
-{
- "@type" : "gx:ByteBuffer",
- "@value" : "c29tZSBieXRlcyBmb3IgeW91"
-}
-----
-
-==== Char
-
-[source,json]
-----
-{
- "@type" : "gx:Char",
- "@value" : "x"
-}
-----
-
-==== Duration
-
-The following example is a `Duration` of five days.
-
-[source,json]
-----
-{
- "@type" : "gx:Duration",
- "@value" : "PT120H"
-}
-----
-
-==== InetAddress
-
-[source,json]
-----
-{
- "@type" : "gx:InetAddress",
- "@value" : "localhost"
-}
-----
-
-==== Instant
-
-[source,json]
-----
-{
- "@type" : "gx:Instant",
- "@value" : "2016-12-14T16:39:19.349Z"
-}
-----
-
-==== LocalDate
-
-[source,json]
-----
-{
- "@type" : "gx:LocalDate",
- "@value" : "2016-01-01"
-}
-----
-
-==== LocalDateTime
-
-[source,json]
-----
-{
- "@type" : "gx:LocalDateTime",
- "@value" : "2016-01-01T12:30"
-}
-----
-
-==== LocalTime
-
-[source,json]
-----
-{
- "@type" : "gx:LocalTime",
- "@value" : "12:30:45"
-}
-----
-
-==== MonthDay
-
-[source,json]
-----
-{
- "@type" : "gx:MonthDay",
- "@value" : "--01-01"
-}
-----
-
-==== OffsetDateTime
-
-[source,json]
-----
-{
- "@type" : "gx:OffsetDateTime",
- "@value" : "2007-12-03T10:15:30+01:00"
-}
-----
-
-==== OffsetTime
-
-[source,json]
-----
-{
- "@type" : "gx:OffsetTime",
- "@value" : "10:15:30+01:00"
-}
-----
-
-==== Period
-
-The following example is a `Period` of one year, six months and fifteen days.
-
-[source,json]
-----
-{
- "@type" : "gx:Period",
- "@value" : "P1Y6M15D"
-}
-----
-
-==== Short
-
-[source,json]
-----
-{
- "@type" : "gx:Int16",
- "@value" : 100
-}
-----
-
-==== Year
-
-The following example is of the `Year` "2016".
-
-[source,json]
-----
-{
- "@type" : "gx:Year",
- "@value" : "2016"
-}
-----
-
-==== YearMonth
-
-The following example is a `YearMonth` of "June 2016"
-
-[source,json]
-----
-{
- "@type" : "gx:YearMonth",
- "@value" : "2016-06"
-}
-----
-
-==== ZonedDateTime
-
-[source,json]
-----
-{
- "@type" : "gx:ZonedDateTime",
- "@value" : "2016-12-23T12:12:24.000000036+02:00[GMT+02:00]"
-}
-----
-
-==== ZoneOffset
-
-The following example is a `ZoneOffset` of three hours, six minutes, and nine seconds.
-
-[source,json]
-----
-{
- "@type" : "gx:ZoneOffset",
- "@value" : "+03:06:09"
-}
-----
-
-[[graphson-3d0]]
-== Version 3.0
-
-Version 3.0 of GraphSON was first introduced on TinkerPop 3.3.0 and is represented by the `application/vnd.gremlin-v3.0+json`
-mime type. It was introduced as only having embedded types. It is quite similar to GraphSON 2.0 with embedded types
-and in most cases will appear compatible to the eye, however there are some critical differences. GraphSON 2.0 relied
-on JSON data types for collections like `Map` and `List`. In GraphSON 3.0, there is explicit typed support for `Map`,
-`List` and `Set` as Gremlin relies on those types in quite specific ways that are not directly compatible with the
-JSON definitions of those collections. In the case of `List` and `Set`, it was important to distinguish between the
-two and for `Map` it was necessary to have the ability to return `Map` instances that did not have `String` keys
-(e.g. `g.V().out().groupCount()`).
-
-As of TinkerPop 3.7.0, GraphSON 3.0 also has a typeless representation referenced by the
-`application/vnd.gremlin-v3.0+json;types=false`. This format matches the format developed for 1.0.
-
-=== Core
-
-==== Class
-
-[source,json]
-----
-{
- "@type" : "g:Class",
- "@value" : "java.io.File"
-}
-----
-
-==== Date
-
-Representing a millisecond-precision offset from the unix epoch. In Java, it is simply `Date.getTime()`.
-
-[source,json]
-----
-{
- "@type" : "g:Date",
- "@value" : 1481750076295
-}
-----
-
-==== Double
-
-[source,json]
-----
-{
- "@type" : "g:Double",
- "@value" : 100.0
-}
-----
-
-==== Float
-
-[source,json]
-----
-{
- "@type" : "g:Float",
- "@value" : 100.0
-}
-----
-
-==== Integer
-
-[source,json]
-----
-{
- "@type" : "g:Int32",
- "@value" : 100
-}
-----
-
-==== List
-
-List is used to distinguish between different collection types as JSON is not explicit enough for all of Gremlin's requirements.
-
-[source,json]
-----
-{
- "@type" : "g:List",
- "@value" : [ {
- "@type" : "g:Int32",
- "@value" : 1
- }, "person", true ]
-}
-----
-
-==== Long
-
-[source,json]
-----
-{
- "@type" : "g:Int64",
- "@value" : 100
-}
-----
-
-==== Map
-
-Map is redefined so that to provide the ability to allow for non-String keys, which is not possible in JSON.
-
-[source,json]
-----
-{
- "@type" : "g:Map",
- "@value" : [ {
- "@type" : "g:Date",
- "@value" : 1481750076295
- }, "red", {
- "@type" : "g:List",
- "@value" : [ {
- "@type" : "g:Int32",
- "@value" : 1
- }, {
- "@type" : "g:Int32",
- "@value" : 2
- }, {
- "@type" : "g:Int32",
- "@value" : 3
- } ]
- }, {
- "@type" : "g:Date",
- "@value" : 1481750076295
- }, "test", {
- "@type" : "g:Int32",
- "@value" : 123
- } ]
-}
-----
-
-==== Set
-
-Allows a JSON collection to behave as a Set.
-
-[source,json]
-----
-{
- "@type" : "g:Set",
- "@value" : [ {
- "@type" : "g:Int32",
- "@value" : 1
- }, "person", true ]
-}
-----
-
-==== Timestamp
-
-[source,json]
-----
-{
- "@type" : "g:Timestamp",
- "@value" : 1481750076295
-}
-----
-
-==== UUID
-
-[source,json]
-----
-{
- "@type" : "g:UUID",
- "@value" : "41d2e28a-20a4-4ab0-b379-d810dede3786"
-}
-----
-
-
-=== Graph Structure
-
-==== Edge
-
-[source,json]
-----
-{
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 13
- },
- "label" : "develops",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "properties" : {
- "since" : {
- "@type" : "g:Property",
- "@value" : {
- "key" : "since",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 2009
- }
- }
- }
- }
- }
-}
-----
-
-==== Path
-
-[source,json]
-----
-{
- "@type" : "g:Path",
- "@value" : {
- "labels" : {
- "@type" : "g:List",
- "@value" : [ {
- "@type" : "g:Set",
- "@value" : [ ]
- }, {
- "@type" : "g:Set",
- "@value" : [ ]
- }, {
- "@type" : "g:Set",
- "@value" : [ ]
- } ]
- },
- "objects" : {
- "@type" : "g:List",
- "@value" : [ {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "person"
- }
- }, {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "label" : "software"
- }
- }, {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "label" : "software"
- }
- } ]
- }
- }
-}
-----
-
-==== Property
-
-[source,json]
-----
-{
- "@type" : "g:Property",
- "@value" : {
- "key" : "since",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 2009
- }
- }
-}
-----
-
-==== TinkerGraph
-
-`TinkerGraph` has a custom serializer that is registered as part of the `TinkerIoRegistry`.
-
-[source,json]
-----
-{
- "@type" : "tinker:graph",
- "@value" : {
- "vertices" : [ {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 0
- },
- "value" : "marko",
- "label" : "name"
- }
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 6
- },
- "value" : "san diego",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 1997
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 7
- },
- "value" : "santa cruz",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 8
- },
- "value" : "brussels",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 9
- },
- "value" : "santa fe",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
- }
- }
- } ]
- }
- }
- }, {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 7
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 1
+ }
+ }
},
- "value" : "stephen",
- "label" : "name"
- }
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 10
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 18
+ },
+ "value": "kaiserslautern",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2005
+ },
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2009
+ }
+ }
+ }
},
- "value" : "centreville",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 1990
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2000
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 19
+ },
+ "value": "aachen",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2009
+ }
+ }
}
}
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 11
- },
- "value" : "dulles",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2000
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2006
+ ]
+ }
+ }
+ },
+ {
+ "@type": "g:Vertex",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 10
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "properties": {
+ "name": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 4
+ },
+ "value": "gremlin",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "name"
+ ]
+ }
}
}
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 12
- },
- "value" : "purcellville",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2006
+ ]
+ }
+ }
+ },
+ {
+ "@type": "g:Vertex",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 11
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "properties": {
+ "name": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 5
+ },
+ "value": "tinkergraph",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "name"
+ ]
+ }
}
}
- }
- } ]
+ ]
+ }
}
}
- }, {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 8
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 2
- },
- "value" : "matthias",
- "label" : "name"
- }
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 13
- },
- "value" : "bremen",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2007
+ ],
+ "edges": [
+ {
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 13
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "develops"
+ ]
+ },
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 10
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 1
+ },
+ "properties": {
+ "since": {
+ "@type": "g:Property",
+ "@value": {
+ "key": "since",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 2009
}
}
}
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 14
- },
- "value" : "baltimore",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2007
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2011
+ }
+ }
+ },
+ {
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 14
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "develops"
+ ]
+ },
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 11
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 1
+ },
+ "properties": {
+ "since": {
+ "@type": "g:Property",
+ "@value": {
+ "key": "since",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 2010
}
}
}
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 15
- },
- "value" : "oakland",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2011
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2014
+ }
+ }
+ },
+ {
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 15
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "uses"
+ ]
+ },
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 10
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 1
+ },
+ "properties": {
+ "skill": {
+ "@type": "g:Property",
+ "@value": {
+ "key": "skill",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 4
}
}
}
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 16
- },
- "value" : "seattle",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2014
+ }
+ }
+ },
+ {
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 16
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "uses"
+ ]
+ },
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 11
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 1
+ },
+ "properties": {
+ "skill": {
+ "@type": "g:Property",
+ "@value": {
+ "key": "skill",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 5
}
}
}
- } ]
+ }
}
- }
- }, {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 9
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 3
- },
- "value" : "daniel",
- "label" : "name"
- }
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 17
- },
- "value" : "spremberg",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 1982
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
+ },
+ {
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 17
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "develops"
+ ]
+ },
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 10
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 7
+ },
+ "properties": {
+ "since": {
+ "@type": "g:Property",
+ "@value": {
+ "key": "since",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 2010
}
}
}
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 18
- },
- "value" : "kaiserslautern",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2009
+ }
+ }
+ },
+ {
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 18
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "develops"
+ ]
+ },
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 11
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 7
+ },
+ "properties": {
+ "since": {
+ "@type": "g:Property",
+ "@value": {
+ "key": "since",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 2011
}
}
}
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 19
- },
- "value" : "aachen",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2009
+ }
+ }
+ },
+ {
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 19
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "uses"
+ ]
+ },
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 10
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 7
+ },
+ "properties": {
+ "skill": {
+ "@type": "g:Property",
+ "@value": {
+ "key": "skill",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 5
}
}
}
- } ]
- }
- }
- }, {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "label" : "software",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 4
- },
- "value" : "gremlin",
- "label" : "name"
- }
- } ]
- }
- }
- }, {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "label" : "software",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 5
- },
- "value" : "tinkergraph",
- "label" : "name"
- }
- } ]
+ }
}
- }
- } ],
- "edges" : [ {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 13
- },
- "label" : "develops",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "properties" : {
- "since" : {
- "@type" : "g:Property",
- "@value" : {
- "key" : "since",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 2009
+ },
+ {
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 20
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "uses"
+ ]
+ },
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 11
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 7
+ },
+ "properties": {
+ "skill": {
+ "@type": "g:Property",
+ "@value": {
+ "key": "skill",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 4
+ }
}
}
}
}
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 14
- },
- "label" : "develops",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "properties" : {
- "since" : {
- "@type" : "g:Property",
- "@value" : {
- "key" : "since",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 2010
+ },
+ {
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 21
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "develops"
+ ]
+ },
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 10
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 8
+ },
+ "properties": {
+ "since": {
+ "@type": "g:Property",
+ "@value": {
+ "key": "since",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 2012
+ }
}
}
}
}
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 15
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Property",
- "@value" : {
- "key" : "skill",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 4
+ },
+ {
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 22
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "uses"
+ ]
+ },
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 10
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 8
+ },
+ "properties": {
+ "skill": {
+ "@type": "g:Property",
+ "@value": {
+ "key": "skill",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 3
+ }
}
}
}
}
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 16
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Property",
- "@value" : {
- "key" : "skill",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 5
+ },
+ {
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 23
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "uses"
+ ]
+ },
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 11
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 8
+ },
+ "properties": {
+ "skill": {
+ "@type": "g:Property",
+ "@value": {
+ "key": "skill",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 3
+ }
}
}
}
}
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 17
- },
- "label" : "develops",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 7
- },
- "properties" : {
- "since" : {
- "@type" : "g:Property",
- "@value" : {
- "key" : "since",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 2010
+ },
+ {
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 24
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "uses"
+ ]
+ },
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 10
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 9
+ },
+ "properties": {
+ "skill": {
+ "@type": "g:Property",
+ "@value": {
+ "key": "skill",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 5
+ }
}
}
}
}
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 18
- },
- "label" : "develops",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 7
- },
- "properties" : {
- "since" : {
- "@type" : "g:Property",
- "@value" : {
- "key" : "since",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 2011
+ },
+ {
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 25
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "uses"
+ ]
+ },
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 11
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 9
+ },
+ "properties": {
+ "skill": {
+ "@type": "g:Property",
+ "@value": {
+ "key": "skill",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 3
+ }
}
}
}
}
- }
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 19
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 7
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Property",
- "@value" : {
- "key" : "skill",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 5
- }
- }
+ },
+ {
+ "@type": "g:Edge",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 26
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "traverses"
+ ]
+ },
+ "inVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "outVLabel": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "inV": {
+ "@type": "g:Int32",
+ "@value": 11
+ },
+ "outV": {
+ "@type": "g:Int32",
+ "@value": 10
}
}
}
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 20
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 7
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Property",
- "@value" : {
- "key" : "skill",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 4
- }
+ ]
+ }
+}
+----
+
+[source,json]
+----
+{
+ "vertices": [
+ {
+ "id": 1,
+ "label": [
+ "person"
+ ],
+ "type": "vertex",
+ "properties": {
+ "name": [
+ {
+ "id": 0,
+ "value": "marko"
+ }
+ ],
+ "location": [
+ {
+ "id": 6,
+ "value": "san diego",
+ "properties": {
+ "startTime": 1997,
+ "endTime": 2001
+ }
+ },
+ {
+ "id": 7,
+ "value": "santa cruz",
+ "properties": {
+ "startTime": 2001,
+ "endTime": 2004
+ }
+ },
+ {
+ "id": 8,
+ "value": "brussels",
+ "properties": {
+ "startTime": 2004,
+ "endTime": 2005
+ }
+ },
+ {
+ "id": 9,
+ "value": "santa fe",
+ "properties": {
+ "startTime": 2005
}
}
- }
+ ]
}
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 21
- },
- "label" : "develops",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 8
- },
- "properties" : {
- "since" : {
- "@type" : "g:Property",
- "@value" : {
- "key" : "since",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 2012
- }
+ },
+ {
+ "id": 7,
+ "label": [
+ "person"
+ ],
+ "type": "vertex",
+ "properties": {
+ "name": [
+ {
+ "id": 1,
+ "value": "stephen"
+ }
+ ],
+ "location": [
+ {
+ "id": 10,
+ "value": "centreville",
+ "properties": {
+ "startTime": 1990,
+ "endTime": 2000
+ }
+ },
+ {
+ "id": 11,
+ "value": "dulles",
+ "properties": {
+ "startTime": 2000,
+ "endTime": 2006
+ }
+ },
+ {
+ "id": 12,
+ "value": "purcellville",
+ "properties": {
+ "startTime": 2006
}
}
- }
+ ]
}
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 22
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 8
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Property",
- "@value" : {
- "key" : "skill",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 3
- }
+ },
+ {
+ "id": 8,
+ "label": [
+ "person"
+ ],
+ "type": "vertex",
+ "properties": {
+ "name": [
+ {
+ "id": 2,
+ "value": "matthias"
+ }
+ ],
+ "location": [
+ {
+ "id": 13,
+ "value": "bremen",
+ "properties": {
+ "startTime": 2004,
+ "endTime": 2007
+ }
+ },
+ {
+ "id": 14,
+ "value": "baltimore",
+ "properties": {
+ "startTime": 2007,
+ "endTime": 2011
+ }
+ },
+ {
+ "id": 15,
+ "value": "oakland",
+ "properties": {
+ "startTime": 2011,
+ "endTime": 2014
+ }
+ },
+ {
+ "id": 16,
+ "value": "seattle",
+ "properties": {
+ "startTime": 2014
}
}
- }
+ ]
}
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 23
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 8
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Property",
- "@value" : {
- "key" : "skill",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 3
- }
+ },
+ {
+ "id": 9,
+ "label": [
+ "person"
+ ],
+ "type": "vertex",
+ "properties": {
+ "name": [
+ {
+ "id": 3,
+ "value": "daniel"
+ }
+ ],
+ "location": [
+ {
+ "id": 17,
+ "value": "spremberg",
+ "properties": {
+ "startTime": 1982,
+ "endTime": 2005
+ }
+ },
+ {
+ "id": 18,
+ "value": "kaiserslautern",
+ "properties": {
+ "startTime": 2005,
+ "endTime": 2009
+ }
+ },
+ {
+ "id": 19,
+ "value": "aachen",
+ "properties": {
+ "startTime": 2009
}
}
- }
+ ]
}
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 24
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 10
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 9
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Property",
- "@value" : {
- "key" : "skill",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 5
- }
- }
+ },
+ {
+ "id": 10,
+ "label": [
+ "software"
+ ],
+ "type": "vertex",
+ "properties": {
+ "name": [
+ {
+ "id": 4,
+ "value": "gremlin"
}
- }
+ ]
}
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 25
- },
- "label" : "uses",
- "inVLabel" : "software",
- "outVLabel" : "person",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 9
- },
- "properties" : {
- "skill" : {
- "@type" : "g:Property",
- "@value" : {
- "key" : "skill",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 3
- }
- }
+ },
+ {
+ "id": 11,
+ "label": [
+ "software"
+ ],
+ "type": "vertex",
+ "properties": {
+ "name": [
+ {
+ "id": 5,
+ "value": "tinkergraph"
}
- }
+ ]
}
- }, {
- "@type" : "g:Edge",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 26
- },
- "label" : "traverses",
- "inVLabel" : "software",
- "outVLabel" : "software",
- "inV" : {
- "@type" : "g:Int32",
- "@value" : 11
- },
- "outV" : {
- "@type" : "g:Int32",
- "@value" : 10
- }
+ }
+ ],
+ "edges": [
+ {
+ "id": 13,
+ "label": [
+ "develops"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "person"
+ ],
+ "inV": 10,
+ "outV": 1,
+ "properties": {
+ "since": 2009
}
- } ]
- }
+ },
+ {
+ "id": 14,
+ "label": [
+ "develops"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "person"
+ ],
+ "inV": 11,
+ "outV": 1,
+ "properties": {
+ "since": 2010
+ }
+ },
+ {
+ "id": 15,
+ "label": [
+ "uses"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "person"
+ ],
+ "inV": 10,
+ "outV": 1,
+ "properties": {
+ "skill": 4
+ }
+ },
+ {
+ "id": 16,
+ "label": [
+ "uses"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "person"
+ ],
+ "inV": 11,
+ "outV": 1,
+ "properties": {
+ "skill": 5
+ }
+ },
+ {
+ "id": 17,
+ "label": [
+ "develops"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "person"
+ ],
+ "inV": 10,
+ "outV": 7,
+ "properties": {
+ "since": 2010
+ }
+ },
+ {
+ "id": 18,
+ "label": [
+ "develops"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "person"
+ ],
+ "inV": 11,
+ "outV": 7,
+ "properties": {
+ "since": 2011
+ }
+ },
+ {
+ "id": 19,
+ "label": [
+ "uses"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "person"
+ ],
+ "inV": 10,
+ "outV": 7,
+ "properties": {
+ "skill": 5
+ }
+ },
+ {
+ "id": 20,
+ "label": [
+ "uses"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "person"
+ ],
+ "inV": 11,
+ "outV": 7,
+ "properties": {
+ "skill": 4
+ }
+ },
+ {
+ "id": 21,
+ "label": [
+ "develops"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "person"
+ ],
+ "inV": 10,
+ "outV": 8,
+ "properties": {
+ "since": 2012
+ }
+ },
+ {
+ "id": 22,
+ "label": [
+ "uses"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "person"
+ ],
+ "inV": 10,
+ "outV": 8,
+ "properties": {
+ "skill": 3
+ }
+ },
+ {
+ "id": 23,
+ "label": [
+ "uses"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "person"
+ ],
+ "inV": 11,
+ "outV": 8,
+ "properties": {
+ "skill": 3
+ }
+ },
+ {
+ "id": 24,
+ "label": [
+ "uses"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "person"
+ ],
+ "inV": 10,
+ "outV": 9,
+ "properties": {
+ "skill": 5
+ }
+ },
+ {
+ "id": 25,
+ "label": [
+ "uses"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "person"
+ ],
+ "inV": 11,
+ "outV": 9,
+ "properties": {
+ "skill": 3
+ }
+ },
+ {
+ "id": 26,
+ "label": [
+ "traverses"
+ ],
+ "type": "edge",
+ "inVLabel": [
+ "software"
+ ],
+ "outVLabel": [
+ "software"
+ ],
+ "inV": 11,
+ "outV": 10
+ }
+ ]
}
----
-==== Vertex
+==== Path
+
+Object with two required keys: "labels" and "objects"+
+"labels" is a `g:List` of `g:Set` of labels of the steps traversed+
+"objects" is a `g:List` of objects traversed
[source,json]
----
{
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 0
- },
- "value" : "marko",
- "label" : "name"
+ "@type": "g:Path",
+ "@value": {
+ "labels": {
+ "@type": "g:List",
+ "@value": [
+ {
+ "@type": "g:Set",
+ "@value": []
+ },
+ {
+ "@type": "g:Set",
+ "@value": []
+ },
+ {
+ "@type": "g:Set",
+ "@value": []
}
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 6
- },
- "value" : "san diego",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 1997
+ ]
+ },
+ "objects": {
+ "@type": "g:List",
+ "@value": [
+ {
+ "@type": "g:Vertex",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 1
},
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
}
}
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 7
- },
- "value" : "santa cruz",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
+ },
+ {
+ "@type": "g:Vertex",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 10
},
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
}
}
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 8
- },
- "value" : "brussels",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
+ },
+ {
+ "@type": "g:Vertex",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 11
},
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
}
}
}
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 9
- },
- "value" : "santa fe",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
- }
- }
- } ]
+ ]
}
}
}
----
-==== VertexProperty
-
[source,json]
----
{
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 0
+ "labels": [
+ [],
+ [],
+ []
+ ],
+ "objects": [
+ {
+ "id": 1,
+ "label": [
+ "person"
+ ],
+ "type": "vertex"
},
- "value" : "marko",
- "label" : "name"
- }
-}
-----
-
-
-=== Graph Process
-
-==== Barrier
-
-[source,json]
-----
-{
- "@type" : "g:Barrier",
- "@value" : "normSack"
-}
-----
-
-==== Binding
-
-A "Binding" refers to a `Bytecode.Binding`.
-
-[source,json]
-----
-{
- "@type" : "g:Binding",
- "@value" : {
- "key" : "x",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 1
- }
- }
-}
-----
-
-==== BulkSet
-
-[source,json]
-----
-{
- "@type" : "g:BulkSet",
- "@value" : [ "marko", {
- "@type" : "g:Int64",
- "@value" : 1
- }, "josh", {
- "@type" : "g:Int64",
- "@value" : 2
- } ]
-}
-----
-
-==== Bytecode
-
-The following `Bytecode` example represents the traversal of `g.V().hasLabel('person').out().in().tree()`. Obviously the serialized `Bytecode` woudl be quite different for the endless variations of commands that could be used together in the Gremlin language.
-
-[source,json]
-----
-{
- "@type" : "g:Bytecode",
- "@value" : {
- "step" : [ [ "V" ], [ "hasLabel", "person" ], [ "out" ], [ "in" ], [ "tree" ] ]
- }
-}
-----
-
-==== Cardinality
-
-[source,json]
-----
-{
- "@type" : "g:Cardinality",
- "@value" : "list"
-}
-----
-
-==== Column
-
-[source,json]
-----
-{
- "@type" : "g:Column",
- "@value" : "keys"
-}
-----
-
-==== Direction
-
-[source,json]
-----
-{
- "@type" : "g:Direction",
- "@value" : "OUT"
-}
-----
-
-==== DT
-
-[source,json]
-----
-{
- "@type" : "g:DT",
- "@value" : "minute"
-}
-----
-
-==== Lambda
-
-[source,json]
-----
-{
- "@type" : "g:Lambda",
- "@value" : {
- "script" : "{ it.get() }",
- "language" : "gremlin-groovy",
- "arguments" : 1
- }
-}
-----
-
-==== Merge
-
-[source,json]
-----
-{
- "@type" : "g:Merge",
- "@value" : "onMatch"
-}
-----
-
-==== Metrics
-
-[source,json]
-----
-{
- "@type" : "g:Metrics",
- "@value" : {
- "@type" : "g:Map",
- "@value" : [ "dur", {
- "@type" : "g:Double",
- "@value" : 100.0
- }, "counts", {
- "@type" : "g:Map",
- "@value" : [ "traverserCount", {
- "@type" : "g:Int64",
- "@value" : 4
- }, "elementCount", {
- "@type" : "g:Int64",
- "@value" : 4
- } ]
- }, "name", "TinkerGraphStep(vertex,[~label.eq(person)])", "annotations", {
- "@type" : "g:Map",
- "@value" : [ "percentDur", {
- "@type" : "g:Double",
- "@value" : 25.0
- } ]
- }, "id", "7.0.0()", "metrics", {
- "@type" : "g:List",
- "@value" : [ {
- "@type" : "g:Metrics",
- "@value" : {
- "@type" : "g:Map",
- "@value" : [ "dur", {
- "@type" : "g:Double",
- "@value" : 100.0
- }, "counts", {
- "@type" : "g:Map",
- "@value" : [ "traverserCount", {
- "@type" : "g:Int64",
- "@value" : 7
- }, "elementCount", {
- "@type" : "g:Int64",
- "@value" : 7
- } ]
- }, "name", "VertexStep(OUT,vertex)", "annotations", {
- "@type" : "g:Map",
- "@value" : [ "percentDur", {
- "@type" : "g:Double",
- "@value" : 25.0
- } ]
- }, "id", "3.0.0()" ]
- }
- } ]
- } ]
- }
-}
-----
-
-==== Operator
-
-[source,json]
-----
-{
- "@type" : "g:Operator",
- "@value" : "sum"
-}
-----
-
-==== Order
-
-[source,json]
-----
-{
- "@type" : "g:Order",
- "@value" : "shuffle"
-}
-----
-
-==== P
-
-`P` expects a single value of a `List` of values. There is special handling for `List` values when it comes to `within`, `without`, `inside`, `outside` and `between`. For `inside`, `outside` and `between`, the expectation is that the collection contain two objects (the rest will be ignored) and those two objects become the arguments to those methods. For `within` and `without`, these methods will accept an arbitrary number of objects in the collection.
-
-[source,json]
-----
-{
- "@type" : "g:P",
- "@value" : {
- "predicate" : "gt",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 0
+ {
+ "id": 10,
+ "label": [
+ "software"
+ ],
+ "type": "vertex"
+ },
+ {
+ "id": 11,
+ "label": [
+ "software"
+ ],
+ "type": "vertex"
}
- }
+ ]
}
----
-==== P within
+==== Property
-Please see <<_p,P>> for additional information on `within`.
+JSON Object with two required keys: "key" and "value"+
+"key" is a `String`
+"value" is any GraphSON 4.0 type
[source,json]
----
{
- "@type" : "g:P",
- "@value" : {
- "predicate" : "within",
- "value" : {
- "@type" : "g:List",
- "@value" : [ {
- "@type" : "g:Int32",
- "@value" : 1
- } ]
+ "@type": "g:Property",
+ "@value": {
+ "key": "since",
+ "value": {
+ "@type": "g:Int32",
+ "@value": 2009
}
}
}
----
-==== P without
-
-Please see <<_p,P>> for additional information on `within`.
-
[source,json]
----
{
- "@type" : "g:P",
- "@value" : {
- "predicate" : "without",
- "value" : {
- "@type" : "g:List",
- "@value" : [ {
- "@type" : "g:Int32",
- "@value" : 1
- }, {
- "@type" : "g:Int32",
- "@value" : 2
- } ]
- }
- }
+ "key" : "since",
+ "value" : 2009
}
----
-==== P and
-
-[source,json]
-----
-{
- "@type" : "g:P",
- "@value" : {
- "predicate" : "and",
- "value" : [ {
- "@type" : "g:P",
- "@value" : {
- "predicate" : "gt",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 0
- }
- }
- }, {
- "@type" : "g:P",
- "@value" : {
- "predicate" : "lt",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 10
- }
- }
- } ]
- }
-}
-----
+==== Tree
-==== P or
+JSON Object with one or more possibly nested "key" "value" pairs
+"key" is an Element (`g:Vertex`, `g:Edge`, `g:VertexProperty`)
+"value" is a `g:Tree` making this a recursively defined structure
[source,json]
----
{
- "@type" : "g:P",
- "@value" : {
- "predicate" : "or",
- "value" : [ {
- "@type" : "g:P",
- "@value" : {
- "predicate" : "gt",
- "value" : {
- "@type" : "g:Int32",
- "@value" : 0
- }
- }
- }, {
- "@type" : "g:P",
- "@value" : {
- "predicate" : "within",
- "value" : {
- "@type" : "g:List",
- "@value" : [ {
- "@type" : "g:Int32",
- "@value" : -1
- }, {
- "@type" : "g:Int32",
- "@value" : -10
- }, {
- "@type" : "g:Int32",
- "@value" : -100
- } ]
+ "@type": "g:Tree",
+ "@value": [
+ {
+ "key": {
+ "@type": "g:Vertex",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 10
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "properties": {
+ "name": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 4
+ },
+ "value": "gremlin",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "name"
+ ]
+ }
+ }
+ }
+ ]
+ }
}
+ },
+ "value": {
+ "@type": "g:Tree",
+ "@value": [
+ {
+ "key": {
+ "@type": "g:Vertex",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 11
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "software"
+ ]
+ },
+ "properties": {
+ "name": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 5
+ },
+ "value": "tinkergraph",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "name"
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "value": {
+ "@type": "g:Tree",
+ "@value": []
+ }
+ }
+ ]
}
- } ]
- }
-}
-----
-
-==== Pick
-
-[source,json]
-----
-{
- "@type" : "g:Pick",
- "@value" : "any"
-}
-----
-
-==== Pop
-
-[source,json]
-----
-{
- "@type" : "g:Pop",
- "@value" : "all"
-}
-----
-
-==== Scope
-
-[source,json]
-----
-{
- "@type" : "g:Scope",
- "@value" : "local"
-}
-----
-
-==== T
-
-[source,json]
-----
-{
- "@type" : "g:T",
- "@value" : "label"
+ }
+ ]
}
----
-==== TextP
-
[source,json]
----
-{
- "@type" : "g:TextP",
- "@value" : {
- "predicate" : "containing",
- "value" : "ark"
+[
+ {
+ "key": {
+ "id": 10,
+ "label": [
+ "software"
+ ],
+ "type": "vertex",
+ "properties": {
+ "name": [
+ {
+ "id": 4,
+ "value": "gremlin"
+ }
+ ]
+ }
+ },
+ "value": [
+ {
+ "key": {
+ "id": 11,
+ "label": [
+ "software"
+ ],
+ "type": "vertex",
+ "properties": {
+ "name": [
+ {
+ "id": 5,
+ "value": "tinkergraph"
+ }
+ ]
+ }
+ },
+ "value": []
+ }
+ ]
}
-}
+]
----
-==== TraversalMetrics
+==== Vertex
-[source,json]
-----
-{
- "@type" : "g:TraversalMetrics",
- "@value" : {
- "@type" : "g:Map",
- "@value" : [ "dur", {
- "@type" : "g:Double",
- "@value" : 0.004
- }, "metrics", {
- "@type" : "g:List",
- "@value" : [ {
- "@type" : "g:Metrics",
- "@value" : {
- "@type" : "g:Map",
- "@value" : [ "dur", {
- "@type" : "g:Double",
- "@value" : 100.0
- }, "counts", {
- "@type" : "g:Map",
- "@value" : [ "traverserCount", {
- "@type" : "g:Int64",
- "@value" : 4
- }, "elementCount", {
- "@type" : "g:Int64",
- "@value" : 4
- } ]
- }, "name", "TinkerGraphStep(vertex,[~label.eq(person)])", "annotations", {
- "@type" : "g:Map",
- "@value" : [ "percentDur", {
- "@type" : "g:Double",
- "@value" : 25.0
- } ]
- }, "id", "7.0.0()" ]
- }
- }, {
- "@type" : "g:Metrics",
- "@value" : {
- "@type" : "g:Map",
- "@value" : [ "dur", {
- "@type" : "g:Double",
- "@value" : 100.0
- }, "counts", {
- "@type" : "g:Map",
- "@value" : [ "traverserCount", {
- "@type" : "g:Int64",
- "@value" : 13
- }, "elementCount", {
- "@type" : "g:Int64",
- "@value" : 13
- } ]
- }, "name", "VertexStep(OUT,vertex)", "annotations", {
- "@type" : "g:Map",
- "@value" : [ "percentDur", {
- "@type" : "g:Double",
- "@value" : 25.0
- } ]
- }, "id", "2.0.0()" ]
- }
- }, {
- "@type" : "g:Metrics",
- "@value" : {
- "@type" : "g:Map",
- "@value" : [ "dur", {
- "@type" : "g:Double",
- "@value" : 100.0
- }, "counts", {
- "@type" : "g:Map",
- "@value" : [ "traverserCount", {
- "@type" : "g:Int64",
- "@value" : 7
- }, "elementCount", {
- "@type" : "g:Int64",
- "@value" : 7
- } ]
- }, "name", "VertexStep(OUT,vertex)", "annotations", {
- "@type" : "g:Map",
- "@value" : [ "percentDur", {
- "@type" : "g:Double",
- "@value" : 25.0
- } ]
- }, "id", "3.0.0()" ]
- }
- }, {
- "@type" : "g:Metrics",
- "@value" : {
- "@type" : "g:Map",
- "@value" : [ "dur", {
- "@type" : "g:Double",
- "@value" : 100.0
- }, "counts", {
- "@type" : "g:Map",
- "@value" : [ "traverserCount", {
- "@type" : "g:Int64",
- "@value" : 1
- }, "elementCount", {
- "@type" : "g:Int64",
- "@value" : 1
- } ]
- }, "name", "TreeStep", "annotations", {
- "@type" : "g:Map",
- "@value" : [ "percentDur", {
- "@type" : "g:Double",
- "@value" : 25.0
- } ]
- }, "id", "4.0.0()" ]
- }
- } ]
- } ]
- }
-}
-----
+JSON Object with required keys: "id", "label", "properties"+
+"id" is any GraphSON 4.0 type+
+"label" is a `g:List` of `String`+
+"properties" is an Object containing Arrays of `g:VertexProperty`
-==== Traverser
+The untyped version has one additional required key "type" which is always "vertex".
[source,json]
----
{
- "@type" : "g:Traverser",
- "@value" : {
- "bulk" : {
- "@type" : "g:Int64",
- "@value" : 1
+ "@type": "g:Vertex",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 1
},
- "value" : {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 0
- },
- "value" : "marko",
- "label" : "name"
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "properties": {
+ "name": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 0
+ },
+ "value": "marko",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "name"
+ ]
}
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 6
+ }
+ }
+ ],
+ "location": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 6
+ },
+ "value": "san diego",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 1997
},
- "value" : "san diego",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 1997
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
- }
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2001
}
}
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 7
+ }
+ },
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 7
+ },
+ "value": "santa cruz",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2001
},
- "value" : "santa cruz",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- }
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2004
}
}
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 8
+ }
+ },
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 8
+ },
+ "value": "brussels",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2004
},
- "value" : "brussels",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2005
}
}
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 9
- },
- "value" : "santa fe",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
- }
+ }
+ },
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 9
+ },
+ "value": "santa fe",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2005
}
}
- } ]
+ }
}
- }
+ ]
}
}
}
----
-
-=== RequestMessage
-
-==== Authentication Response
-
-The following `RequestMessage` is an example of the response that should be made to a SASL-based authentication challenge.
-
[source,json]
----
{
- "requestId" : "cb682578-9d92-4499-9ebc-5c6aa73c5397",
- "op" : "authentication",
- "processor" : "",
- "args" : {
- "@type" : "g:Map",
- "@value" : [ "saslMechanism", "PLAIN", "sasl", "AHN0ZXBocGhlbgBwYXNzd29yZA==" ]
+ "id": 1,
+ "label": [
+ "person"
+ ],
+ "type": "vertex",
+ "properties": {
+ "name": [
+ {
+ "id": 0,
+ "value": "marko"
+ }
+ ],
+ "location": [
+ {
+ "id": 6,
+ "value": "san diego",
+ "properties": {
+ "startTime": 1997,
+ "endTime": 2001
+ }
+ },
+ {
+ "id": 7,
+ "value": "santa cruz",
+ "properties": {
+ "startTime": 2001,
+ "endTime": 2004
+ }
+ },
+ {
+ "id": 8,
+ "value": "brussels",
+ "properties": {
+ "startTime": 2004,
+ "endTime": 2005
+ }
+ },
+ {
+ "id": 9,
+ "value": "santa fe",
+ "properties": {
+ "startTime": 2005
+ }
+ }
+ ]
}
}
----
-==== Session Eval
+==== VertexProperty
-The following `RequestMessage` is an example of a simple session request for a script evaluation with parameters.
+JOSN Object with required keys: "id", "value", "label", "properties"+
+"id" is any type GraphSON 4.0 type+
+"value" is any type GraphSON 4.0 type+
+"label" is a `g:List` of `String`+
+"properties" contains an Array of "g:Property" (metaproperties)
[source,json]
----
{
- "requestId" : "cb682578-9d92-4499-9ebc-5c6aa73c5397",
- "op" : "eval",
- "processor" : "session",
- "args" : {
- "@type" : "g:Map",
- "@value" : [ "gremlin", "g.V(x)", "language", "gremlin-groovy", "session", "unique-session-identifier", "bindings", {
- "@type" : "g:Map",
- "@value" : [ "x", {
- "@type" : "g:Int32",
- "@value" : 1
- } ]
- } ]
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 0
+ },
+ "value": "marko",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "name"
+ ]
+ }
}
}
----
-==== Session Eval Aliased
-
-The following `RequestMessage` is an example of a session request for a script evaluation with an alias that binds the `TraversalSource` of "g" to "social".
-
[source,json]
----
{
- "requestId" : "cb682578-9d92-4499-9ebc-5c6aa73c5397",
- "op" : "eval",
- "processor" : "session",
- "args" : {
- "@type" : "g:Map",
- "@value" : [ "gremlin", "social.V(x)", "language", "gremlin-groovy", "aliases", {
- "@type" : "g:Map",
- "@value" : [ "g", "social" ]
- }, "session", "unique-session-identifier", "bindings", {
- "@type" : "g:Map",
- "@value" : [ "x", {
- "@type" : "g:Int32",
- "@value" : 1
- } ]
- } ]
- }
+ "id": 0,
+ "value": "marko",
+ "label": [
+ "name"
+ ]
}
----
-==== Session Close
+=== Graph Process
+
+==== Direction
-The following `RequestMessage` is an example of a request to close a session.
+JSON String of the enum value.
[source,json]
----
{
- "requestId" : "cb682578-9d92-4499-9ebc-5c6aa73c5397",
- "op" : "close",
- "processor" : "session",
- "args" : {
- "@type" : "g:Map",
- "@value" : [ "session", "unique-session-identifier" ]
- }
+ "@type" : "g:Direction",
+ "@value" : "OUT"
}
----
-==== Sessionless Eval
+[source,text]
+----
+"OUT"
+----
-The following `RequestMessage` is an example of a simple sessionless request for a script evaluation with parameters.
+==== T
+
+JSON String of the enum value.
[source,json]
----
{
- "requestId" : "cb682578-9d92-4499-9ebc-5c6aa73c5397",
- "op" : "eval",
- "processor" : "",
- "args" : {
- "@type" : "g:Map",
- "@value" : [ "gremlin", "g.V(x)", "language", "gremlin-groovy", "bindings", {
- "@type" : "g:Map",
- "@value" : [ "x", {
- "@type" : "g:Int32",
- "@value" : 1
- } ]
- } ]
- }
+ "@type" : "g:T",
+ "@value" : "label"
}
----
-==== Sessionless Eval Aliased
+[source,text]
+----
+"label"
+----
+
+=== RequestMessage
+
+==== Standard
-The following `RequestMessage` is an example of a sessionless request for a script evaluation with an alias that binds the `TraversalSource` of "g" to "social".
+The following `RequestMessage` is an example of a simple sessionless request for a script evaluation with parameters.
[source,json]
----
{
- "requestId" : "cb682578-9d92-4499-9ebc-5c6aa73c5397",
- "op" : "eval",
- "processor" : "",
- "args" : {
- "@type" : "g:Map",
- "@value" : [ "gremlin", "social.V(x)", "language", "gremlin-groovy", "aliases", {
- "@type" : "g:Map",
- "@value" : [ "g", "social" ]
- }, "bindings", {
- "@type" : "g:Map",
- "@value" : [ "x", {
- "@type" : "g:Int32",
- "@value" : 1
- } ]
- } ]
+ "gremlin": "g.V(x)",
+ "fields": {
+ "@type": "g:Map",
+ "@value": [
+ "materializeProperties",
+ "tokens",
+ "timeoutMs",
+ {
+ "@type": "g:Int64",
+ "@value": 1000
+ },
+ "g",
+ "g",
+ "bindings",
+ {
+ "@type": "g:Map",
+ "@value": [
+ "x",
+ {
+ "@type": "g:Int32",
+ "@value": 1
+ }
+ ]
+ },
+ "language",
+ "gremlin-groovy"
+ ]
}
}
----
-
-=== ResponseMessage
-
-==== Authentication Challenge
-
-When authentication is enabled, an initial request to the server will result in an authentication challenge. The typical response message will appear as follows, but handling it could be different depending on the SASL implementation (e.g. multiple challenges may be requested in some cases, but not in the default provided by Gremlin Server).
-
[source,json]
----
{
- "requestId" : "41d2e28a-20a4-4ab0-b379-d810dede3786",
- "status" : {
- "message" : "",
- "code" : 407,
- "attributes" : {
- "@type" : "g:Map",
- "@value" : [ ]
- }
- },
- "result" : {
- "data" : null,
- "meta" : {
- "@type" : "g:Map",
- "@value" : [ ]
- }
+ "gremlin": "g.V(x)",
+ "fields": {
+ "materializeProperties": "tokens",
+ "timeoutMs": 1000,
+ "g": "g",
+ "bindings": {
+ "x": 1
+ },
+ "language": "gremlin-groovy"
}
}
----
+=== ResponseMessage
+
==== Standard Result
The following `ResponseMessage` is a typical example of the typical successful response Gremlin Server will return when returning results from a script.
@@ -5534,346 +2811,383 @@ The following `ResponseMessage` is a typical example of the typical successful r
[source,json]
----
{
- "requestId" : "41d2e28a-20a4-4ab0-b379-d810dede3786",
- "status" : {
- "message" : "",
- "code" : 200,
- "attributes" : {
- "@type" : "g:Map",
- "@value" : [ ]
- }
- },
- "result" : {
- "data" : {
- "@type" : "g:List",
- "@value" : [ {
- "@type" : "g:Vertex",
- "@value" : {
- "id" : {
- "@type" : "g:Int32",
- "@value" : 1
- },
- "label" : "person",
- "properties" : {
- "name" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 0
- },
- "value" : "marko",
- "label" : "name"
- }
- } ],
- "location" : [ {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 6
- },
- "value" : "san diego",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 1997
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
+ "result": {
+ "data": {
+ "@type": "g:List",
+ "@value": [
+ {
+ "@type": "g:Vertex",
+ "@value": {
+ "id": {
+ "@type": "g:Int32",
+ "@value": 1
+ },
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "person"
+ ]
+ },
+ "properties": {
+ "name": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 0
+ },
+ "value": "marko",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "name"
+ ]
+ }
}
}
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 7
+ ],
+ "location": [
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 6
+ },
+ "value": "san diego",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 1997
+ },
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2001
+ }
+ }
+ }
},
- "value" : "santa cruz",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2001
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 7
+ },
+ "value": "santa cruz",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2001
+ },
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2004
+ }
+ }
}
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 8
},
- "value" : "brussels",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2004
- },
- "endTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 8
+ },
+ "value": "brussels",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2004
+ },
+ "endTime": {
+ "@type": "g:Int32",
+ "@value": 2005
+ }
+ }
}
- }
- }
- }, {
- "@type" : "g:VertexProperty",
- "@value" : {
- "id" : {
- "@type" : "g:Int64",
- "@value" : 9
},
- "value" : "santa fe",
- "label" : "location",
- "properties" : {
- "startTime" : {
- "@type" : "g:Int32",
- "@value" : 2005
+ {
+ "@type": "g:VertexProperty",
+ "@value": {
+ "id": {
+ "@type": "g:Int64",
+ "@value": 9
+ },
+ "value": "santa fe",
+ "label": {
+ "@type": "g:List",
+ "@value": [
+ "location"
+ ]
+ },
+ "properties": {
+ "startTime": {
+ "@type": "g:Int32",
+ "@value": 2005
+ }
+ }
}
}
- }
- } ]
+ ]
+ }
}
}
- } ]
- },
- "meta" : {
- "@type" : "g:Map",
- "@value" : [ ]
+ ]
}
+ },
+ "status": {
+ "code": "200 OK",
+ "message": "",
+ "exception": ""
}
}
----
-
-=== Extended
-
-Note that the "extended" types require the addition of the separate `GraphSONXModuleV3d0` module as follows:
-
-[source,java]
-----
-mapper = GraphSONMapper.build().
- typeInfo(TypeInfo.PARTIAL_TYPES).
- addCustomModule(GraphSONXModuleV3.build()).
- version(GraphSONVersion.V3_0).create().createMapper()
-----
-
-==== BigDecimal
-
[source,json]
----
{
- "@type" : "gx:BigDecimal",
- "@value" : 123456789987654321123456789987654321
+ "result": {
+ "data": [
+ {
+ "id": 1,
+ "label": [
+ "person"
+ ],
+ "type": "vertex",
+ "properties": {
+ "name": [
+ {
+ "id": 0,
+ "value": "marko"
+ }
+ ],
+ "location": [
+ {
+ "id": 6,
+ "value": "san diego",
+ "properties": {
+ "startTime": 1997,
+ "endTime": 2001
+ }
+ },
+ {
+ "id": 7,
+ "value": "santa cruz",
+ "properties": {
+ "startTime": 2001,
+ "endTime": 2004
+ }
+ },
+ {
+ "id": 8,
+ "value": "brussels",
+ "properties": {
+ "startTime": 2004,
+ "endTime": 2005
+ }
+ },
+ {
+ "id": 9,
+ "value": "santa fe",
+ "properties": {
+ "startTime": 2005
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "status": {
+ "code": "200 OK",
+ "message": "",
+ "exception": ""
+ }
}
----
-==== BigInteger
-
-[source,json]
-----
-{
- "@type" : "gx:BigInteger",
- "@value" : 123456789987654321123456789987654321
-}
-----
+==== Error Result
-==== Byte
+The following `ResponseMessage` is a typical example of the typical successful response Gremlin Server will return when returning results from a script.
[source,json]
----
{
- "@type" : "gx:Byte",
- "@value" : 1
+ "result": {
+ "data": {
+ "@type": "g:List",
+ "@value": []
+ }
+ },
+ "status": {
+ "code": "500 Internal Server Error",
+ "message": "A timeout occurred during traversal evaluation",
+ "exception": "ServerTimeoutExceededException"
+ }
}
----
-==== ByteBuffer
-
[source,json]
----
{
- "@type" : "gx:ByteBuffer",
- "@value" : "c29tZSBieXRlcyBmb3IgeW91"
+ "result": {
+ "data": []
+ },
+ "status": {
+ "code": "500 Internal Server Error",
+ "message": "A timeout occurred during traversal evaluation",
+ "exception": "ServerTimeoutExceededException"
+ }
}
----
-==== Char
+=== Extended
-[source,json]
+Note that the "extended" types require the addition of the separate `GraphSONXModuleV4d0` module as follows:
+
+[source,java]
----
-{
- "@type" : "gx:Char",
- "@value" : "x"
-}
+mapper = GraphSONMapper.build().
+ typeInfo(TypeInfo.PARTIAL_TYPES).
+ addCustomModule(GraphSONXModuleV4.build()).
+ version(GraphSONVersion.V4_0).create().createMapper()
----
-==== Duration
+==== BigDecimal
-The following example is a `Duration` of five days.
+A JSON Number.
[source,json]
----
{
- "@type" : "gx:Duration",
- "@value" : "PT120H"
+ "@type" : "gx:BigDecimal",
+ "@value" : 123456789987654321123456789987654321
}
----
-==== InetAddress
-
-[source,json]
+[source,text]
----
-{
- "@type" : "gx:InetAddress",
- "@value" : "localhost"
-}
+123456789987654321123456789987654321
----
-==== Instant
-
-[source,json]
-----
-{
- "@type" : "gx:Instant",
- "@value" : "2016-12-14T16:39:19.349Z"
-}
-----
+==== BigInteger
-==== LocalDate
+A JSON Number.
[source,json]
----
{
- "@type" : "gx:LocalDate",
- "@value" : "2016-01-01"
+ "@type" : "gx:BigInteger",
+ "@value" : 123456789987654321123456789987654321
}
----
-==== LocalDateTime
-
-[source,json]
+[source,text]
----
-{
- "@type" : "gx:LocalDateTime",
- "@value" : "2016-01-01T12:30"
-}
+123456789987654321123456789987654321
----
-==== LocalTime
+==== Byte
+
+A JSON Number with the same range as a 1-byte signed integer.
[source,json]
----
{
- "@type" : "gx:LocalTime",
- "@value" : "12:30:45"
+ "@type" : "gx:Byte",
+ "@value" : 1
}
----
-==== MonthDay
-
-[source,json]
+[source,text]
----
-{
- "@type" : "gx:MonthDay",
- "@value" : "--01-01"
-}
+1
----
-==== OffsetDateTime
+==== Binary
+
+JSON String containing base64-encoded bytes
[source,json]
----
{
- "@type" : "gx:OffsetDateTime",
- "@value" : "2007-12-03T10:15:30+01:00"
+ "@type" : "gx:Binary",
+ "@value" : "c29tZSBieXRlcyBmb3IgeW91"
}
----
-==== OffsetTime
-
-[source,json]
+[source,text]
----
-{
- "@type" : "gx:OffsetTime",
- "@value" : "10:15:30+01:00"
-}
+"c29tZSBieXRlcyBmb3IgeW91"
----
-==== Period
+==== Char
-The following example is a `Period` of one year, six months and fifteen days.
+A JSON String containing a single UTF-8 encoded character.
[source,json]
----
{
- "@type" : "gx:Period",
- "@value" : "P1Y6M15D"
+ "@type" : "gx:Char",
+ "@value" : "x"
}
----
-==== Short
-
-[source,json]
+[source,text]
----
-{
- "@type" : "gx:Int16",
- "@value" : 100
-}
+"x"
----
-==== Year
+==== Duration
-The following example is of the `Year` "2016".
+JSON String with ISO-8601 seconds based representation. The following example is a `Duration` of five days.
[source,json]
----
{
- "@type" : "gx:Year",
- "@value" : "2016"
+ "@type" : "gx:Duration",
+ "@value" : "PT120H"
}
----
-==== YearMonth
-
-The following example is a `YearMonth` of "June 2016"
-
-[source,json]
+[source,text]
----
-{
- "@type" : "gx:YearMonth",
- "@value" : "2016-06"
-}
+"PT120H"
----
-==== ZonedDateTime
+==== Short
+
+A JSON Number with the same range as a 2-byte signed integer.
[source,json]
----
{
- "@type" : "gx:ZonedDateTime",
- "@value" : "2016-12-23T12:12:24.000000036+02:00[GMT+02:00]"
+ "@type" : "gx:Int16",
+ "@value" : 100
}
----
-==== ZoneOffset
-
-The following example is a `ZoneOffset` of three hours, six minutes, and nine seconds.
-
-[source,json]
+[source,text]
----
-{
- "@type" : "gx:ZoneOffset",
- "@value" : "+03:06:09"
-}
+100
----