我尝试将本体(* .owl文件)移动到neo4j
以对其进行查询。我找到了一些有用的信息here,但我在这方面遇到了问题:
Node thingNode = getOrCreateNodeWithUniqueFactory("owl:Thing");
我不知道“getOrCreateNodeWithUniqueFactory
”属于哪个班级。这在某些图书馆中是否可用,或者我应该自己实施?
我在这里缺少什么?
答案 0 :(得分:2)
我实现了方法:getOrCreateNodeWithUniqueFactory
private static Node getOrCreateNodeWithUniqueFactory(String nodeName,
GraphDatabaseService graphDb) {
UniqueFactory<Node> factory = new UniqueFactory.UniqueNodeFactory(
graphDb, "index") {
@Override
protected void initialize(Node created,
Map<String, Object> properties) {
created.setProperty("name", properties.get("name"));
}
};
return factory.getOrCreate("name", nodeName);
}
答案 1 :(得分:1)
有几种方法可以创建唯一的节点。最简单的方法是使用UniqueFactory下的Neo4j文档中的http://docs.neo4j.org/chunked/milestone/tutorials-java-embedded-unique-nodes.html#tutorials-java-embedded-unique-get-or-create-with-factory。 另一个是使用密码约束(参见:http://components.neo4j.org/neo4j/2.0.0/apidocs/org/neo4j/graphdb/event/TransactionEventHandler.html)。 最后,可以将创建的节点存储在地图中(通过TransactionEventHandler)并在创建新节点之前查找它。使用owl,将IRI作为键输入并将创建的节点的id作为值输入是有意义的。这种方式比独特的工厂更快但更明智。