首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何生成TinkerPOP ByteCode?

如何生成TinkerPOP ByteCode?
EN

Stack Overflow用户
提问于 2018-12-31 00:40:51
回答 1查看 557关注 0票数 1

我想知道是否有人能给我一些提示(从哪里开始),如何实现从查询语言A到TinkerPop图遍历的转换。假设语义直观地转换为TinkerPop遍历的子集。换句话说,我要问的是:

  1. 在哪里可以找到TinkerPOP虚拟机的集合指令集?
  2. TinkerPOP虚拟机ByteCode是什么样子的?
  3. 是否有任何文档API可以帮助实现这一点。

文档称生成ByteCode很容易,但没有详细介绍字节码及其形状等等。

我希望有人能在这方面提供帮助:图形语言提供程序部分在当前文档中为空

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-31 12:46:44

在JVM上,您可以从任何具有Bytecode的遍历中获得一个asAdmin().getBytecode()对象,如下所示:

代码语言:javascript
复制
gremlin> g.V().hasLabel('person').out().in().tree().asAdmin().getBytecode()
==>[[], [V(), hasLabel(person), out(), in(), tree()]]

转换为GraphSON格式的Bytecode格式如下所示(例如来自IO文件):

代码语言:javascript
复制
{
  "@type" : "g:Bytecode",
  "@value" : {
    "step" : [ [ "V" ], [ "hasLabel", "person" ], [ "out" ], [ "in" ], [ "tree" ] ]
  }
}

整个指令集现在基本上绑定到JVM上,只是Gremlin步骤列表加上相关的表达式/令牌(例如,PT等)。我们是目前正在工作,首先将Gremlin定义为规范,而不是像现在这样将它绑定到JVM,但这需要一些时间来完成。

请注意,您正在讨论Gremlin编译器的开发。在我用sparql-gremlin编写这篇文章时,已经有了一个即将发布的示例--可以找到这里发布前的文档。该模块采用SPARQL查询语言并将其转换为Gremlin Bytecode

代码语言:javascript
复制
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-用户邮件列表上。如果能看到更多Gremlin编译器可用,那就太好了。目前还有其他编译器(SQL和Cypher),但我认为SPARQL编译器是目前唯一基于字节码的编译器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53982612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档