2012-10-11 53 views
1

如何通過tdbloader.bat(windows,Jena 2.7.3)通過推理加載TDB存儲?Jena tdbloader彙編程序

我用這個彙編文件:

@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> . 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> . 
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> . 

[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" . 
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset . 
tdb:GraphTDB rdfs:subClassOf ja:Model . 

    <#dataset> rdf:type ja:RDFDataset ; 
      ja:defaultGraph <#infModel> . 

    <#infModel> a ja:InfModel ; 
     ja:baseModel <#tdbGraph>; 
      ja:reasoner 
      [ ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner> ]. 

    <#tdbGraph> rdf:type tdb:GraphTDB ; 
        tdb:location "DB"; 
. 

我的命令:

c:\apache-jena-2.7.3\bat>tdbloader --tdb=test.ttl C:\apache-jena-2.7.3\Lubm10\* 

我有一個例外:

java.lang.ClassCastException: com.hp.hpl.jena.reasoner.rulesys.FBRuleInfGraph cannot be cast to com.hp.hpl.jena.tdb.store.GraphTDB 

有什麼不對? (在「DB」之後刪除分號 - 不起作用)

回答

2

目前尚不清楚你試圖實現什麼。 tdbloader是一種在通過應用或SPARQL端點處理這些三元組之前將三元組加載到TDB存儲的工具。另外,從您的應用程序代碼中,您可以構建一個Jena模型,該模型在TDB圖的基礎模型上使用推理引擎。但我不明白你爲什麼在加載時使用推理模型。如果你看看你所得到的例外:

FBRuleInfGraph cannot be cast to com.hp.hpl.jena.tdb.store.GraphTDB 

它確認你不能在過程的這一階段使用推理圖,我不知道你爲什麼會。當然,除非您試圖靜態計算基礎模型上的推理閉包並將其存儲在TDB中,從而節省了在運行時計算推理的必要性。不過,如果你試圖做到這一點,我不相信目前可以通過耶拿彙編程序完成。你必須編寫自定義代碼才能做到這一點。底線:區分顧慮。對tdbloader使用簡單的圖形說明,在運行時使用推理圖。

+0

感謝您的回答!是的,我試圖實現'運行時推理計算的需要'。我是通過Java代碼做的,但在小數據上(19 MB,Lubm爲2所大學生成的數據集),使用OWL推斷的TDB中的加載時間需要幾小時... 1)讀取TDB數據集Lubm2並製作模型2)製作InfModel使用OWL推理器並從第1頁添加模型3)創建新的空TDB數據集並從第2頁添加InfModel - 花費數小時,並以訪問衝突異常結束。 – gmlvsv