Gremlin 如何生成TinkerPOP字节码?
我想知道是否有人能给我一些建议(这是从哪里开始的),关于如何实现从查询语言到TinkerPop图遍历的转换。假设语义直观地转化为TinkerPop遍历的子集。换句话说,我要问的是:Gremlin 如何生成TinkerPOP字节码?,gremlin,tinkerpop3,Gremlin,Tinkerpop3,我想知道是否有人能给我一些建议(这是从哪里开始的),关于如何实现从查询语言到TinkerPop图遍历的转换。假设语义直观地转化为TinkerPop遍历的子集。换句话说,我要问的是: 在哪里可以找到TinkerPOP虚拟机的set指令集 TinkerPOP虚拟机字节码是什么样子的 是否有任何文档API可以帮助实现这一点 文档中说,生成字节码很容易,但没有详细了解字节码及其形状等 我希望有人能提供帮助:当前文档中的图形语言提供程序部分是空的在JVM上,您可以使用asAdmin().getByteco
我希望有人能提供帮助:当前文档中的图形语言提供程序部分是空的在JVM上,您可以使用
asAdmin().getBytecode()
从任何遍历中获得字节码
对象,如下所示:
gremlin> g.V().hasLabel('person').out().in().tree().asAdmin().getBytecode()
==>[[], [V(), hasLabel(person), out(), in(), tree()]]
转换为GraphSON格式,字节码
格式如下所示(来自的示例):
此时,完整的指令集基本上绑定到JVM,只是加上相关的表达式/令牌(例如p
,T
,等等)。我们首先将Gremlin定义为一个规范,而不是像今天这样将它绑定到JVM,但这需要一些时间才能完成
请注意,您所谈论的是Gremlin编译器的开发。当我在sparql-gremlin
中写这篇文章时,已经有一个即将发布的示例-可以找到发布前文档。此模块采用SPARQL查询语言并将其转换为Gremlin字节码
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal(SparqlTraversalSource) //1\
==>sparqltraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.sparql("""SELECT ?name ?age
WHERE { ?person v:name ?name . ?person v:age ?age }
ORDER BY ASC(?age)""") //2\
==>[name:vadas,age:27]
==>[name:marko,age:29]
==>[name:josh,age:32]
==>[name:peter,age:35]
它并不十分复杂——也许你可以从中获得灵感。如果你有更多的问题,请考虑问他们。如果能看到更多的Gremlin编译器可用,那就太好了。目前还有其他的(SQL和Cypher),但我相信SPARQL编译器是目前唯一基于字节码的编译器
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal(SparqlTraversalSource) //1\
==>sparqltraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.sparql("""SELECT ?name ?age
WHERE { ?person v:name ?name . ?person v:age ?age }
ORDER BY ASC(?age)""") //2\
==>[name:vadas,age:27]
==>[name:marko,age:29]
==>[name:josh,age:32]
==>[name:peter,age:35]