【问题标题】:TDB Jena QueryingTDB Jena 查询
【发布时间】:2011-12-28 17:16:54
【问题描述】:

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

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();
 }
}

【问题讨论】:

    标签: sparql jena


    【解决方案1】:

    这应该是您的 CLASSPATH 的问题,当我使用 TDB 时,我有以下脚本将 Jena-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/ 目录中的所有 jars 都在 CLASSPATH 中。无论如何,它会帮助你提供完整的java.lang.NoClassDefFoundError,其中显示了未找到的类,这会给你一个提示它缺少什么。可能有些日志库没有在 jena 发行版中提供。

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

    【讨论】:

    • 这会更简单:for i in ./TDB-0.8.9/lib/*.jar ; do - 无需分叉子外壳来运行ls。当然,在 Java 7 中,您可以在 CLASSPATH 上使用通配符,因此您甚至不需要这样做。
    • 真的,谢谢伊恩。我不知道我为什么这样做,从其他地方复制和粘贴一些奇怪的东西。变了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多