代码之家  ›  专栏  ›  技术社区  ›  MaatDeamon

如何生成TinkerPOP字节码?

  •  0
  • MaatDeamon  · 技术社区  · 5 年前

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

    1. 是否有任何文档API可以帮助实现这一点。

    文档中说,生成字节码很容易,但没有详细了解字节码及其形状等。

    我希望有人能帮上忙:这个部门 图形语言提供程序 在当前文档中为空

    1 回复  |  直到 5 年前
        1
  •  2
  •   stephen mallette    5 年前

    在JVM上,您可以获得 Bytecode 对象的任何遍历 asAdmin().getBytecode() 详情如下:

    gremlin> g.V().hasLabel('person').out().in().tree().asAdmin().getBytecode()
    ==>[[], [V(), hasLabel(person), out(), in(), tree()]]
    

    已转换为GraphSON格式 字节码 格式如下所示(示例来自 IO documentation ):

    {
      "@type" : "g:Bytecode",
      "@value" : {
        "step" : [ [ "V" ], [ "hasLabel", "person" ], [ "out" ], [ "in" ], [ "tree" ] ]
      }
    }
    

    此时,完整的指令集基本上绑定到JVM,只是 list of Gremlin steps 加上相关的表达式/标记(例如。 P , T 等)。我们是 currently working

    sparql-gremlin -可以找到预发布文档 here . 此模块采用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]
    

    The code 它并不十分复杂——也许你可以从中获得灵感。如果您还有其他问题,请考虑询问。 gremlin-users mailing list . 如果能看到更多的Gremlin编译器可用,那就太好了。目前还有其他的(SQL和Cypher),但我相信SPARQL编译器是目前唯一基于字节码的编译器。