在GraphDB平台(Neo4j、OrientDB、FlockDB、HyperGraphDB...)可以定义节点之间的关系。
我需要定义方向关系,以便关系根据其方向具有不同的名称。
例如:
Parent(A,B) := Sibling(B,A).然后,我想使用术语和方向来遍历或查询一个图。
当然,我不想定义两个关系,而是只定义一个。
有时我甚至想使用非定向名称,例如:
Call(A,B) := Answer(B,A);
TalkWith(A,B) := Call(A,B) || Call(B,A)并使用定向或间接遍历/查询
例如,我可能想问:
Get any X that TalkWith(A,X))或
Get any X that Call(A,X))或
Get any X that Answer(A,X))哪些现有的GraphDB平台支持它?
发布于 2011-05-05 00:07:15
在Gremlin (http://gremlin.tinkerpop.com)中,您可以从数据中显式的内容创建抽象/隐式/推断关系。因此,您可以用这种方式定义推论。
https://github.com/tinkerpop/gremlin/wiki/User-Defined-Steps
Gremlin适用于TinkerGraph、Neo4j、OrientDB、DEX和RDF Sail Stores。
希望这能帮上忙,马可。
发布于 2011-05-03 17:10:09
这听起来像是UI级的问题,而不是数据库级的问题。您正在尝试将有向关系映射到人类友好的名称。
对于Neo4j,您可以将以下信息放入您的自定义RelationshipType:
public enum MyRelationshipType implements RelationshipType
{
CHILD("Parent Of", "Child Of");
public MyRelationshipType(final String forwardString, final String backwardString)
{
this.forwardString = forwardString;
this.backwardString = backwardString;
}
private final String backwardString;
private final String forwardString;
public String getDisplayString(final boolean forward)
{
if (forward)
{
return this.forwardString;
}
else
{
return this.backwardString;
}
}
}发布于 2011-05-04 00:54:15
在InfoGrid中,我们有无向关系的概念。例如,"HasMet":如果A遇到了B,B必然也遇到了A,A和B在关系中扮演相同的角色。
请注意,单向性超越了命名,它是一个核心语义概念,数据库或建模语言可能理解也可能不理解。
此外,在InfoGrid中,您可以定义自己的几个TraversalSpecifications,并将它们命名为您喜欢的任何别名,包括基本遍历(转到与特定类型的关系相关的邻居),或多步骤遍历(例如,转到您母亲那一边的叔叔)。
https://stackoverflow.com/questions/5867018
复制相似问题