2015-11-01 21 views
2

我正在研究一个项目,该项目涉及到使用Java中的知识表示,并且我得到了某种语义网络是解决它的方式的印象。如何在Java中使用Gremlin/Tinkerpop?

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

有没有更好的方法来做到这一点?编译的库可能类似于我用来处理用户输入的斯坦福CoreNLP库?

回答

2

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

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

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

,您需要将以下jar-文件​​添加到您的类路径(我不知道的尤伯杯罐子TinkerGraph的):

+- 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流和lambda表达式的API)。

0

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

我们目前正在使用tinkerpop 3.0.1与titan 1.0.0一起在一个项目中工作。 我强烈建议您广泛阅读tinkerpop documentation

我目前正在尝试一种设计模式,我在groovy中有一个基本的图形工具类(gremlin groovy非常类似于你提到的独立shell)。 utils类的要点是包含所有遍历,访问和检索功能(从节点/ s x,遍历边y并获取prop z,等等)。这一点很重要,因为tinkerpop在版本和版本之间往往会有一些变化,这是一个单一的变化点。 然后我使用这个utils类的常规Java来实现我自己的ORM有点东西。

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

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

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

PS:这里有一些有用的常规片段,将时间节省ü的路线:

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

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