我正在开发一个涉及在Java中使用知识表示的项目,我得到的印象是某种语义网络是实现它的方式。
Gremlin / Tinkerpop似乎有非常好的图形生成和遍历语法,但我只能让它在一个独立的shell中工作。它是一种JVM语言,所以可能它有某种Java API?我尝试将源文件夹添加到Eclipse项目中,它只会出现错误并拒绝工作。
有没有更好的方法呢?也许是一个编译库,类似于我用来处理用户输入的Stanford CoreNLP库?
答案 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()