问题描述
|
我目前正在Java SE 1.6下使用HpergraphDB 1.1。
我在图中存储了3个原子,并在它们之间创建了多个链接。
当我使用DefaultALGenerator遍历图时,超图对于链接到我的起始原子的每个原子仅返回1个链接。我认为这来自DefaultALGenerator的实现,因为它标记了已访问的原子,因此不会使用其他链接再次访问它们。
有没有办法检索2个原子之间的所有链接,或者让我在不同的句柄下多次存储原子(或可能是指向同一原子的另一个链接)?
编辑:
public class MyAtom { ... }
public class MyLink extends HGPlainLink { ... }
// initialisation somewhere else
Hypergraph hg = ...
// Create some atoms
MyAtom a = new MyAtom();
MyAtom b = new MyAtom();
MyAtom c = new MyAtom();
// Store the atoms
HGHandle handleA = hg.add(a);
HGHandle handleB = hg.add(b);
HGHandle handleC = hg.add(c);
// Create some links with additional information
hg.add(new MyLink(handleA,handleB,\"First directed link from A to B\"));
hg.add(new MyLink(handleA,\"Second directed link from A to B\"));
hg.add(new MyLink(handleB,handleC,\"First directed link from B to C\"));
hg.add(new MyLink(handleB,\"Second directed link from B to C\"));
// Traverse the graph
// I want to get all paths starting at A and ending in C
DefaultALGenerator alGen = new DefaultALGenerator(
hg,/* The graph */
null,/* No link predicate */
null,/* No atom predicate */
true,/* Traverse preceeding */
false,/* Don\'t traverse succeeding */
false); /* Use normal order */
HGDepthFirstTraversal traversal = new HGDepthFirstTraversal(
handleC,alGen);
while (traversal.hasNext()) {
Pair current = traversal.next();
HGLink l = (HGLink) hg.get((HGHandle) current.getFirst());
Object atom = hg.get((HGHandle) current.getSecond());
System.out.println(l + \" -> \" + atom);
}
考虑链接的方向,我想获取所有路径,这些路径从A开始,以C结尾。
我对链接中的原子进行了排序,以便最后一个原子是链接所指向的原子。因此,我使用DefaultALGenerator来考虑链接的方向。
最好的祝福
解决方法
您可能应该发布一些代码,并对要执行的操作进行更清晰的描述,因为您似乎正在描述的内容似乎与DefaultALGenerator的工作方式并不完全一致。但是无论如何,SimpleALGenerator可能更适合您要尝试执行的操作-您是否尝试过?