2014-05-13 42 views
0

我爲Jena做了一些新的內置項目。我想創建一個圖書館,我可以把它們放在一起。爲新建的內置項目創建一個庫Jena

我該怎麼做?在這種情況下如何創建我的規則?我需要在規則文件中導入一些文件嗎?

謝謝。

+1

因爲你問它的問題可能是過於寬泛。你有沒有想過看看Jena如何實施? –

回答

1

請注意,由於這個問題非常廣泛,我的回答僅僅是對整體設計的一系列建議。首先,我們將從耶拿如何做到這一點開始。

Apache Jena將其規則文件存儲爲分佈式jar包中的類路徑資源。 jena-core有一個名爲etc的包(目錄),其中存儲了多個規則文件。 Jena已經實施的reasoners實際上只是具有特定規則集的GenericRuleReasoner。例如,FBRuleReasoner#loadRules()方法用於檢索此推理程序將使用的規則集。你應該看看它被調用的地方,以便弄清楚你將如何使用這樣的範例。

在你的系統中,我建議構建你自己的實現ReasonerFactory(我們稱之爲MyReasonerFactory)。在MyReasonerFactory中,您可以有一個靜態初始化塊,它將爲您的域特定推理程序註冊Builtin。當有人撥打ReasonerFactory#create(Resource)時,您可以從類路徑加載規則,然後創建一個使用這些規則的GenericRuleReasoner

一些僞代碼(也可能無法編譯)如下:

public class MyReasonerFactory implements ReasonerFactory 

    private static final String RULE_LOC = "/some/directory/in/my/jar/filename.extensiondoesntmatter"; 

    static { 
     // register your builtins 
    } 

    @Override 
    public RuleReasoner create(Resource r) { 
     final GenericRuleReasoner reasoner = new GenericRuleReasoner(this, r); 
     reasoner.setRules(FBRuleReasoner.loadRules(RULE_LOC)); 
     return reasoner; 
    } 

    @Override 
    public String getUri() { 
     return "urn:ex:yourReasoner"; 
    } 

    @Override 
    public Model getCapabilities() { 
     // Your capabilities are identical to GenericRuleReasoner's 
     return GenericRuleReasonerFactory.theInstance().getCapabilities(); 
    } 
} 
+1

我會試試看。順便說一句...非常感謝。你得到了我正在尋找的東西。 – user3563844