如何在Java中使用Gremlin / Tinkerpop?

时间:2015-11-01 18:25:43

标签: java artificial-intelligence gremlin tinkerpop3

我正在开发一个涉及在Java中使用知识表示的项目,我得到的印象是某种语义网络是实现它的方式。

Gremlin / Tinkerpop似乎有非常好的图形生成和遍历语法,但我只能让它在一个独立的shell中工作。它是一种JVM语言,所以可能它有某种Java API?我尝试将源文件夹添加到Eclipse项目中,它只会出现错误并拒绝工作。

有没有更好的方法呢?也许是一个编译库,类似于我用来处理用户输入的Stanford CoreNLP库?

2 个答案:

答案 0 :(得分:3)

Tinkerpop 3提供了一个API(如JDBC为RDBMS做的)和(特定于供应商的)实现。内存中的参考实现也是可用的。 首先,您需要决定所需的实施。出于学习目的,我建议首先使用参考实现(TinkerGraph)。

最简单的方法是使用maven。为此,添加以下依赖项:

<dependency>
    <groupId>org.apache.tinkerpop</groupId>
    <artifactId>tinkergraph-gremlin</artifactId>
    <version>${tinkergraph.version}</version>
</dependency>

如果不使用maven,则需要将以下jar文件添加到类路径中(我不知道TinkerGraph的uber-jar):

+- org.apache.tinkerpop:tinkergraph-gremlin:jar:3.0.1-incubating:compile
|  \- org.apache.tinkerpop:gremlin-core:jar:3.0.1-incubating:compile
|     +- org.apache.tinkerpop:gremlin-shaded:jar:3.0.1-incubating:compile
|     +- commons-configuration:commons-configuration:jar:1.10:compile
|     |  \- commons-lang:commons-lang:jar:2.6:compile
|     +- org.yaml:snakeyaml:jar:1.15:compile
|     +- org.javatuples:javatuples:jar:1.2:compile
|     +- com.carrotsearch:hppc:jar:0.7.1:compile
|     +- com.fasterxml.jackson.core:jackson-databind:jar:2.5.3:compile
|     |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.5.0:compile
|     |  \- com.fasterxml.jackson.core:jackson-core:jar:2.5.3:compile
|     +- com.jcabi:jcabi-manifests:jar:1.1:compile
|     |  \- com.jcabi:jcabi-log:jar:0.14:compile
|     +- org.slf4j:slf4j-log4j12:jar:1.7.12:compile
|     |  +- org.slf4j:slf4j-api:jar:1.7.12:compile
|     |  \- log4j:log4j:jar:1.2.17:compile
|     \- org.slf4j:jcl-over-slf4j:jar:1.7.12:compile

现在,您可以在Java(或其他JVM基础)语言中使用API​​。

Graph g = TinkerGraph.open(); // open in-memory Graph

注意:Tinkerpop3需要Java 8(它提供了一个非常好的基于Java 8流和lambdas的API!)。

答案 1 :(得分:0)

我知道这不是直接回答你的问题,但我现在就在你身边,这个信息可能会派上用场。

我们目前正在使用tinkerpop 3.0.1-与titan 1.0.0一起孵化工作项目。 我强烈建议广泛浏览tinkerpop documentation

我目前正在尝试一种设计模式,我在groovy中有一个基本的图形实用程序类(gremlin groovy非常类似于你提到的独立shell)。 utils类的要点是包装所有遍历,访问和检索功能(从node / s x,遍历edge y和get prop z,依此类推)。这很重要,因为tinkerpop在版本之间往往会有一些变化,这可以作为单一的变化点。 然后我使用这个utils类的常规java来实现我自己的ORM。

这里有一些我发现有用的grovy来源(每个视频约4分钟):

https://www.youtube.com/watch?v=1Trx7cKwMOQ

https://www.youtube.com/watch?v=u7NWMOL5aUo

PS:这里有一些有用的groovy片段,可以节省你的时间:

请注意.fill(结果)作为获取您从shell获取的信息的方法

def result = []
g.V().values().fill(result)
return result.first()