Marko A. Rodriguez created TINKERPOP-1565:
---------------------------------------------

             Summary: GraphSON 2.0 updates -- supporting attachment, 
maintaining consistency, and reducing verbosity
                 Key: TINKERPOP-1565
                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1565
             Project: TinkerPop
          Issue Type: Improvement
          Components: io
    Affects Versions: 3.2.3
            Reporter: Marko A. Rodriguez
             Fix For: 3.2.3


GraphSON 2.0 has some issues that should be recified for its "official release" 
in 3.3.0.

*Supporting Attachment*

We need to make sure that every element and property can be attached back to 
the main graph.

* For {{Vertex}}, this means that we need to have the ID encoded (CHECK).
* For {{Edge}}, this means we need to have the out/in vertex ids encoded 
(CHECK).
* For {{VertexProperty}}, this means we need to have the vertex ID encoded 
(ERROR).
* For {{Property}}, this means we need to have the the element ID (vertex 
property or edge) encoded and then the subsequent vertex ID (ERROR).

*Maintaining Consistency*

Currently, property encoding in {{Edge}} is different than property encoding in 
{{VertexProperty}}. 

Edge -->
{code}
properties : {
        key : "aKey",
        value : { @type: "gProperty", @value : {"key","aKey","value",10}}
}
{code}

VertexProperty-->
{code}
properties : {
        key : "aKey",
        value : 10
}
{code}

This should be consistent.

*Reducing Verbosity*

We have the problem of representing both {{DetachedElements}} and 
{{ReferenceElements}}. {{DetachedElements}} contain lots of information and is 
typicaly used to ensure a data rich result set. {{ReferenceElements}} contain 
only the necessary information for attachment. I think we can support both 
representations by making certain fields "optional."

Vertex-->
{code}
return new 
Vertex(json.get("id"),json.getOrDefault("label",Vertex.DEFAULT_LABEL),json.getOrDefault("properties",Collections.emptyMap()))
{code}

That is, lots of {{getOrDefault()}} use will make sure that when desesired, we 
only send/recv information that is needed for the particular computatation. 
E.g. as dictated by {{HaltedTraverserStrategy}}.





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to