首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初始化Apache Jena TDB数据集

初始化Apache Jena TDB数据集
EN

Stack Overflow用户
提问于 2020-03-02 08:05:17
回答 1查看 205关注 0票数 0

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

以下是代码:

代码语言:javascript
复制
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();
        }

    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-03-02 18:43:55

点击并回复用户@jena:https://lists.apache.org/thread.html/r9f788bf21ceb3991329ab0ba3c649d94f2983f92aa3c0a76af788e52%40%3Cusers.jena.apache.org%3E

,这是因为您在提交事务后试图关闭模型,所以错误消息是非常正确的,因为此时您不再处于事务中

将dataset.commit()放在model.close()行之后,它就能工作了

罗布

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60484703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档