我想知道是否有人能给我一些提示(从哪里开始),如何实现从查询语言A到TinkerPop图遍历的转换。假设语义直观地转换为TinkerPop遍历的子集。换句话说,我要问的是:
文档称生成ByteCode很容易,但没有详细介绍字节码及其形状等等。
我希望有人能在这方面提供帮助:图形语言提供程序部分在当前文档中为空
发布于 2018-12-31 12:46:44
在JVM上,您可以从任何具有Bytecode的遍历中获得一个asAdmin().getBytecode()对象,如下所示:
gremlin> g.V().hasLabel('person').out().in().tree().asAdmin().getBytecode()
==>[[], [V(), hasLabel(person), out(), in(), tree()]]转换为GraphSON格式的Bytecode格式如下所示(例如来自IO文件):
{
"@type" : "g:Bytecode",
"@value" : {
"step" : [ [ "V" ], [ "hasLabel", "person" ], [ "out" ], [ "in" ], [ "tree" ] ]
}
}整个指令集现在基本上绑定到JVM上,只是Gremlin步骤列表加上相关的表达式/令牌(例如,P、T等)。我们是目前正在工作,首先将Gremlin定义为规范,而不是像现在这样将它绑定到JVM,但这需要一些时间来完成。
请注意,您正在讨论Gremlin编译器的开发。在我用sparql-gremlin编写这篇文章时,已经有了一个即将发布的示例--可以找到这里发布前的文档。该模块采用SPARQL查询语言并将其转换为Gremlin Bytecode。
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编译器是目前唯一基于字节码的编译器。
https://stackoverflow.com/questions/53982612
复制相似问题