2011-12-28 89 views
2

我正在尝试使用TDB在Jena中与Jena进行查询。所以基本上我得到了一个n3文件名song.n3,并且使用这个文件我想在TDB中使用这个文件。所以我创建了一个在我的Java1文件夹(Netbeans项目文件夹)中生成的目录,然后我得到了实际的n3文件的来源。运行此代码后,我有错误“java.lang.NoClassDefFoundError”。基本上调试代码导致由行引起的错误:Dataset dataset = TDBFactory.createDataset(directory);.我不太清楚为什么会导致这个错误,因为我的目录是空的而没有模型。TDB Jena查询

public static void main(String[] args) throws IOException { 
    String directory = "./tdb"; 
    Dataset dataset = TDBFactory.createDataset(directory); 
    Model tdb = dataset.getDefaultModel(); 
    String source = "C:\\Users\\Name\\Documents\\NetBeansProjects\\Java1\\src\\song.n3"; 
    FileManager.get().readModel(tdb, source, "N3"); 
    String queryString = "PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT * WHERE { ?x owl:sameas ?y }"; 

    Query query = QueryFactory.create(queryString); 

    QueryExecution qe = QueryExecutionFactory.create(query, tdb); 
    ResultSet results = qe.execSelect(); 

    ResultSetFormatter.out(System.out, results, query); 

    qe.close(); 
} 
} 

回答

3

这应该是你的CLASSPATH一个问题,当我使用TDB我有以下脚本耶拿-TDB库加载到我的类路径..

#!/bin/bash 
CP="." 
for i in ./TDB-0.8.9/lib/*.jar ; do 
    CP=$CP:./TDB-0.8.9/lib/$i 
done 
export CLASSPATH=$CP 

这是bash但很容易转换成Windows脚本。底线,确保/lib/目录中的所有罐子都在CLASSPATH中。无论如何,这将有助于你给出完整java.lang.NoClassDefFoundError未找到类的地方,这会给你一个缺失的提示。可能有些日志库不是在jena发行版中发布的。

另外,请留意那个owl:sameas谓词。 SPARQL和RDF区分大小写,正确的谓词是owl:sameAs

+1

这样做会更简单:'for .i in ./TDB-0.8.9/lib/*.jar;做' - 不需要为了运行'ls'而使用子shell的分支。当然,在Java 7中,你可以在CLASSPATH上使用通配符,所以你甚至不需要这样做。 – 2011-12-28 18:16:00

+0

诚然,谢谢伊恩。我不是为什么我这样做,从别的地方复制粘贴。变了! – 2011-12-28 21:22:20