【问题标题】:Initialising Apache Jena TDB Dataset初始化 Apache Jena TDB 数据集
【发布时间】:2020-06-14 12:06:33
【问题描述】:

我在 Windows 10 (Eclipse IDE) 下的 Tomcat 8 中使用 Apache Jena,但无法初始化 TDB 数据集。初始化代码放在 try-catch 块内的静态初始化程序中,但没有抛出异常,并且 finally 子句被调用。我尝试使用相对目录名、绝对路径名以及空路径(在内存数据集中)。这 数据集仍然是 null,因此无法写入三元组。我需要在代码中更改什么 初始化数据集?

代码如下:

package knowledgegraph;

import org.apache.jena.tdb.TDBFactory;

import org.apache.jena.rdf.model.*;
import org.apache.jena.shared.JenaException;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;

import org.apache.jena.query.Dataset;
import org.apache.jena.query.ReadWrite;

public class JenaProcessor {

    static Dataset dataset = null;
    static String ns = "http://www.lke.com/lke.owl#";


    static {
        try {
//          dataset = TDBFactory.createDataset("lke");
//          dataset = TDBFactory.createDataset("C:\\Users\\Diptendu\\Desktop\\lke");
            dataset = TDBFactory.createDataset();
        System.out.println("TDB initialised");
        } 
//      catch(Exception ex) {
        catch(JenaException ex) {
            ex.printStackTrace();
        }
        finally {
            System.out.println("Finally clause");
        }
    }


    static public void writeTriple(String corpus_file_id, String subject, String predicate, String object) {

        dataset.begin(ReadWrite.WRITE) ;
        Model model = null;

        try {

            model = dataset.getNamedModel(corpus_file_id);
//          model.enterCriticalSection(Lock.WRITE);

            // write triples to model


            Resource subjectResource = model.createResource(ns.concat(subject));

            Property property = model.createProperty(ns.concat(predicate));

            Resource objectResource = model.createResource(ns.concat(object)); 

//          model.add(subjectResource, property, objectResource);
            Statement statement = model.createStatement(subjectResource, property, objectResource);
            model.add(statement);

            dataset.commit();
//          TDB.sync(model);
        } finally {
//          model.leaveCriticalSection();
            model.close();
            dataset.end();
        }

    }
}

【问题讨论】:

    标签: jena


    【解决方案1】:

    在 users@jena 上提问并回复: https://lists.apache.org/thread.html/r9f788bf21ceb3991329ab0ba3c649d94f2983f92aa3c0a76af788e52%40%3Cusers.jena.apache.org%3E

    这是因为您在提交后试图关闭模型 交易,因此错误消息非常正确,因为您是 那时不再在交易中

    将 dataset.commit() 放在 model.close() 行之后,它将起作用

    罗伯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      相关资源
      最近更新 更多