[ https://issues.apache.org/jira/browse/TINKERPOP-2226?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17821895#comment-17821895 ]
Cole Greer commented on TINKERPOP-2226: --------------------------------------- Hi Waldemar, I'm glad you've brought this up. Adding proper multi-label support in TinkerPop is something which has been on my mind for a while, although I haven't quite found the time to fully develop any ideas yet. Multiple labels are supported by several graph vendors (both TP and non-TP graphs), I would like to see that extension added to the TP data model. There are a few challenges involved with rolling out an update such as this though. The first of which is that some level of backwards compatibility must be maintained, this must be an optional feature for graph providers. Some providers will likely prefer to stick with the current single label model. There are quite a few areas which would need to be touched by this change. As you mentioned already the Element class will need an update, but without breaking the existing `label()` method for single-label users. Some consideration may be needed for how `label()` should behave for a multi-labelled, perhaps it returns the first label, or perhaps it should return a concatenation of all labels. There is also an equivalent element class in all of the gremlin language variants (https://github.com/apache/tinkerpop/blob/a8f90ea959b0eb11a699f39d64ae274eb01e513d/gremlin-dotnet/src/Gremlin.Net/Structure/Element.cs, https://github.com/apache/tinkerpop/blob/a8f90ea959b0eb11a699f39d64ae274eb01e513d/gremlin-go/driver/graph.go, https://github.com/apache/tinkerpop/blob/a8f90ea959b0eb11a699f39d64ae274eb01e513d/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/graph.js, https://github.com/apache/tinkerpop/blob/a8f90ea959b0eb11a699f39d64ae274eb01e513d/gremlin-python/src/main/python/gremlin_python/structure/graph.py). In addition to the element updates, there is the query language considerations (how does a user interact with a multi-labelled graph through gremlin). For this, I imagine that Neptune's existing multi-label gremlin extension (https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.html#feature-gremlin-differences-labels) is a good starting point, but perhaps other choices should be considered as well. For example should we prefer g.addV('person::employee') or g.addV('person', 'employee')? We will also need to update both the label() and hasLabel() steps accordingly (https://github.com/apache/tinkerpop/blob/a8f90ea959b0eb11a699f39d64ae274eb01e513d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/LabelStep.java). TinkerGraph, as our reference implementation, should also be extended to handle multiple labels. TinkerGraph support may be as simple as extending TinkerElement (https://github.com/apache/tinkerpop/blob/a8f90ea959b0eb11a699f39d64ae274eb01e513d/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerElement.java) with the 'labels()' method and changing the label to be a Set, although there may be additional considerations around things such as indices which I'm not aware of currently. In summary there are a lot of pieces which would need to be touched to complete this change and it is a fairly large scope for a first time contributor, however I think it would be a valuable addition to TinkerPop and I would be happy to answer and questions and give guidance wherever possible. If you are willing to push ahead with this, as there are several design decisions required to proceed, the next step is to open a [DISCUSS] thread on our developer maillist dev@tinkerpop.apache.org (archive of past discussions: https://lists.apache.org/list.html?dev@tinkerpop.apache.org). The goal there would be to initiate discussion on the broad design decisions (changes to the Element interface, new behaviors of addV(), addE(), label(), hasLabel() steps...) and build community consensus. Let me know if you have any other questions and if you are still interested in working on this. Thanks, Cole > addLabel() and removeLabel() method of Java API is not exposed for Gremlin > Language > ----------------------------------------------------------------------------------- > > Key: TINKERPOP-2226 > URL: https://issues.apache.org/jira/browse/TINKERPOP-2226 > Project: TinkerPop > Issue Type: Improvement > Components: neo4j, python > Affects Versions: 3.3.6 > Reporter: Ravindra Gupta > Assignee: Cole Greer > Priority: Major > > *labels(), addLabel(), and removeLabel() *methods of Neo4jVertex of Java API > is not exposed or available for gremlin-server language. This method should > be exposed to gremlin-server language. > Thank you. -- This message was sent by Atlassian Jira (v8.20.10#820010)