2011-06-14 74 views
2

我目前正在Java SE 1.6下使用HperGraphDB 1.1。hypergraphdb:如何遍歷2個原子之間的所有鏈接?

我在圖中存儲了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, handleB, "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, handleC, "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來考慮鏈接的方向。

問候

回答

0

你或許應該發佈一些代碼,以及你想要做什麼更清晰的描述,因爲你似乎被描述似乎並不與DefaultALGenerator應該如何工作完全一致的。但無論如何,SimpleALGenerator可能更適合您嘗試做的事情 - 您是否嘗試過?

+0

我認爲我的問題的解決方案將是一個SimpleALGenerator,照顧定向鏈接,對吧? – 2011-06-15 09:03:32

+0

它只是返回每個節點的目的地列表,所以我認爲如果我正確理解你的問題描述。 – jkraybill 2011-06-15 11:34:36